От двоичного кодирования к системам автоматической генерации кода

Вид материалаДокументы

Содержание


PL/B: язык для бизнесменов
Языки сценариев («скрипт-языки»)
Perl — язык альтруистов
Perl мощных встроенных средств обработ­ки данных этот язык легко осваивают начинающие пользователи. Если человек знает С, то пер
HTML наподобие сценариев " onclick="return false">
Java, более раскрученный для программирования в Сети, бесперспективным. На изучение более мощного языка Perl
Так-тикль — язык системной интеграции
Tel синтаксически немного похож на Perl.
Tel — расширяемый. В нем можно самостоятельно определять новые команды языка. Приведем классический пример определения команды T
Java, языке фирмы Sun, в которой Аустираут трудился с середины 90-х годов. В 1998 году он основал соб­ственную компанию Scriptic
Tcl/Tk распространяется в исходных текстах бесплатно (см. напри­мер purl.org/tcl/home). Он может легко интегрироваться с C++, Ад
Tel начала поддерживать фирма Sun. Была создана рабочая группа SunScript
Tcl/Tk одно время активно поддерживался компа­нией Sun, можно предсказать ему хорошее будущее. А история создания Tcl/Tk
Подобный материал:
1   2   3   4   5   6

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++. Однако он имеет неплохую сферу применения в качестве языка описания сценариев, встраиваемого в корпоративные и финансовые системы.


Языки сценариев («скрипт-языки»)


Скрипт не забыт


Языки программирования принято делить на пять поколений. Однако в эту классификацию не укладывается большая группа языков описа­ния сценариев или так называемых скрипт-языков. Программы на скрипт-языках обычно вставляются в формате исходных текстов в при­ложения для их гибкой настройки, или, наоборот, служат мощным средством для объединения программного обеспечения, написанного на других языках. Но большинство разработчиков считают скрипт-языки только вспомогательным инструментом. Например, язык " onclick="return false"> обычно воспринимается как урезанный вариант Java и используется в основном для создания бегущих строчек в браузере.

Программисты иногда даже возмущаются отсутствием в " onclick="return false"> типизации, что говорит о полном непонимании предназначения этого языка. Ведь " onclick="return false"> обладает уникальными возможностями по инте­грации объектов Windows (например, для автоматического управления браузером Internet Explorer, который является OLE-объектом). При ра­боте со сценариями " onclick="return false"> использовать переменные конкретных типов неудобно или невозможно.

В своей классической статье «Сценарии — высокоуровневое програм­мирование 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 имеет и качественные отличия от С. Так, в нем введено понятие динамического массива и списка. При сложной обработке тек­стов не обойтись и без операций сопоставления с образцом, которые реализованы в языке весьма элегантно.

По мощности Perl значительно превосходит С. Кроме того, в язык в качестве стандартных введено много часто используемых функций работы со строками, массивами, всевозможные средства преобразова­ния данных, управления процессами, работы с системной информацией и других. Виртуальная PerZ-машина позволяет работать с произволь­ными по величине данными, а интерпретатор языка оптимизирован для быстрого сканирования текста. В него также встроена поддержка более безопасного выполнения программ в сравнении с С. Например, выход указателя за границы массива не приведет к порче памяти. Глу­бина рекурсии, без которой обрабатывать тексты и списки неудобно, не ограничена.

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

Благодаря наличию в языке Perl мощных встроенных средств обработ­ки данных этот язык легко осваивают начинающие пользователи. Если человек знает С, то перейти на Perl ему не составит никакого труда. С другой стороны, в погоне за мощностью язык Perl усугубил и без того не слишком наглядный процесс программирования на С. Иногда слож­но понять, что делает программа, уместившаяся в трех строчках. С учетом этих особенностей язык Perl редко используют для коллек­тивной разработки больших программ, да он для этого и не предназна­чался.

Скорее, этот язык подходит для создания всевозможных ути­лит и особенно Web-сценариев. Популярность этого языка резко пошла вверх, когда сеть Интернет стала все больше восприниматься как Все­мирная Паутина. Текстовый язык HTML идеально подходил для ана­лиза и генерации Wife-страниц с помощью сценариев Perl. Эти особен­ности языка в сочетании с поддержкой передачи данных в Сети через кокеты и возможностью обращения к функциям операционной системы сделали этот язык одним из самых популярных языков программиро­вания для Интернета. Сегодня на языке Perl написаны тысячи сцена­риев, которые активно используются во всем мире. В частности, все­возможные счетчики, формы запросов с произвольной структурой управляющих элементов или утилиты поиска на Web-узле страниц с заданными ключевыми словами занимают всего несколько сотен (до 500) строк кода. Поэтому многие провайдеры поддерживают Perl, правда, обычно требуя, чтобы пользователи предварительно отдавали свои сценарии ЖеЬ-мастеру на тестирование.

Имеются реализации Perl в виде языка сценариев, которые вставля­ются в исходном виде в код HTML наподобие сценариев " onclick="return false"> Здесь надо отметить принципиальное отличие обычной Peri-программы, которая хоть и распространяется только в исходных текстах, но выпол­няется целиком на сервере, от сценария PerlScript, интерпретацию которого берет на себя клиентская машина.

Интересно, что многие PerZ-программисты считают язык Java, более раскрученный для программирования в Сети, бесперспективным. На изучение более мощного языка Perl требуется значительно меньше времени, чем на изучение Java. Если же необходимо написать большую программу для Сети, можно использовать более знакомый Си++. Конеч­но, язык Java имеет и ряд преимуществ, но он вовсе не конкурирует с языком Perl, занимая совершенно другую нишу. Программы на языке Java представляют собой интерпретируемый двоичный код. На этом языке можно написать, например, сетевую игрушку, но все государст­венные организации, особенно имеющие отношение к национальной безопасности, никогда не запустят на своей сети непроверенный дво­ичный Java-код, так как бреши есть в любой программной системе. А программы на Perl распространяются в исходных текстах — таково требование создателя языка — и профессиональным программистам не представляет труда протестировать их.

Победил Perl и другого конкурента. Для сложной обработки текстов долгое время использовался язык СНОБОЛ, созданный в начале 1960-х годов. Он обладает очень мощными средствами сопоставления с образцом, ориентированными на анализ текстовой информации. Но с появлением персональных компьютеров СНОБОЛ полностью отошел на второй план, так как был ориентирован на пакетную обработку дан­ных. В нем совершенно отсутствуют средства поддержки пользователь­ского интерфейса, а, кроме того, по синтаксису текст программы на СНОБОЛе напоминает текст на Фортране из-за обилия меток, которые определяют результат сопоставления (переход по успеху/неуспеху). Программа выглядит слишком запутанной по сравнению с элегантным кодом Perl.

Распространялся и распространяется язык Perl только бесплатно — таково условие его создателя. Этот язык уже давно перерос рамки про­екта GNU (свободно распространяемое программное обеспечение для Unix/Linux), в рамках которого был создан первоначально. Поддержку пользователей, разработку новых версий интерпретаторов и компиля­торов для своего любимого языка PerZ-программисты осуществляют бесплатно. В конце 90-х годов вышла пятая версия Perl. Реализация языка была полностью пересмотрена автором. Изменился синтаксис Perl — добавились конструкции, упрощающие чтение исходного кода. Значительно информативнее стали предупреждения и сообщения об ошибках. Грамматика, описывающая Perl 5.x, сократилась в два раза. Почти на две трети уменьшилось количество ключевых слов. При этом сохраняется полная совместимость синтаксиса со старыми версиями языка. Кроме того, стало возможным создавать двоичные PerZ-модули с помощью компилятора, хотя такая особенность востребована в основ­ном в задачах, где на первый план выходит производительность работы системы.

В пятой версии Perl сделана попытка сориентировать язык на созда­ние достаточно крупных программ. Введено понятие пакета для поддер­жки модульной структуры. Пакеты могут трактоваться как классы с виртуальными методами — в языке реализованы основные понятия объектно-ориентированного программирования. Расширен список баз данных, к которым в языке Perl организован встроенный доступ. С по­мощью документированного PerZ-интерфейса можно части кода на этом языке встраивать в программы на C/C++ и, наоборот, подключать биб­лиотеки Си к PerZ-программам.

