Perl6 и сообщество вокруг него характеризуется открытостью и свободой. Но как влияют эти свойства на развитие живых организмов ?

Я знаю одно: ограничения в свободе драматически сказываются на развитии популяции отдельно взятого вида. Будь-то географическое уменьшение среды обитания, а также заключение в неволю.

Языки программирования являются в своем роде тоже средой обитания отдельных видов - программистов. И конечно каждый из языков обладает той или иной степенью свободы. Будь-то жесткая типизация, необходимость в управлении памятью, требования в грамматике языка.

Чтобы проследить эту связь, давайте возьмем создателей языков программирования и попробуем оценить это влияние. Данные взяты из открытых источников, в основном из вики.

Языки программирования
имя языкаавторколичество детей
perl4
ruby4
python1
php1
java-
c++-

Предположение о влиянии языка разработки на личную жизнь подтверждается. Так в языках с жесткой типизацией наихудшая ситуация. В динамических языках программирования, где разработчик избавлен от необходимости управлять выделением памяти и с типизацией ситуация более "демократична" наблюдаются жизнеутверждающие показатели. Хотя, судя по языку python, требования к грамматике исходных текстов являются также неблагоприятным фактором. Данные по языку php можно отнести к статистической погрешности.

Наиболее счастливы разработчики выбравшие perl5 и ruby. В отношении perl5 я отмечу, что свобода в выборе алгоритмической реализации задачи положена в основу философии разработки на perl5.

Готовящийся к выходу perl6 предоставляет еще один уровень свобод. Помимо того, что он является наследником идей perl5, он также не ограничивает разработчика в выборе компилятора perl6. На сегодня я знаю 3 реализации: pugs, yapsii и rakudo. Вы можете создать собственный компилятор. В этом многообразии компиляторов заключена еще одна жизнеутверждающая идея - эволюция и естественный отбор форм реализации.

Однако это еще не все. В основе наиболее развитой на сегодня реализации perl6 - Rakudo, находится виртуальная машина Parrot. Она позволяет создавать компиляторы для других языков: как существующих, так и новых !

Таким образом можно утверждать, что выход perl6 окажет влияние на "биоценоз" в среде разработчиков, приведет к росту рождаемости, а так же - способствует многообразию форм жизни !

Comments:0

Все блоки, имена которых состоят только из заглавных букв, зарегистрированы для стандартной документации, издательства и документирования программного кода. Так например, все стандартные компоненты документации по Perl или используемые в man страницах имеют зарезервированные аналоги имен в верхнем регистре.

Стандартные семантические блоки:

=NAME =VERSION =SYNOPSIS =DESCRIPTION =USAGE =INTERFACE =METHOD =SUBROUTINE =OPTION =DIAGNOSTIC =ERROR =WARNING =DEPENDENCY =BUG =SEEALSO =ACKNOWLEDGEMENT =AUTHOR =COPYRIGHT =DISCLAIMER =LICENCE =LICENSE =TITLE =SECTION =CHAPTER =APPENDIX =TOC =INDEX =FOREWORD =SUMMARY

Для указанных имен зарегистрированы соответствующие имена во множественном числе.

В модели документа данные блоки представлены заголовками первого уровня.

Comments:0

Наиболее значимой особенностью формата Pod является его расширяемость. Хотите добавить поддержку изображений, формирование диаграмм или определить свой код форматирования? В диалекте Pod предусмотрена такая возможность.

Загружаемые модули

Механизм, с помощью которого можно расширить синтаксис, семантику а так же содержимое документации, реализуется посредством директивы =use.

Данная директива дает указание Perldoc парсеру загрузить соответствующий модуль в указанное место. В случае неуспеха произойдет исключительная ситуация с сообщением об ошибке.

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

Директива =use может использована как с указанием имени модуля, так и с указанием URI:

=use MODULE_NAME OPTIONAL CONFIG DATA = OPTIONAL EXTRA CONFIG DATA =use URI

В случае использования URI указанный адрес интерпретируется как источник Pod документации для включения в документ в месте использования директивы.

Примеры использования директивы =use:

=use Perldoc::Plugin::Image :Jpeg prefix=>'http://dev.perl.org' =use file:/full/path/spec/Pod/Insertion/Name.pod =use http://www.website.com/Pod/Insertion/Name.pod

Для явного указания на документацию вместо программного модуля, используется префикс pod::

=use pod:Some::Other::Module

Для загрузки модуля - perl6::

=use perl6:New::Perldoc::Subclass

Именованные блоки

Блоки документации, имена которых не определены как встроенные в Pod, предназначаются для специальной обработки при экспорте в определенный формат или загружаемыми плагинами. Пример использования именованного блока:

