Технология программирования   Обзор графических пакетов Компьютерная графика Экономическая информатика   3GL   к 4GL

Введение в язык программирования Perl

В лекциях приводятся начальные сведения по новому языку программирования Perl. Данный язык получил широкое распространение в связи с развитием компьютерной сети Интернет. Все примеры в книге проверены для Perl версии 5.003 операционной системы Unix FreeBSD 2.1.0.

Perl - высокоуровневый интерпретируемый динамический язык программирования общего назначения, созданный Ларри Уоллом, лингвистом по образованию. Название языка представляет собой аббревиатуру, которая расшифровывается как Practical Extraction and Report Language - "практический язык для извлечения данных и составления отчётов".

Первоначально аббревиатура состояла из пяти символов и в таком виде в точности совпадала с английским словом pearl (<жемчужина>). Но затем стало известно, что такой язык существует (см. PEARL (англ.)), и букву "a" убрали. Талисманом языка Perl является верблюд - не слишком красивое, но очень выносливое животное, способное выполнять тяжёлую работу.

Основной особенностью языка считаются его богатые возможности для работы с текстом, в том числе работа с регулярными выражениями, встроенная в синтаксис. Перл унаследовал много свойств от языков Си, AWK, скриптовых языков командных оболочек UNIX.

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

Язык можно охарактеризовать скорее как практичный (лёгкость в использовании, эффективность, полнота), чем красивый (элегантность, минималистичность). Главными достоинствами языка являются поддержка различных парадигм (процедурный, объектно-ориентированный и функциональный стили программирования), контроль за памятью (без сборщика мусора, основанного на циклах), встроенная поддержка обработки текста, а также большая коллекция модулей сторонних разработчиков.

Согласно Ларри Уоллу, у Perl есть два девиза. Первый - "Есть больше одного способа это сделать" ("There's more than one way to do it"), известный также под аббревиатурой TMTOWTDI. Второй слоган - "Простые вещи должны оставаться простыми, а сложные - стать выполнимыми" ("Easy things should be easy and hard things should be possible").

Perl имеет огромную коллекцию дополнительных модулей CPAN, находящейся по адресу http://www.cpan.org.

Особенности языка

Общая структура Perl в общих чертах ведёт своё начало от языка Си. Perl - процедурный по своей природе, имеет переменные, выражения присваивания, блоки кода, отделяемые фигурными скобками, управляющие структуры и функции.

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

Perl заимствует массивы из Lisp, регулярные выражения из AWK и sed, из AWK также позаимствованы хеши ("ассоциативные массивы"). Регулярные выражения облегчают выполнение многих задач по парсингу, обработке текста и манипуляций с данными.

Perl 5 добавил поддержку сложных типов данных, первоклассных функций (замыкание как значение) и объектную модель. В последнюю входят ссылки, пакеты, выполнение методов от класса, переменные с лексическим объявлением области видимости, а также директивы компилятора (например, strict). Главнейшим усовершенствованием, представленным в Perl 5, стала возможность помещать код в "пакеты" (package) в качестве модулей для повторного использования. Ларри Уолл позже заметил, что "Весь замысел модульной системы Perl 5 сводился к поощрению роста культуры Perl, а не строчек кода".

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

Пользователи Microsoft Windows обычно используют дистрибутивы с уже скомпилированными бинарными файлами, такие, как ActivePerl или Strawberry Perl[en], так как компиляция Perl из исходных кодов в этой ОС - не самая тривиальная задача. Задачу может облегчить Cygwin.

История версий

Ларри Уолл начал разработку Perl в 1987 году, когда работал программистом в Unisys. Версия 1.0 была выпущена и анонсирована в новостной группе comp.sources.misc 18 декабря 1987 года, как "замена" для awk и sed.

Perl 2 был выпущен в 1988 году. Основным нововведением в нём был переработанный механизм регулярных выражений. Perl 3, выпущенный в 1989 году, получил возможность обрабатывать потоки двоичных данных.

Изначально, единственной документацией для Perl была единственная (огромной длины) man-страница. В 1991 году была выпущена книга "Programming Perl" (известная многим программистам как "Верблюжья книга" (Camel Book) из-за изображения на обложке), которая, де-факто, стала стандартом языка. В то же самое время, версия языка была "поднята" до 4 - не столько, чтобы указать на значительные изменения, сколько, чтобы обозначить, что эта версия языка документирована книгой.

Perl 4 прошёл через серию релизов, остановившись на Perl 4.036 в 1993 году. В этот момент Ларри Уолл забросил Perl 4 и начал работу над Perl 5. Разработка Perl 5 была начата в 1994 году. В то же время был создан список рассылки perl5-porters для координации работы над портированием Perl 5 на различные платформы. Он до сих пор остаётся основным форумом по разработке, обслуживанию и портированию Perl 5.

Perl 5.000 был выпущен 17 октября 1994 года. Он включал в себя полностью переписанный интерпретатор, а также много новых языковых возможностей, таких, как объекты, ссылки, локальные переменные (my $var_name) и модули. Особенно важной частью были модули, так как они предоставили механизм расширения языка без модифицирования интерпретатора. Это позволило стабилизировать интерпретатор, но при этом, дало возможность обычным Perl-программистам добавлять в язык новые возможности. Perl 5 находится в активной разработке по сей день.

Perl 5.001 был выпущен 13 марта 1995 года. Perl 5.002 увидел свет 29 февраля 1996 года с новой поддержкой прототипов. Это позволило авторам модулей создавать функции, которые вели себя так же, как и встроенные функции Perl. Версия Perl 5.003 появилась 25 июня 1996 года и устранила обнаружившиеся проблемы с безопасностью.

Одно из важнейших событий в истории Perl 5 случилось за пределами собственно языка и было следствием поддержки модулей. 26 октября 1995 года начала свою работу CPAN (Comprehensive Perl Archive Network - "всеобъемлющая сеть архивов Perl"), которая стала репозиторием модулей Perl, а также исходного кода самого языка. На данный момент сеть насчитывает более 25 000 модулей, созданных более чем 8000 программистами.

Perl 5.004 был выпущен 15 мая 1997 года и содержал, кроме всего прочего, пакет UNIVERSAL, который давал языку основной объект, от которого автоматически происходили все классы. Была также включена возможность запрашивать версию модулей. В дополнение к этому Perl стал поддерживать Microsoft Windows, а также ряд других операционных систем.

Perl 5.005 увидел свет 22 июня 1998 года. Этот релиз включал в себя несколько улучшений процессора регулярных выражений, новые перехваты в бэкенд с помощью модулей B::*, оператор кавычек qr// для регулярных выражений, большой выбор других новых модулей, а также поддержку ряда операционных систем, в частности, BeOS.

Perl 5.6 был выпущен 22 марта 2000 года. Главные изменения включали поддержку 64-битных систем, представление строк в стандарте Юникод, поддержку больших файлов (файлы больше 2 Гб) и ключевое слово "our". Во время разработки Perl 5.6 было принято решение изменить схему наименования версий на более близкую к другим проектам с открытым исходным кодом. За версией 5.005_63 следовала версия 5.5.640; согласно плану, версиям в разработке должны были присваиваться нечётные номера, стабильным версиям - чётные.

В 2000 году Ларри Уолл выступил с призывом к сообществу активно обсуждать предложения к следующей версии Perl. Результатом этого обсуждения стал 361 документ RFC (Request for Comments - "запрос комментариев"), которые были использованы в разработке Perl 6.

В 2001 году была начата работа над финальным документом, подводящим итог предложениям к созданию нового поколения Perl. Результат был представлен не в виде формального документа, а в качестве дайджеста всех RFC. К этому времени Perl 6 существовал исключительно в виде описания языка.

Perl 5.8 был впервые выпущен 18 июля 2002 года и с этого момента получал ежегодное обновление. Последняя версия Perl 5.8 - 5.8.9 увидела свет 14 декабря 2008 года. Perl 5.8 улучшал поддержку Юникода, добавлял новую реализацию ввода-вывода, добавлял поддержку многопоточности, увеличивал числовую точность и добавлял несколько новых модулей.

В 2004 году началась работа над Синопсисом (Synopsis) - первоначально задуманном как ряд документов, подводящих итоги финального документа, упоминавшегося выше. Однако постепенно этот ряд документов и стал спецификацией Perl 6. В феврале 2005 года Отриус Тан начала работу над Pugs[en] - интерпретатором Perl 6, написанном на Haskell. Это было первой настоящей попыткой воплотить Perl 6 в реальность. Эта попытка заглохла в 2006 году.

18 декабря 2007 года, в день 20-летней годовщины Perl 1.0, была выпущена версия Perl 5.10.0. Эта версия содержала в себе ряд заметных нововведений, приближающих её к Perl 6. Одними из таких нововведений стали новые операторы switch (названных "given"/"when"), обновление регулярных выражений, а также "умный" оператор совпадения "~~".

Примерно в это же время всерьёз началась разработка новой реализации Perl 6, известной как Rakudo Perl, разработанной в тандеме с виртуальной машиной Parrot. С ноября 2009 года Rakudo Perl регулярно обновляется каждый месяц и является на данный момент самой полной реализацией Perl 6.

Значительное изменение процесса разработки Perl 5 произошло после появления Perl 5.11. Сообщество разработчиков перешло на ежемесячный цикл релизов, с планированием даты релиза на три месяца вперёд.

12 апреля 2010 года Perl 5.12.0 был представлен публике. Выдающиеся нововведения включают в себя поддержку нового синтаксиса package NAME VERSION, оператор Yada Yada (служащего для маркировки кода-заполнителя, который ещё не реализован), полное решение Проблемы 2038 года (Y2038), перегрузку операторов регулярных выражений, поддержку DTrace (фреймворка динамической трассировки), а также полную поддержку стандарта Unicode 5.2.

7 сентября 2010 года был выпущен Perl 5.12.2, а 21 января 2011 - Perl 5.12.3. Эти релизы содержат обновление модулей, а также некоторые изменения в документации. Версия 5.12.4 выпущена 20 июня 2011. Последняя версия этой ветви, 5.12.5, выпущена 10 ноября 2012.

14 мая 2011 выпущен Perl 5.14. Поддержка JSON стала встроенной начиная с версии 5.14.2. Последняя версия этой ветви, 5.14.4, выпущена 10 марта 2013.

20 мая 2012 выпущен Perl 5.16. Значимой новой функцией является возможность указать нужную версию перла, которую надо эмулировать, позволяя пользвателям обновить perl, но сохранить работоспособность старых скриптов, которые иначе стали бы несовместимыми с новой версией. Ядро Perl 5.16 поддерживает Unicode 6.1.

18 мая 2013 выпущен Perl 5.18. Значимые нововведения включают новые хуки dtrace, лексические функции, увеличение числа включенных в ядро функций, пересмотр реализации хешей из соображений безопасности, поддержка Unicode 6.2.

Выпуск версии 5.20 ожидается 20 мая 2014.

Некоторые наблюдатели приписывают выходу Perl 5.10 запуск движения Modern Perl. В частности, эта фраза описывает стиль разработки, подразумевающий использование CPAN, использование преимуществ последних разработок на языке, а также требовательность к высокому качеству кода.

В конце 2012 и в 2013 запущены несколько проектов по альтернативной реализации Perl 5: Perl5 in Perl6 (Rakudo Perl team), moe (Стивен Литл с друзьями), p2 (Perl11 team under Reini Urban), а также gperl (goccy).

С 2000 года идёт разработка новой (6-й) версии языка. В отличие от предыдущих версий, разработчики планируют создать чётко определённый стандарт языка. В настоящее время существуют экспериментальные компиляторы Perl 6, но продолжается дальнейшая дискуссия о новых правилах. На русском языке информация о новой версии языка доступна на сайте http://perl6.ru

c Маслов Владимир Викторович.

Технология программирования   Обзор графических пакетов Компьютерная графика Экономическая информатика   3GL   к 4GL

Знаете ли Вы, что такое мысленный эксперимент, gedanken experiment?
Это несуществующая практика, потусторонний опыт, воображение того, чего нет на самом деле. Мысленные эксперименты подобны снам наяву. Они рождают чудовищ. В отличие от физического эксперимента, который является опытной проверкой гипотез, "мысленный эксперимент" фокуснически подменяет экспериментальную проверку желаемыми, не проверенными на практике выводами, манипулируя логикообразными построениями, реально нарушающими саму логику путем использования недоказанных посылок в качестве доказанных, то есть путем подмены. Таким образом, основной задачей заявителей "мысленных экспериментов" является обман слушателя или читателя путем замены настоящего физического эксперимента его "куклой" - фиктивными рассуждениями под честное слово без самой физической проверки.
Заполнение физики воображаемыми, "мысленными экспериментами" привело к возникновению абсурдной сюрреалистической, спутанно-запутанной картины мира. Настоящий исследователь должен отличать такие "фантики" от настоящих ценностей.

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

Это мы видим на примере СТО и ОТО, превратившихся в своеобразный вид религии, управляющей наукой и общественным мнением. Никакое количество фактов, противоречащих им, не может преодолеть формулу Эйнштейна: "Если факт не соответствует теории - измените факт" (В другом варианте " - Факт не соответствует теории? - Тем хуже для факта").

Максимально, на что может претендовать "мысленный эксперимент" - это только на внутреннюю непротиворечивость гипотезы в рамках собственной, часто отнюдь не истинной логики заявителя. Соответсвие практике это не проверяет. Настоящая проверка может состояться только в действительном физическом эксперименте.

Эксперимент на то и эксперимент, что он есть не изощрение мысли, а проверка мысли. Непротиворечивая внутри себя мысль не может сама себя проверить. Это доказано Куртом Гёделем.

Понятие "мысленный эксперимент" придумано специально спекулянтами - релятивистами для шулерской подмены реальной проверки мысли на практике (эксперимента) своим "честным словом". Подробнее читайте в FAQ по эфирной физике.

{DATA}
Bourabai Research Institution home page

Bourabai Research - Технологии XXI века Bourabai Research Institution