Автор: Piter J. Knaggs
Дата публикации: 1997
оригинал статьи взят c
http://www.rigwit.co.uk/papers/perl.html
Перевел:
Alexander при участии
mOleg
ПЕРЛ против ФОРТ
Питер Джей Кнаггс
Вычислительные и информационные системы,
Университет Пэйзли, Шотландия
Аннотация
PERL - язык сценариев, изначально разработанный для UNIX-систем, вобравший в себя ряд полезных утилит UNIX в гибкий интерпретируемый C-подобный язык. В последнее время PERL захватил мир UNIX и стал стандартным языком для Интернет-программирования (общий шлюзовой интерфейс или CGI).
В статье описаны некоторые из существенных преимуществ PERL и проведен анализ, какие уроки, возможно, может извлечь ФОРТ-сообщество от знакомства с этим языком программирования.
Краткий обзор
Для тех, кто едва знаком PERL (Practical Extraction and Report Language) – язык отчетов и извлечения данных; для тех, кому PERL отец родной - Pathologically Eclectic Rubbish Lister. А для минималистов PERL – бессмысленность в избыточности. (Wall, Christiansen, and Schwartz, 1996)
PERL был разработан Лари Волом как командный процессор для UNIX-систем. На протяжении нескольких лет Лари продолжал добавлять новые функциональности в PERL, по мере их необходимости. Начиная с четвертой версии, а сейчас уже пятая, язык программирования PERL превратился из утилиты по написанию сценариев в полноценный язык программирования, содержащий в себе множество утилит, которые так бесценны для UNIX-программистов (find, grep, sed, awk и т.д.).
Итак, какие же функциональные возможности PERL делают его очень полезным для программирования UNIX-систем и CGI в частности? Можно выделить пять:
Структуры данных
PERL предоставляет ряд весьма гибких и полезных структур данных. Первая структура – это списки. Весьма простые списки данных, доступ к которым производиться по индексу, как в простом массиве или кортеже. Однако также имеются операторы позволяющие рассматривать список как стек или очередь.
Вторая и возможно наиболее полезная структура – это хэш или ассоциативный массив. Это реляционная структура, где любой объект может быть использован как ключ к отношению, а также как значение, включая списки, другие хэш-объекты или простые данные. Это дает программисту возможность работы с реляционными базами данных.
Последняя структура ориентирована на поддержание изначальной роли PERL как языка отчетов. Эта структура, под названием форматирование (‘format’), позволяет программисту указать формат вывода данных, с привязкой определенных полей к переменным в программе. Для вывода данных в нужном формате используется команда WRITE. Система отслеживает число выведенных строк, страниц и т.д. Она даже позволяет использовать отдельный формат для заголовка страницы.
Объекты
Начиная с четвертой версии, появилась новая структура под названием пакет. Пакет был просто отдельной именованной областью весьма схожей с концепцией списка слов в ЯП ФОРТ. Но идея не была воспринята большинством пользователей и в пятой версии была реорганизована в полноценную объектную систему, дополненную определяющими интерфейсами, конструкторами, деструкторами и т.д. Одним словом в ООП.
Система предоставляет целую библиотеку предопределенных объектов. Объекты хранятся в виде исходных текстов и могут загружаться по требованию. Интересен факт, что огромное число библиотек предлагается сообществом использующим PERL. Все они хранятся на центральном FTP-архиве всеобъемлющей архивной сети PERL или говоря проще - на CPAN.
Регулярные выражения
Вероятно наиболее мощный аспект PERL – это манипуляции со строками. Первоначально они выполнялись через расширенный механизм регулярных выражений или систем поиска по шаблону. Регулярные выражения PERL основаны на стандартных регулярных выражениях UNIX, например, тех, что использует утилита grep, но расширяют систему в невероятно мощный анализатор строк.
Многие из поисковых машин в Интернете могут принимать в качестве строки поиска регулярное выражение на языке программирования PERL. Хотя следует отметить, что практика предоставления пользователю простого интерфейса запроса с его дальнейшей конвертацией в регулярное выражение PERL для внутренней обработки становится общей.
В JavaScript 1.2 был введен объект REGEX, а также объект STRING был расширен функциональностью для поддержки методов регулярных выражений. В частности вот что было введено:
a) Поиск соответствия
Попытка найти соответствие с помощью выражения m/(\d*)\w(\d*)\w(\d*)/ приведет к тому, что будут найдены все строки, содержащие по три числа разделенных одиночным пробелом. Скобки в выражении указывают на секции в регулярном выражении, которые необходимо запомнить. Секции будут скопированы в переменные под именами $1, $2, $3 соответственно.
b) Замена
Заменяет строку новым значением, отметим, что $-переменные доступны для значения на замену.
Например, выражение s"bold\(([^\)]*)\)"<B>$1</B>" заменит любое вхождение bold(text) на <B>text</B>.
c) Разбиение
Позволяет получить список или массив строк, входящих в строку-источник, разделяя последнюю в соответствии с регулярным выражением. Пример программы:
$str = "hello.this is:a test"
@list = split(/.|,|:/,$str)
Разобьет строку $str на "hello", "this is", и "a test". Разделение произойдет там, где встречается точка, запятая и двоеточие, как это и указано в регулярном выражении /.|,|:/. Переменная @list будет содержать три фрагмента в виде списка (массива, стека, очереди или кортежа, все зависит от того как вы с ней работаете).
Давая возможность для считывания одной строки, параграфа или целого файла в одну непрерывную строку и манипулирую ей, использую встроенные функции регулярных выражений, предоставляет очень быстрый и мощный механизм поиска/замены. Было доказано, что программа написанная на PERL, которая считывает весь файл в строку и выполняющая операцию поиска по шаблону - быстрее, чем использование эквивалентной UNIX-команды grep.
Взаимодействие с системойТак как PERL изначально задумывался как командный процессор, он имеет механизм взаимодействия с операционной системой:
• Команды могут быть выполнены, а их результат проанализирован. В случае если требуемая функциональность еще не включена в PERL, последний дает возможность вызвать внешнюю команду. Данные для команды, а также результат работы вызванной команды находится полностью под контролем программиста, таким образом программа может отвечать на сообщения от внешних программ.
• Прерывание или реакция на событие – оба могут быть перехвачены. Специальные обработчики могут быть использованы для стандартных реакций на события (прерывания) простым назначением функции в специализированный массив.
• Коммуникационный интерфейс легко доступен через стандартный механизм сокетов.
• Многозадачность управляется стандартными функциями UNIX, известных как fork, kill и pipe. Все они интегрированы в базовую часть языка.
В дополнение к этим встроенным возможностям PERL также предлагает возможность связывания хэша с файлом базы данных, используя стандартную СУБД, и предоставляя доступ к данным в базе данных посредством хэша. Вследствие этого появилась новая команда DELETE, которая позволяет программисту удалить запись в хэше и тем самым удалить данные в базе данных.
Контроль исходных текстов
Лари Вол сохранил абсолютный контроль над развитием языка программирования PERL. Другие изобретают новые возможности, которые Лари включает или не включает в следующую реализацию на свое усмотрение. Это означает, что существует хорошо известная стандартная база для разработки приложений/библиотек.
Версия системы PERL, на которой выполняется программа, доступна программисту. Появилась специальная команда, позволяющая программисту указать для какой версии был разработан модуль. Например, если модуль использует операторы добавленные в версии 5.1, - он может просто добавить команду requires 5.1 в начало программы. Если эта команда выполняется в PERL 5.1, она вернет истинное значение, иначе будет выдан отчет об ошибке, что требуется версия PERL 5.1 или выше.
Уроки для ФОРТ-сообщества
Из вышесказанного видно, что существует ряд уроков, через которые ФОРТ-сообщество могло бы извлечь полезную информацию у сообщества PERL, а также путем изучения этого языка программирования. Уроки можно разбить на два класса: основные и дополнительные.
Основные уроки
Два основных урока ФОРТ-сообщество может вынести для себя из опыта PERL. Они оба хорошо известны, однако, их обозначение (наличие, признание) идет очень медленно и нет единой позиции.
Контроль исходных текстов
Стандарт на ФОРТ ISO 15145 очень хороший шаг, однако, он не дает гарантии на существование того или иного слова в словаре. Просто невозможно дать кому-нибудь текст сложной программы с ожиданием того, что она сразу же начнет работать без какого-либо указания на то в какой среде исполнения она должна выполняться. Этот факт отталкивает многих, кто пытается решить эту проблему.
Необходимо иметь некоторое централизованное хранилище библиотек кода, которые бы могли работать на различных ФОРТ-платформах. Банк исходных текстов кода записанный в ISO-стандарт – это только начало. Подобный банк потребовал бы организации и документирования, тем самым делая поиск и использование необходимой библиотеки более простым.
Централизованное хранилище требует наличие «библиотекаря». «Библиотекарь» может проверить качество модулей и более тщательно проверить сопроводительную документацию и на основании результатов проверки принять или отклонить модуль. Приняв модуль «библиотекарь» его можно классифицировать. Все модули должны поставляться либо как бесплатные, либо как оценочные.
Объекты
Многие люди пытались добавить ООП в ФОРТ, каждый разрабатывал свои собственные расширения. Пришло время, чтобы стандартизовать эти расширения. ООП захватило мир примерно 12 лет назад, возможно, что настало время, когда ФОРТ будет переизобретен, для того чтобы интегрировать объекты в ядро системы, чем хранить их как надстройку.
Дополнительные уроки
Вот ряд дополнительных уроков, но прежде чем их предлагать требуется усвоение основных уроков. Наряду с основными уроками сообщество уже признает и эти, но не адресует их для решения вычислительному сообществом в целом (программистам, специалистам в области разработки ПО, компьютеров и ученым).
Гибкие структуры данных
Лари Вол выбрал две весьма полезных и очень гибких структур данных, называемые список и хэш. Они очень хорошо соотносятся с математическими определениями кортеж и отображение, и могут в следствие этого привести к простому и эффективному программированию.
Подобные структуры данных весьма просто реализовать при индивидуальном подходе. Вместо того чтобы каждый ФОРТ-программист разрабатывал свою версию объектов список и хэш, необходимо иметь некоторую общую библиотеку. Таким образом, потребуется только один или два программиста, которые будут сосредоточены на разработке этих объектов, а остальные члены сообщества будут просто использовать эти объекты.
Манипуляции со строками
Только получив по настоящему объектно-ориентированную ФОРТ-систему, будет возможно реализация типа «строка», который будет поддерживать нормальные функции: считывание строки, определение длины, подстрока, конкатенация, возврат символа в нужной позиции. Следуя примеру JavaScript/1.2, будет возможно расширить этот объект для подержания механизма регулярных выражений: соответствие, замена, разбиение. Это снабдить ФОРТ той же функциональстю, что и современные языки программирования.
Взаимодействие с системой
Путем введения ряда специальных объектов станет возможным для всех ФОРТ-систем предоставлять механизм доступа к базовой системе. Эти объекты должны будут быть определены тщательно для того чтобы посредством них обеспечить взаимодействие как с ОС большой системы (видимо мэйнфрейм), так и малой (видимо микроЭВМ). Дерево устройств указанное в системе с Boot Firmware (IEEE 1275-1994) – это образец того, как объектно-ориентированное мышление может предоставить такую возможность.
Заключение
Может ли ФОРТ-сообщество извлечь какие-либо уроки из современного развития и современных методов? Отметим, что многое ФОРТ-сообщество может извлечь, изучая современные методы развития. ФОРТ-сообщество насчитывает множество высокообразованных индивидуалистов, которые более чем способны понять эти рекомендации. К сожалению, половина из них слишком закопалась во внутренностях ФОРТ-систем, в то время, как другие полные индивидуалисты.
В 1983 ФОРТ был впереди своего времени (Rather, Colburn, and Moore 1993) и Forth Interest Group)рекламировавшая его, была на высоте. Оставшаяся часть мира программистов оценила его спустя пять лет. Сейчас прошли еще девять лет и весь мир ушел вперед, чего нельзя сказать о ФОРТ. В 1994 году появился ANS стандарт на ФОРТ, позднее ратифицированный как ISO-стандарт в 1997. Новый стандарт, не смотря на свою полезность, не способен развить язык - это может сделать только сообщество.
В 1994 году также появился стандарт IEEE Open Boot Firmware (IEEE 1275-1994), который, по крайней мере, чуть продвинул язык программирования. Если ФОРТ будет языком программирования будущего, то рано или поздно он все равно столкнется с современными системами, а также идеями программирования. Иначе, он просто будет еще одной интересной реликвией (артефактом).
Требуются, как бы, централизованные власти, которые будут проталкивать и развивать язык. FIG (Forth Interest Group – Группа интересующаяся ЯП ФОРТ) была скрыта за языком программирования многие годы, тем не менее слабые "подвижки" в развитии наблюдались.
Литература:
1. ANSI X3.215-1994 (1994, March). American National Standard for information systems: programming languages: Forth: ANSI/X3.215-1994. American National Standards Institute and Computer and Business Equipment Manufacturers Association. 1430 Broadway, New York, NY 10018, USA: American National Standards Institute. Approved March 24, 1994.
2. IEEE 1275-1994 (1994). IEEE Standard 1275-1994 - Standard for Boot (Initialization Configuration) Firmware: Core Requirements and Practices. IEEE. IEEE 1275 Technical Committee.
3. ISO 15145:1997 (1997, March). Information technology - Programming languages - Forth (First ed.). International Standards Organisation. ISO/IEC 15145:1997.
4. Rather, E. D., D. R. Colburn, and C. H. Moore (1993, March). The evolution of Forth. In ACM (Ed.), ACM SIGPLAN HOPL-II. 2nd ACM SIGPLAN History of Programming Languages Conference, Volume 28(3) of ACM SIG-PLAN Notices, New York, NY, USA, pp. 177-199. ACM Press.
5. Wall, L., T. Christiansen, and R. L. Schwartz (1996). Programming Perl (Second ed.). O'Reilly and Associates, Inc.