=begin Xhtml <object type="video/quicktime" data="onion.mov"> =end Xhtml

или

=Image http://www.perlfoundation.org/images/perl_logo_32x104.png

Загрузка модулей для обработки производится с помощью директивы =use. Если не определен модуль для обработки такого блока он игнорируется. Имена всех блоков, состоящие исключительно из заглавных или строчных букв зарезервированы.

Определенные пользователем коды форматирования

Для расширения функционала кодов форматирования используется код M. Формат данного кода подразумевает указание имени блока и данных.

Пример:

=use Perldoc::TT =head1 Overview of the M<TT: $CLASSNAME > class (version M<TT: $VERSION>) M<TT: get_description($CLASSNAME) >

Код форматирования M является строковой формой именованных блоков. Если не определен обработчик (не загружен с помощью =use), данные после двоеточия интерпретируются как обычный текст.

Comments:0

В майском релизе rakudo объявлено о выходе в следующем месяце версии "Rakudo *" (Rakudo Star). Версии, которая знаменует достижение стабильного состояния в спецификациях (synopses) и реализации perl6. Она характеризуется как: "useful and usable release of Perl 6". Это еще не первая официальная версия perl6, которая выйдет "под Рождество" ( год не определен ), но пригодная к разработке на ней программ.

Начав создание программ на perl6, каждый из разработчиков оказывает влияние на развитие языка: появляются сообщества, новые интересные проекты и, как следствие, возникает обратная связь в виде bug report's, предложений по улучшению языка.

Perl6 - открытый язык и за ним не стоит какая-то Мегакорпорация или группа людей, преследующая сомнительные интересы. Он открыт для сообщества и каждого.

Получить в свое распоряжение язык и технологии, открытые для улучшений, а следовательно всегда современные - разве не в этом счастье разработчика ?

Разрабатывать на perl6 можно уже сейчас - он доступен для многих платформ. Для FreeBSD его можно установить одной командой:

pkg_add -r rakudo

Помимо самого порта perl6 (lang/rakudo) для FreeBSD, я подготовил еще порт devel/p6-perl6-toys. Он завис в PRs с августа прошлого года (необычно видеть приставку p6- в имени порта ?) и на сегодня устарел. Этот порт включал в себя wiki движок november и шаблонизатор html-template. Предназначение порта - предоставить примеры работающего кода на perl6. На сегодня этот код неработоспособен и причина в кардинальных изменениях в январском выпуске rakudo. На изображении статуса тестирования виден провал в конце января.

Поэтому не работают большинство проектов, указанных на странице proto.perl6.org. В основном те, изменений в которых не было последние 3 месяца.

Автор November и html-template, Карл Мэсак, работает над их восстановлением, и, судя по генерируемому им списку багов, завершит еще не скоро.

По этой причине, я связался с авторами книги perl6 book и получил на прошлой неделе согласие на перевод книги. Помимо переводных статей, есть идея использовать в книге авторские статьи о perl6. Материалы будут публиковаться под лицензией CC-by-nc-sa (attribution, noncommercial, share-alike) по адресу zag.ru/perl6-book/.

Карл Мэсак участвовал на конференции DevConf, проходившей на днях в Москве, и на сайте perl6.ru опубликовано интервью с ним. Рекомендую к прочтению !

Comments:0

Учение оставило глубокий след в судьбах и умах народов, а также оказало влияние на геополитическую карту планеты. Коммунизм определяет форму устройства общества, где средства производства принадлежат рабочим. Наиболее яркими последователями являются Карл Маркс (марксизм), В.И. Ленин. Сам процесс построения коммунизма Карл Маркс видел не иначе как с помощью революции, что собственно Ленин и выполнил.

Ключевая идея: средства производства - рабочим. Для программиста таким средством является язык программирования. Если предположить что бесплатные языки и инструменты разработки - форма коллективной собственности, то коммунизм в интернете кое-где уже наступил.

Не все языки бесплатны, но причем здесь perl6 ? Да - он бесплатен, но не бросать же любимый язык? Чем лучше язык разработки - тем выше уровень счастья разработчика и, как следствие, качество продукта.

Я не утверждаю, что perl6 является лучшим языком, но за ним стоят технологии, которые позволят со временем утверждать, что основные средства разработки принадлежат "пролетариату".

Я имею ввиду Parrot, позволяющий объединить различные языки программирования в одну среду выполнения. Тем самым бесплатно предоставить разработчику возможность использовать библиотеки других языков, в том числе и проприетарных. Perl6 является демонстрацией работоспособности технологии Parrot.

