Интерплатформенное программное обеспечение

Обычная прикладная программа при выполнении задач опирается на операционную систему. Ей могут потребоваться услуги устройства управления окнами, чтобы общаться с пользователем, или устройства управления файлами, чтобы считать данные с запоминающего устройства. К сожалению, обращение к этим устройствам в разных операционных системах осуществляется по-разному. Поэтому, если программы будут передаваться по сети и выполняться на машинах с разными операционными системами, они не должны зависеть от типа операционной системы и машины. Для таких программ используется термин «интерплатформенные». Таким образом, интерплатформенное программное обеспечение — это программное обеспечение, которое не зависит от используемой операционной системы и аппаратного обеспечения и, следовательно, может работать по всей сети.

Когда появились первые языки ассемблера, они казались гигантским шагом по направлению к более совершенным методам программирования. Многие считали, что они представляют совершенно новое поколение языков программирования. Со временем языки ассемблера стали называть языками второго поколения, языками же первого поколения являются сами машинные языки.

Хотя языки второго поколения и имели большое преимущество перед машинными языками, им все же не удалось стать окончательной средой программирования. Примитивы, которые использовались в языках ассемблера, в сущности, ничем не отличались от примитивов, применяемых в соответствующих машинных языках. Различие заключалось только в синтаксических структурах, использовавшихся для их представления. Поэтому программа, написанная на языке ассемблера, является машинно-зависимой, то есть команды программы выполняются в соответствии с характеристиками отдельной машины. Программу, написанную на языке ассемблера, нельзя перенести на машину с другой архитектурой. Для этого ее нужно переписать, чтобы она соответствовала конфигурации регистров и набору команд новой машины.

Другой недостаток языков ассемблера заключается в том, что хотя программисту и не приходится записывать команды в виде последовательности битов, он все-таки вынужден мыслить в небольших шагах машинного языка. Данная ситуация аналогична использованию при проектировании дома таких понятий, как доска, гвоздь, кирпич и т. д. Постройка дома, конечно, требует описания, основанного на этих элементарных составляющих, но процесс проектирования будет значительно проще, если использовать более крупные составляющие, такие как комната, окно, дверь и т. д.

Говоря проще, элементарные примитивы, из которых, в конце концов, строится продукт, не обязательно должны использоваться при разработке этого продукта. В процессе проектирования лучше применять примитивы более высокого уровня, каждый из которых представляет собой понятие, связанное с одной из главных характеристик продукта. По окончании проектирования эти примитивы можно перевести в понятия более низкого уровня, имеющие отношение к деталям выполнения.

Следуя этим принципам, специалисты в области вычислительной техники начали разрабатывать языки программирования, более подходящие для создания программного обеспечения, чем языки ассемблера. В результате возникли языки программирования третьего поколения, которые отличались от своих предшественников тем, что в них использовались машинно-независимые примитивы высокого уровня. Известным примерами таких языков являются FORTRAN (FORmula TRANslator), разработанный для создания научных и инженерных прикладных программ, и COBOL (COmmon Business Oriented Language — язык программирования для промышленных и правительственных учреждений), созданный военно-морским ведомством США для прикладных программ в бизнесе. Главным при разработке языков третьего поколения было создание набора примитивов высокого уровня, с помощью которых можно создавать программное обеспечение. Каждый из примитивов был построен так, что его можно выполнить как последовательность примитивов низкого уровня, входящих в машинный язык. Например, утверждение

присвоить переменной GrossWhite значение (VenichleWeight + LoadWeight)

выражает сложные действия, не описывая подробно, как отдельная машина должна

выполнять задачу. Следовательно, структура нашего псевдокода

идентификатор <— выражение

является потенциальным примитивом высокого уровня.

После определения набора примитивов была написана программа, преобразующая программу, записанную с помощью этих примитивов, в программу на машинном языке. Такая программа называется транслятором (translator). Трансляторы были очень похожи на ассемблеры второго поколения, только им приходилось объединять несколько машинных команд в короткие последовательности, чтобы имитировать действия, выраженные одним примитивом высокого уровня. Такие транслирующие программы часто называют компиляторами (compilers).

Разработка первой компилирующей программы приписывается Грейс Хоппер (Grace Hopper), которая также способствовала более широкому распространению понятия языков программирования третьего уровня. Эта задача не так проста, как может показаться. Идея записывать программы в форме, близкой к естественному языку, была настолько неожиданной и революционной, что многие чиновники сначала не приняли ее. Грейс Хоппер показала транслирующую программу для языка третьего поколения, в котором использовались не английские слова, а немецкие. Суть заключалась в том, что язык программирования состоял из небольшого набора примитивов, которые можно было записать на большом количестве естественных языков, при этом в транслирующую программу нужно было ввести только несколько простых изменений. Но она была очень удивлена, узнав, что многие из зрителей были возмущены тем, что в после второй мировой войны она собирается учить компьютеры понимать немецкий язык. Сегодня мы знаем, что понимать естественный язык — это гораздо больше, чем просто реагировать на несколько строго определенных примитивов.

Альтернативой трансляторам являются интерпретирующие программы или интерпретаторы (interpreters), возникшие как другой способ выполнения программ, написанных на языках третьего поколения. Эти программы очень похожи на трансляторы за исключением того, что они выполняют программу по мере ее ввода и не записывают транслируемую программу для последующего выполнения.

То есть интерпретатор выполняет1 команды, как только они получены, а не создает копию программы, записанную на машинном языке, чтобы выполнить ее позже.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: