С.Бобровский, О Фортране и других языках программирования (1012867), страница 5
Текст из файла (страница 5)
Удивительна степень мобильности программ ПЛ/1! Вот несколько примеров. Несколько лет назад компании Rockwell потребовалось перенести на HP-UX компьютерную систему технического обслуживания бомбардировщиков В1, написанную на PL/I и работавшую на старых мэйнфреймах IBM 4381 (их производительность эквивалентна производительности компьютеров с процессором Intel 486/50 МГц). Лет 20 назад эти машины считались одними из самых «крутых» ЭВМ; ввоз их в СССР был запрещен. Чтобы заново переписать эту систему, состоявшую из 90 модулей по 3000 строк, требовались миллионы долларов. Два года пыталась Rockwell перевести тексты программ с PL/I на С, потратила кучу денег и уйму времени, но ничего у нее так и не получилось. Наконец было решено сохранить исходный язык программирования. Для переноса был выбран вариант Open PL/I компании Liant, работающий под управлением Unix и Windows 95/NT. В результате перенос успешно завершился за 4 месяца, система стала работать в клиент-серверной архитектуре с СУБД Oracle (данные были перекачаны в Oracle за 3 дня), а суммарные расходы на перенос составили всего 140 тысяч долларов.
Американская лаборатория Jet Propulsion Laboratory разработала программное обеспечение для обмена информацией с космической станцией «Вояджер», которая в 1977 году вышла на орбиту Нептуна (полет станции «Галилео» к Юпитеру был автоматизирован также с использованием PL/I). Исходные тексты занимали 55 тысяч строк. С увеличением объемов данных, регулярно поступающих от станции, стало невозможным работать со старыми приложениями на древних мэйнфреймах UNISYS и DEC. Было решено перенести все программное
обеспечение на сеть рабочих станций, функционирующих под управлением Unix/Linux. Проблема осложнялась тем, что старый PL-код был недокументирован и много раз переделывался. Сначала планировалось полностью переписать весь проект на Си, но из-за запутанности исходных текстов и отсутствия формальных описаний проекта данная работа оценивалась в миллионы долларов. В конце концов, был выбран продукт Open PL, и с его помощью в течение 1996 года все старые тексты были успешно перенесены в новую среду.
Сегодня ПЛ/1 реализован практически на всех мыслимых платформах: MS-DOS, Windows, OS/2, Unix/Linux, AS/400, IBM RS/6000 AIX, DEC, VM, MVS, VSE и многих других. Язык постоянно совершенствуется. В него были введены новые дополнения: усилена и расширена типизация данных (в частности, добавлен тип «целое без знака»), стало возможным определять пользовательские типы, появился оператор break и т. д. Были добавлены новые функции работы с датами/временем, средства эффективной обработки строк и ряд других возможностей.
Не забыла свое детище и компания IBM. В ее версиях языка VisualAge PL/I и Enterprise PL/I (www-4.ibm.com/software/ad/pli) реализуются принципы объектно-ориентированного программирования, осуществлена интеграция с программными компонентами, написанными на Коболе, С и C++, а в последнее время предлагается стыковка с Java. Так что российской армии программистов язык ПЛ/1 (или PL/I, кому как нравится) может еще неплохо послужить.
PL/B: язык для бизнесменов
На каком языке программирования лучше всего писать бухгалтерские, экономические программы, корпоративные информационные системы, ориентированные на обработку деловой и хозяйственной информации? Язык С не содержит элементарных средств защиты от ошибок, поэтому разработка проекта на С неимоверно затягивается, а итоговый продукт подчас работает весьма ненадежно. Использование реализаций Бейсика и Паскаля, например Visual Basic и Delphi, для создания крупных систем, вызывают трудности при их изучении. Для такой работы, помимо знания нескольких операторов, необходимо прочитать толстенные руководства или окончить хорошие (и дорогие) курсы, чтобы использовать возможности мощной оболочки по максимуму. При этом надо разбираться в технологиях Microsoft и Borland, знать Windows API, понимать принципы работы клиент-серверных систем и многое другое. Если использовать интерпретируемые языки четвертого поколения, то результирующий код получается неэффективным, и генерация простого отчета может растянуться на часы. Во всех этих случаях приходится использовать действительно грамотных специалистов, которых не так-то легко найти.
Лучше всего для создания экономических приложений подходит Кобол. Но устаревший стандарт этого языка ориентирован только на пакетную обработку данных. Сотни коммерческих версий Кобола, использующих различные библиотеки для организации графического интерфейса пользователя и работы с базами данных, друг с другом не совместимы.
Как же быть? Этим вопросом задаются многие. В конце 80-х годов, с появлением первых персональных компьютеров, возникла необходимость разработки нового языка, ориентированного на область бизнес-приложений. Был сформирован комитет, в который вошли специалисты десятков коммерческих фирм из списка Fortune 500, учебных и государственных организаций со всего мира. К создаваемому языку предъявлялись такие требования: он должен быть очень простым в изучении, обеспечивать одновременную работу с данными нескольких пользователей и иметь развитые средства поддержки интерактивного режима. В результате пятилетних трудов (на которые спонсоры выделили более 100 тысяч долларов) родился язык PL/B, основанный на более старом языке DATABUS корпорации Datapoint. A/VSI-стандарт на этот язык был принят в декабре 1994 года после долгих обсуждений и очень жесткого отбора наиболее подходящих элементов языка из множества предложенных. Язык PL /В — это типичный язык третьего поколения. Он не является универсальным и ориентирован только на создание деловых приложений. В стандарт языка входят средства обеспечения работы нескольких пользователей с большими объемами данных, команды поиска и выборки информации, генерации всевозможных бизнес-отчетов. При этом язык PL /В очень легок в изучении - в нем нет никаких сложных конструкций.
Операторы языка позволяют организовать клавиатурный интерфейс, ориентированный на активную работу с пользователем. Экранные формы, меню создаются одной-двумя командами. В язык PL /В встроена не привязанная к конкретной компьютерной архитектуре система описания структур файлов и данных произвольной сложности. Она похожа на декларации Кобола. В языке PL/В имеются средства организации SQL-запросов к РСУБД, основанные на стандарте ХЗН2, что позволяет получать мобильные программы, не зависящие от платформы и используемых баз данных.
Благодаря наличию в этом языке мощных и в то же время простых команд, разработчики получают возможность быстро создавать высоконадежные приложения и модули обработки хозяйственных операций, складского учета, планирования и анализа финансовой деятельности, генерации отчетов и так далее. Для повышения надежности работы программы выполняются в специальной виртуальной среде, не допускающей краха системы или порчи памяти. Так как синтаксис языка PL/B четок и не допускает двусмысленностей, для языка написаны очень быстрые трансляторы.
Сегодня во всем мире более 100 компаний предлагают PL/Б-компиляторы и интерпретаторы, CASE-системы, генераторы кода и конверторы из языка PL /В в Кобол, С и Бейсик для множества платформ. На этом языке создают приложения и коммерческие компании (от самых маленьких фирмочек до крупнейших корпораций), и отдельные программисты. Язык PL /В используется в учебных центрах, государственных и военных организациях.
Для создателей экономических продуктов уже давно выпускаются простые, дешевые и эффективные языки, не только PL/В. Использовать дружелюбные (а не «человеконенавистнические») системы программирования — в интересах и производителей, и потребителей. Существенно сокращаются сроки разработки, повышается надежность программного обеспечения, облегчаются процессы модификации и совершенствования приложений.
Конечно, вряд ли язык PL/B может стать реальным конкурентом уже существующим и массово распространенным коммерческим версиям компиляторов C++. Однако он имеет неплохую сферу применения в качестве языка описания сценариев, встраиваемого в корпоративные и финансовые системы.
Языки сценариев («скрипт-языки»)
Скрипт не забыт
Языки программирования принято делить на пять поколений. Однако в эту классификацию не укладывается большая группа языков описания сценариев или так называемых скрипт-языков. Программы на скрипт-языках обычно вставляются в формате исходных текстов в приложения для их гибкой настройки, или, наоборот, служат мощным средством для объединения программного обеспечения, написанного на других языках. Но большинство разработчиков считают скрипт-языки только вспомогательным инструментом. Например, язык JavaScript обычно воспринимается как урезанный вариант Java и используется в основном для создания бегущих строчек в браузере.
Программисты иногда даже возмущаются отсутствием в JavaScript типизации, что говорит о полном непонимании предназначения этого языка. Ведь JavaScript обладает уникальными возможностями по интеграции объектов Windows (например, для автоматического управления браузером Internet Explorer, который является OLE-объектом). При работе со сценариями JavaScript использовать переменные конкретных типов неудобно или невозможно.
В своей классической статье «Сценарии — высокоуровневое программирование 21 века» Джон Аустираут, создатель скрипт-языка Tcl/Tk, назвал скрипт-языки языками системной интеграции, потому что они ориентированы на работу не с элементарными данными, а с объектами операционной среды. Это позволяет эффективно использовать возможности операционной системы, интегрируя ее ресурсы с помощью языков, которые на высоком уровне, без написания тысяч строк кода, двумя-тремя командами позволяют легко манипулировать системными объектами и «склеивать» их в одно целое. По мнению Аустираута, принципы объектно-ориентированного программирования не завоевали должной популярности только потому, что их пытаются реализовывать на уровне примитивных операторов языков третьего поколения (3GL) типа C++, что приводит к громоздкому и неуклюжему коду, а не на уровне свойств и методов самих объектов. В отличие от 3GL-языков, в современных скрипт-языках парадигма объектно-ориентированного программирования воплощена наиболее полно. Она присутствовала даже в старых скрипт-языках типа командных языков MS-DOS или Unix/Linux, которые позволяют довольно эффективно работать с объектами операционной системы: файлами и программами.
Практически все скрипт-языки относятся к интерпретируемым (в последнее время для ускорения интерпретации все более активно используется компиляция в промежуточный код). Это связано с тем, что для работы с объектами операционной системы язык должен обладать высокой гибкостью, а процесс выполнения системных программ часто зависит от многих факторов, которые трудно предусмотреть на этапе компиляции. Для повышения гибкости в скрипт-языках обычно отсутствует строгая типизация. Основной элемент данных в этих языках — строка, которую при работе с двоичными объектами нередко надо интерпретировать как последовательность байтов. Кроме того, при настройке крупной системы постоянно возникает нужда в быстром создании или модификации небольших программ, для чего удобнее использовать интерпретаторы. Конечно, скрипт-языки проигрывают компилируемым SGL-языкам в производительности (оператор С транслируется в среднем в 3-7 машинных команд, а для выполнения одного оператора скрипт-языка требуются сотни тысяч команд), но позволяют разрабатывать программное обеспечение в десятки раз быстрее. К тому же они легче в изучении, что очень важно при подготовке персонала для сопровождения операционной системы и компьютерных сетей.
Perl — язык альтруистов
Уже давно подтверждено практикой, что наиболее популярные языки программирования создаются не рабочими группами, а специалистами-одиночками. Это, впрочем, касается всех сфер деятельности, которые можно трактовать как искусство, а не как ремесло. Так было, в частности, с языками С (Д. Ритчи) и Паскалем (Н. Вирт). В 80-е годы Ларри Уолл разработал язык Perl (Practical Extraction and Report Language). Первоначально Perl задумывался как средство эффективной обработки больших текстовых файлов, генерации текстовых отчетов и управления задачами. Одна из первых реализаций интерпретатора Perl прекрасно проявила себя в среде Unix/Linux, где Perl использовался в качестве командного языка. А сегодня вообще трудно представить Unix/Linux без Perl. Для этого языка написано немало компиляторов, которые удобны при создании многократно используемых утилит. Но для большинства задач по-прежнему применяются интерпретаторы, которые очень просты и позволяют использовать всю мощь операционной среды, под управлением которой работают. За это, конечно, приходится расплачиваться производительностью.
Язык Perl во многом основан на языке С и имеет схожий, но более компактный, синтаксис. В частности, вообще отсутствует типизация. В язык добавлен ряд новых функциональных возможностей, например, хэш- или ассоциативные массивы, мощные операторы THnaforeach и т. д. Но язык Perl имеет и качественные отличия от С. Так, в нем введено понятие динамического массива и списка. При сложной обработке текстов не обойтись и без операций сопоставления с образцом, которые реализованы в языке весьма элегантно.