От двоичного кодирования к системам автоматической генерации кода
Вид материала | Документы |
- План урока. Организационный момент. Изучение новой темы. Закрепление нового материала., 59.75kb.
- Майзаков Максим Александрович Разработка модулей автоматической генерации заданий, 799.4kb.
- Кафедра Вычислительной Техники Расчётно-пояснительная записка, 484.99kb.
- Генерация эффективного кода для процессорных архитектур с явным параллелизмом, 466.42kb.
- Вопросы к экзамену по дисциплине «Системное программное обеспечение» 4 курс (1 семестр), 17.38kb.
- 1. История языков высокого уровня, 299.15kb.
- Контрольные вопросы: Определение кода и способа помехоустойчивого кодирования (СПхК)., 40.69kb.
- Оптимизации генерации кода в jit-компиляторе виртуальной машины Java, 259.66kb.
- Перечень применяемых кодов, 180.07kb.
- Название проекта, 26.73kb.
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, написанная на Java — Jacl (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.