На момент написания книги (начало 2003 года) вышла версия языка Perl 5.8.O. Она характеризуется улучшенной поддержкой текста в фор­мате Unicode, оптимизированными режимами ввода/вывода, возмож­ностью эффективного выполнения нескольких процессов, повышенной точностью вычислений с плавающей запятой. РегГ-система без проблем работает под управлением Unix/Linux, Windows, VMS, OS/2,AmigaOS, на ряде 64-разрядных платформ.

Грядет и шестая версия Perl. Ларри Уолл решил, что она будет создана уже не им одним, а всем сообществом Регl-программистов. В результате должна появиться универсальная система, по идеологии напоминаю­щая систему Java. Сценарий на Perl 6 будет преобразован компилято­ром в переносимый байт-код. Самое главное, чтоРегl-технология позво­лит готовить программу на любых языках программирования. Такое решение, получившее название Parrot, доступно в виде альфа-версии 0.0.9 на сайте www.parrotcode.org. Пока оно объединяет три компилятора.

Получить подробную информацию о текущей, пятой версии Perl можно по адресу www.perl.org.


Так-тикль — язык системной интеграции

В университете Беркли (штат Калифорния) в конце 80-х годов работал уже упоминавшийся Джон Аустираут, в то время известный не более своих коллег. Сегодня же его знает большинство программистов всего мира, так как именно он придумал популярный скрипт-язык Tel и биб­лиотеку Tk. Впервые идея языка Tel (Tool Command Language, произ­носится «тикль») пришла в голову Аустирауту в 1987 году. В Tel он попытался воплотить свое видение идеального скрипт-языка, и в даль­нейшем всемирная популярность Tel подтвердила правильность его взглядов. Первая работающая версия языка появилась в 1989 году, библиотека Tk вышла в 1991 году. Реализация Tel чаще всего испол­няется в виде встраиваемой в приложения библиотеки на С, содержа­щей интерпретатор Tel.

Язык Tel синтаксически немного похож на Perl. Он ориентирован пре­имущественно на автоматизацию рутинных процессов операционной системы и крупных программных систем. Он содержит мощные ко­манды, предназначенные для работы с абстрактными нетипизирован­ными объектами. Принципиальные отличия языка Tel от командных языков операционной системы — его независимость от типа системы (не надо утруждать себя изучением нового командного языка) и, самое главное, возможность создавать программы с переносимым графиче­ским интерфейсом (GUI). Можно, например, написать утилиту просмо­тра всех каталогов и подкаталогов с уничтожением временных файлов, приделать к ней симпатичную оболочку с кнопочками, меню, картин­ками, диалогом ввода расширения уничтожаемых файлов, и эта ути­лита будет работать практически в любой операционной системе!

Язык Tel — расширяемый. В нем можно самостоятельно определять новые команды языка. Приведем классический пример определения команды Tel:

button.b-text Hello!-font {Times 16}~command {puts hello}

Команда button предназначена для создания кнопки (. b) с надписью Hello! (можно указать картинку), которая пишется шрифтом Times размером 16 пунктов. При нажатии на кнопку в стандартное устройство вывода посылается строка hello (puts hello). Набором таких команд можно очень компактно и наглядно описать графический интерфейс пользователя с полным функциональным наполнением. Эти команды можно вызы­вать из других языков или на их основе писать программное обеспече­ние полностью на Tel. В последнем случае приложение рассматривается как Pure Tell 00%.

Система Tcl/Tk разрабатывалась одновременно как язык и библиотека. Эта идея была позже реализована в Java, языке фирмы Sun, в которой Аустираут трудился с середины 90-х годов. В 1998 году он основал соб­ственную компанию Scriptics, переименованную впоследствии в Ajuba Solutions. Наконец, логическим завершением очередной фазы разви­тия языка стало создание группы, объединившей 14 ведущих разра­ботчиков Tcl/Tk (www.tcltk.com), & Ajuba Solutions была приобретена в 2000 году компанией ActiveState (tcl.activestate.com).