Поэтому я утверждаю, что perl6 и коммунизм находятся в тесной связи! За доказательством этого утверждения далеко ходить не нужно: последний релиз rakudo вышел под именем Moscow.pm в 140-ой день рождения В.И. Ленина - 22 апреля ! И это еще не все: номер версии #28 умноженный на 5 ( количество лучей в звезде) даст 140 !

Поздравляю вас, товарищи !

Comments:2

В двух типах блоках документации Pod используются конфигурационные параметры. Это - разграниченные блоки( Delimited blocks ) и блоки-параграфы ( Paragraph blocks ).

Спецификация диалекта Pod выделяет несколько стандартных конфигурационных параметров и описывает их значение. В результате моей переписки с автором спецификации, Домианом Конвей (Damian Conway), возник повод для пересмотра некоторых из них ( :nested, :allow). Приведенные ниже (и далее) материалы описывают реализацию одобренных предложений.

Стандартные конфигурационные параметры

Pod резервирует несколько стандартных параметров для использования во встроенных типах блоков. Список этих параметров следующий:

:numbered
Данный параметр указывает, что блок является нумерованным. Это свойство используется в заголовках (=head1, =head2) и списках (=item), но может быть указано для любого блока.

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

Например:

Ягоды: =for item :numbered Клубника =for item :numbered Земляника =for item :numbered Черника

Будет выглядеть как :

Ягоды:

  1. Клубника
  2. Земляника
  3. Черника

Примененное к заголовкам это свойство добавляет номер уровня.

:term
Это свойство указывает на то , что данный список - список определений. Поэтому это свойство устонавливается для блоков =item.
:formatted
Данный параметр дает указание интерпретировать содержимое блока, так словно оно обрамлено кодами форматирования.

Например вместо:

=begin para B<I< Warning: Do not immerse in water. Do not expose to bright light. Do not feed after midnight. >> =end para

можно использовать:

=begin para :formatted<B I> Warning: Do not immerse in water. Do not expose to bright light. Do not feed after midnight. =end para

Данные формы во внутреннем представлении почти эквивалентны. Единственное различие: во втором случае свойство :formatted остается в атрибутах объекта блока.

Коды форматирования, указанные в свойстве :formatted, дополняют уже примененные к блоку.

:like
Замечательное свойство :like помогает навести порядок в параметрах блоков. Она указывает имена блоков, чьи свойства применить к текущему, тем самым снижая дублирование. Вполне подобное поведение можно назвать наследованием.

Параметр :like может быть применен к любому блоку, а также к директиве =config.

Пример:

=config head1 :numbered =config head2 :like<head1> :formatted<I>

В этом примере, благодаря :like, блоки заголовков второго уровня =head2 становятся нумерованными.

:allow
Данное свойство разрешает использование внутри блока только указанные коды форматирования (оригинальная спецификация ограничивала применение этого кода блоками =code ).

Comments:0

Основной структурной единицей нового диалекта Pod является блок документации. Он может быть представлен в виде 3 равнозначных форм:

  • Разграниченные блоки / Delimited blocks
  • Блоки-параграфы / Paragraph blocks
  • Сокращенные блоки / Abbreviated blocks

Ожидается введение еще одного типа блоков, который встроен в комментарии:

 my $declared_thing;   #= Pod here until end of line
 sub declared_thing () {   #=[ Pod here
                              until matching
                               closing bracket
                             ]
         ...
  }

С новыми дополнениями можно ознакомится в рассылке, посвященной Perl6, по адресу: S26 - The Next Generation.

Разграниченные блоки / Delimited blocks

Разграниченные блоки имеют явно определенные границы. Для этого используются директивы =begin и =end, за каждой из которых следует имя типа блока (typename). Имена состоят из букв, цифр и символов подчеркивания, а начинаются с буквы или знака подчеркивания. Имена, состоящие целиком из символов нижнего (=begin head1) и верхнего =begin SYNOPSIS регистра, зарезервированы.

В строке с директивой =begin после имени блока следует конфигурация данного блока. Среди особенностей нового диалекта Pod - эта одна из самых замечательных. Конфигурация блока может использоваться в различных целях, в том числе и при создании расширений для Pod.

Конфигурационные параметры блока представлены в виде парной нотации в стиле Perl6 ( SYNOPSIS 02 ).

Парная нотация конфигурации блоков Pod
значениеформат определениятакже...также ..(*)
Boolean(true):key:key(1)key=>1
Boolean(false):!key:key(0)key=>0
String:key<str>:key('str')key=>'str'
List:key<1 2 3>:key[1,2,3 ]key=>[1,2,3]
Hash:key{a=>1, b=>2}-key=>{a=>1, b=>2}

(*) - последняя форма не поддерживается в реализации Perl6::Pod.

