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

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

Не все языки бесплатны, но причем здесь 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

Почти год длилась история с добавлением rakudo в дерево портов FreeBSD и закончилась она успешно.

В начале

Perl6 интересовал меня с момента прочтения книги "Perl6 и Parrot". Это было настолько давно, что я о нем успел забыть и вспомнил, когда услышал о проекте rakudo - реализации perl6 для виртуальной машины Parrot.

Тогда я сделал port для FreeBSD и рассказал о нем на конференции perl mova 2009. По результатам доклада появилась еще одна версия порта - с обновлением исходников из репозитариев rakudo и parrot.

Созданные порты я поместил в системе PR FreeBSD. Каждый порт, который предлагается для размещения в официальном дереве, рассматривается одним из существующих мантэйнеров. Мои предложения были перенаправлены на одобрение Сергею Скворцову. С его стороны никакой реакции не последовало ни в течении месяца, ни полугода. Мои письма оставались без ответа. Попытался пообщаться с Сергеем на IRC канале, но безрезультатно.

Регулярно, после выхода очередной версии rakudo, я размещал обновления для портов как в системе PR FreeBSD, так и на сайте созданного проекта rakudoport.sourceforge.net. С сайта rakudo.org есть ссылка на него.

Так продолжалось год, пока мои регулярные обновления не были замечены остальной командой мантэйнеров портов FreeBSD. И теперь последние версии parrot и rakudo доступны для всех желающих.

Установка Perl6

Чтобы установить последнюю версию perl6 достаточно:

cd /usr/ports/lang/rakudo make install

Вот результат, к которому я стремился.

Comments:2

Одна из особенностей формата Pod - его структура. На первый взгляд, есть некоторое внешнее сходство между документацией, написанной в формате Perl5 POD, и текстом в формате Perl6 Pod. Это потому, что различия лежат в основе синтаксической структуры обоих форматов.

Синтаксическая структура Pod

Основным элементом формата Pod (как и в perl5 POD) являются директивы, используемые для определения границ блоков Pod, описания конфигурационной информации (=config) и т.д. Каждая директива начинается с символа "равно" (=) в начале строки.

Примеры директив:

=config head2 :like<head1> :formatted<I> =begin pod =end pod

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

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

Все три формы соответственно представлены на рисунке.

Подробнее о каждой будет рассказано немного ниже.

Каждая из форм имеет свои границы. Все содержимое документа, находящееся вне блоков Pod, определяется спецификацией как "молчаливый" материал. Этим материалом зачастую является исходный код программ, для документирования которого предназначен Pod.

В perl5 POD блок документации начинается с первой встреченной директивы и закачивается директивой =cut. Например:

=head1 test head Some text =cut

Таким образом получается, что структура Perl5 POD состоит из одного типа блока с указанными правилами определения границ, где директива =cut является неотъемлемой частью и служит признаком завершения блока. После этой директивы, обработчик (parser) Perl5 POD переключается в "молчаливый" режим пока не встретит следующий символ = в начале строки.

Именно изменения в определении границ блоков документации и являются тем фундаментальным различием обоих форматов.

Новые 3 формы определения блока Pod стали эволюционным развитием Perlpod Pod от POD (Plain Old Documentation).

Comments:0

Недавно вышла очередная версия rakudo #23 ("Lisbon"). Rakudo - реализация perl6 на ассемблере для Parrot ( подробнее). От версии к версии увеличивается число успешно пройденных тестов на соответствие спецификациям языка Perl6. Спецификации называются "Synopsis" и собраны здесь: perlcabal.org/syn/. Новая версия успешно проходит 85,5% тестов.

Порт rakudo для FreeBSD

Для того, чтобы облегчить процесс установки perl6, мной был создан и поддерживается в актуальном состоянии порт rakudo для FreeBSD. Пока он дожидается внесения в официальное дерево портов (ports/130629), последние версии появляются на странице проекта rakudoport.

Установка perl6

Так как rakudo использует виртуальный процессор parrot, понадобится предварительно установить и его. Если в системе установлен parrot из портов, то его нужно удалить. Текущий порт устарел. Мантэйнер порта lang/parrot в курсе требуемых изменений (ports/140832).

Итак, чтобы можно было писать и запускать программы на perl6, достаточно выполнить несколько простых действий:

Скачать порты в один каталог
parrot-1.8.0.tgz и rakudo-200911.tgz
Распаковать и установить каждый
Это можно сделать следующими командами:
tar xzf parrot-1.8.0.tgz ( cd parrot && make install clean ) tar xzf rakudo-200911.tgz ( cd rakudo && make install clean )

Теперь можно запустить команду:

perl6 -e 'say "Hello, world "'

Или выполнить:

man perl6

Архитектура и версии

Проверял работу perl6 на 7.2-CURRENT и 7.0-PRERELEASE amd64. Сведений о других версиях у меня нет, но уверен, что проблем не возникнет. Последние полгода сборки проходят без ошибок.

Comments:0

В этом году конференция Google Developer Day (#gdd09ru) проходила в здании кинотеатра "Октябрь" на Новом Арбате. На афишах красовались сервисы от Google.

Общие темы

Открытие прошло в виде небольших презентаций основных технологий :

  • Google Wave
  • Google App Engine
  • Google Android
  • Google Web Toolkit

Помимо инженеров Google, на конференции выступали разработчики из Яндекс. В секции "Бизнес" после доклада посвященного AdWords, они рассказали о сервисе Яндекс.Директ.

Большинство докладов были ознакомительными. Но даже и они собирали полные залы. Например на вводном докладе "Разработка для мобильного веба" нельзя было даже пройти ( сидели на ступеньках).

Понравились доклады:

Скорость и пользователь
оптимизация web сайтов
Как заинтересовать посетителя
использование бесплатных сервисов для коммерческих целей

Некоторые факты

  • Novell ведет разработку сервиса с использованием технологии Google Wave
  • 65% мобильного веба просматривается из устройств Apple, 8% - Google Android
  • В вечернее время трафик с мобильных устройств преобладает над трафиком с персональных компьютеров
  • Video Sitemaps - определяет связь видеороликов с контентом сайта
  • Яндекс.Метрика - теперь доступен для всех желающих. Этот сервис аналогичен Google Analytics, но обладает средствами мониторинга ресурса с уведомлением владельца при аномалиях в трафике
  • Page Speed - инструмент оптимизации сайта

Материалы конференции

Организаторы объявили, что трансляции выступлений, проходивших в 1 и 2 залах, будут доступны для всех желающих. Некоторые презентации промелькнули в twitter'е мероприятия: @gddru

Немного фотографий с Google Developer Day.

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

Поиск

Авторизация