Библиотека Tk содержит стандартизованный набор команд поддержки графической оболочки в стиле Motif. Управляющие элементы, храня­щиеся в библиотеке Tk, называются виджетами (widgets). Большое количество нетиповых виджетов можно найти в Сети. На основе биб­лиотеки Tk создаются переносимые приложения, например, на С, с графическим интерфейсом.

На языке Tel написано много мобильных приложений с графическим интерфейсом, которые используются в самых разных областях: для управления операционной системой, администрирования сетей, обслужи­вания Web-серверов и других целей. В библиотеке Tk имеются команды для работы с сокетами, с помощью которых можно создавать прило­жения для Сети. Для браузеров разработаны подключаемые модули, позволяющие вставлять Tci-скрипты («тиклеты») в страницы HTML (см. www.neuron.com). Известно использование Tcl/Tk в масштабных рос­сийских проектах, в частности, в кодогенераторах фирмы DataX/ Florin для поддержки платформно-независимого пользовательского интерфейса.

Язык Tcl/Tk распространяется в исходных текстах бесплатно (см. напри­мер purl.org/tcl/home). Он может легко интегрироваться с C++, Ада, Про­лог, Модула-3, Perl и многими другими языками. Язык Tel реализован для MS-DOS, Windows (на сайте www.scriptics.com), Macintosh, AIX 3.x, VMS, для практически всех Unix-платформ (SunOS, SCO Unix, HP-UX, ESDI, Linux, QNX), а также для суперкомпьютеров Cray и NEC. На Pure Tel 100% написана оболочка Visual Tel, которая позволяет разра­батывать кросс-платформное программное обеспечение для Unix /Linux, Windows и Macintosh. Имеется расширение языка incrTcl/incrTk, ори­ентированное на создание больших приложений.

С начала 90-х годов проект Tel начала поддерживать фирма Sun. Была создана рабочая группа SunScript (название языка осталось прежним). В середине 90-х годов в этой группе поработал и Джон Аустираут. Группа SunScript создает коммерческие версии библиотеки Tk, в частности, для Windows и Macintosh. Некоторое время назад эта группа присту­пила к интеграции Tel и Java. Разработана версия Tel, написанная на JavaJacl (JAva Command Language). Расширение языка Tel Blend позволяет работать с виртуальной машиной Java и интегрировать сце­нарии Tel с Java-кодом.

В конце августа 1997 года вышла новая, восьмая версия Tcl/Tk (сегодняшняя модификация — 8.3.2). Интерпретация заменена ком­пиляцией в байт-код «налету» (по аналогии с Java). Полностью переде­лана обработка строк. Работа с двоичными объектами и большими тек­стовыми массивами по сравнению с версией 7.x ускорилась в 2—20 раз. Добавлены новые команды быстрой сортировки, ввода/вывода двоич­ных данных с поддержкой различных типов периферийных устройств, поддерживается протокол HTTP, реализованы новые средства обеспе­чения безопасности. Увеличена точность при работе с числами с плава­ющей запятой до 12 цифр вместо 6. Подробно документирован интер­фейс взаимодействия с С. Полностью переписана библиотека Tk. Работа

с объектами управления стала более удобной, усовершенствована ра­бота с меню и шрифтами, добавлены новые команды работы с графи­ческими файлами и др. Наконец, приложения на Tcl/Tk могут сопро­вождаться логотипом Tel Powered (по лицензии Sun). Появилась, правда, небольшая несовместимость с программами, написанными на старых версиях Tel. Теперь даты, выраженные двумя цифрами года, трактуются как даты следующего столетия. Например, 17 г. означает не 1917 год, а 2017 год. В версии Tel 8.1 была реализована поддержка Unicode.

Учитывая, что язык Tcl/Tk одно время активно поддерживался компа­нией Sun, можно предсказать ему хорошее будущее. А история создания Tcl/Tk является классическим примером на тему «как стать знаме­нитым» . Хотите им стать? Разработайте свой скрипт-язык для исполь­зования в какой-нибудь быстро развивающейся области информаци­онных технологий, положите исходные тексты интерпретатора на свою страничку, напишите в конференцию по программированию, и ждите, когда вас пригласят в Sun или Microsoft.