Если параметры блока не помещаются в одну строку, конфигурационный блок можно продолжить со следующей. В этом случае в начале строки ставиться символ = и пробел, далее конфигурационные параметры продолжаются.

Между директивами =begin и =end располагается содержимое блока. Сроки внутри блока могут содержать отступы, но они интерпретируются как блоки кода только в блоках =pod, =item =code и семантических блоках (например: =METHOD). То есть содержимое блока =para может отстоять от начала строки и не интерпретироваться при этом как код ( verbitim paragraph в Perl5 POD).

Синтаксис блока выглядит следующим образом:

=begin BLOCK_TYPE OPTIONAL CONFIG INFO = OPTIONAL EXTRA CONFIG INFO BLOCK CONTENTS =end BLOCK_TYPE

Например:

=begin table :caption<Table of Contents> Constants 1 Variables 10 Subroutines 33 Everything else 57 =end table
=begin Name :required = :width(50) The applicant's full name =end Name
=begin Contact :optional The applicant's contact details =end Contact

Пустые строки между директивами, как это было в Perl5 POD не нужны; если они есть - то интерпретируются как часть содержимого блока. Кстати "пустыми" в Pod считаются также строки, содержащие только пробелы!

Блоки-параграфы / Paragraph blocks

Блоки параграфы начинаются с директивы =for и завершаются следующий директивой или пустой строкой ( она не считается частью блока ). После директивы =for следует имя блока и необязательные конфигурационные параметры.

Синтаксис этого типа блоков следующий:

=for BLOCK_TYPE OPTIONAL CONFIG INFO = OPTIONAL EXTRA CONFIG INFO BLOCK DATA

Примеры:

=for table :caption<Table of Contents> Constants 1 Variables 10 Subroutines 33 Everything else 57
=for Name :required = :width(50) The applicant's full name
=for Contact :optional The applicant's contact details

Сокращенные блоки / Abbreviated blocks

Сокращенные блоки начинаются с символа = за которым неразрывно следует имя блока. Продолжение строки интерпретируется как содержимое блока. Конфигурационных параметров в этой форме блока нет. Блок заканчивается перед следующей директивой Pod или пустой строкой ( которая не ситается частью данных блока).

Синтаксис блока следующий:

=BLOCK_TYPE BLOCK DATA MORE BLOCK DATA

Пример:

=table Constants 1 Variables 10 Subroutines 33 Everything else 57
=Name The applicant's full name =Contact The applicant's contact details

Этот тип блока подходит для случаев, когда можно обойтись без конфигурирования блока. Иначе придется воспользоваться =for или =begin/=end директивами.

Равнозначность стилевых блоков

Описанные выше типы блоков одинаково представлены во внутренней структуре документа. То есть если имя типа блока - параграф (=para), то он остается параграфом независимо от формы его описания.

Практически это означает, что приведенные ниже блоки:

=begin para Text =end para
=for para text
=para text

при конвертации в html будут преобразованы в один и тот же текст:

<p>text</p>

Если тип блока таблица, то она останется ею в любом случае.

Comments:0

Итак rakudo теперь в структуре портов FreeBSD. Это кардинально сказалось на процессе установки.

Установка Perl6 в один шаг

Теперь достаточно одной команды:

pkg_add -r rakudo

Perl6 установлен !

Так же можно произвести сборку из исходных текстов:

cd /usr/ports/lang/rakudo make install clean

Ограничения по дистрибутивам

Каждый порт собирается на разных ветках FreeBSD прежде, чем попасть в хранилище портов. Для вышедшей пару дней назад версии rakudo ("Amsterdam") таблица доступных дистрибутивов выглядит следующим образом:

Сборка rakudo
branchamd64i386
9-currentpassgcc
8-stablegccpass
7-stablepasspass
6-stableicuicu

где:

gcc - "cc1: internal compiler error: Segmentation fault: 11" icu - dependency devel/icu is broken on 6.x pass - успешно

Как видно из таблицы - не все идеально, но зато предыдущая версия "Minneapolis" на 8-x вообще не работала.

Дальнейшая поддержка perl6 в FreeBSD

Меня пригласили в команду мантэйнеров perl@ и предложили дальше поддерживать lang/parrot и lang/rakudо (perl6 related). Здесь, как и везде, есть испытательный срок со своими условиями.

Написал письмо с новостью в проект rakudo, так же сообщил, что страницу проекта rakudoport планирую продолжать поддерживать.

На сегодня в FreeBSD наилучшая поддержка perl6! Для установки доступны самые последние версии parrot и rakudo, а обновления выходят с задержкой в пару дней после официального релиза!

Comments:0

<<Раньше - Позже