Rakudo – компилятор Perl 6 на виртуальной машине Parrot::Журнал СА 3.2008
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Наука и технологии
Подписка
Где купить
Авторам
Рекламодателям
Архив номеров
Контакты
   

  Опросы
  Статьи

Электронный документооборот  

5 способов повысить безопасность электронной подписи

Область применения технологий электронной подписи с каждым годом расширяется. Все больше задач

 Читать далее...

Рынок труда  

Системные администраторы по-прежнему востребованы и незаменимы

Системные администраторы, практически, есть везде. Порой их не видно и не слышно,

 Читать далее...

Учебные центры  

Карьерные мечты нужно воплощать! А мы поможем

Школа Bell Integrator открывает свои двери для всех, кто хочет освоить перспективную

 Читать далее...

Гость номера  

Дмитрий Галов: «Нельзя сказать, что люди становятся доверчивее, скорее эволюционирует ландшафт киберугроз»

Использование мобильных устройств растет. А вместе с ними быстро растет количество мобильных

 Читать далее...

Прошу слова  

Твердая рука в бархатной перчатке: принципы soft skills

Лауреат Нобелевской премии, специалист по рынку труда, профессор Лондонской школы экономики Кристофер

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 9942
Комментарии: 0
Потоковая обработка данных

 Читать далее...

19.03.2018г.
Просмотров: 8153
Комментарии: 0
Релевантный поиск с использованием Elasticsearch и Solr

 Читать далее...

19.03.2018г.
Просмотров: 8258
Комментарии: 0
Конкурентное программирование на SCALA

 Читать далее...

19.03.2018г.
Просмотров: 5226
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 5910
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

Друзья сайта  

 Rakudo – компилятор Perl 6 на виртуальной машине Parrot

Архив номеров / 2008 / Выпуск №3 (64) / Rakudo – компилятор Perl 6 на виртуальной машине Parrot

Рубрика: Администрирование /  Администрирование

Андрей Шитов

Rakudo – компилятор Perl 6 на виртуальной машине Parrot

Rakudo – новое название компилятора Perl 6, входящего в дистрибутив виртуальной машины Parrot. Официальный сайт проекта – www.rakudo.org. И компилятор, и название – свежее направление в развитии шестой версии языка: первая запись в блоге разработчиков на этом сайте появилась 17 января 2008 года.

Название предложил Дамиан Конвей, оно происходит от японского перевода фразы The Way Of The Camel: Rakudа-do. Сокращенный вариант Rakudo (который по-японски к тому же имеет смысл «рай») и стал названием нового проекта.

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

Установка

Сейчас Rakudo является частью дистрибутива виртуальной машины Parrot и находится в каталоге languages/perl6. В будущем разработчики планируют перенести код в отдельный каталог или даже в отдельный репозиторий. Для установки Rakudo нужно загрузить дистрибутив Parrot либо из SVN-репозитория (https://svn.perl.org/parrot/trunk), либо по ссылке – http://svn.perl.org/snapshots/parrot/parrot-latest.tar.gz, а затем выполнить стандартные команды:

perl Configure.pl

make

make install

Ожидается, что в системе уже установлен пакет ICU, International Components for Unicode, (с соответствующими библиотеками libicuuc.so и libicudata.so). Если их нет, об этом нужно сообщить конфигуратору:

perl Configure.pl –-without-icu

После этого будет получена виртуальная машина, но компилятор Perl 6 требуется собрать отдельно: нужно перейти в каталог languages/perl6 и выполнить там команду make:

cd languages/perl6/

make perl6

Это создаст файл perl6.pbc (расширение pbc обозначает Parrot Byte Code), который по сути и является компилятором Perl 6.

Запуск программ на Perl 6 выполняется либо явно через Parrot:

parrot perl6.pbc programme.pl

либо просто:

perl6 programme.pl

Если не указать имя программы, Rakudo перейдет в интерактивный режим.

Для установки Parrot под Windows намного проще скачать инсталлятор с сайта http://parrotwin32.sourceforge.net. В комплекте сразу идет программа perl6.exe.

Комплект Rakudo

Реализация языка Perl 6 в Rakudo основана на стандартной грамматике, описанной в файле STD.pm, находящемся в репозитории Pugs: http://svn.pugscode.org/pugs/src/perl6/STD.pm.

Разработчики стремятся максимально следовать спецификации, описанной в STD.pm, и уже охватили значительную ее часть, но в каждом случае выполнена только базовая реализация отдельного фрагмента.

В папке languages/perl6/t содержится небольшой набор тестов, и предполагается, что в идеале Rakudo должен проходить тесты на спецификацию языка, которые сейчас хранятся опять же в репозитории Pugs: http://svn.pugscode.org/pugs/t.

Тесты

С одной стороны, Rakudo появился через несколько лет после того, как был создан Pugs, с помощью которого удалось попробовать многие возможности Perl 6, с другой – Rakudo это новый проект, поэтому он проходит свой собственный цикл развития, и многие конструкции языка здесь еще не реализованы. В то же время, благодаря активной работе программистов, новые возможности появляются довольно быстро. Все описанные далее простые программы работают в реализации Rakudo, входящей в Parrot 0.6.0. На предупреждения и ошибки, которые могут возникнуть при выполнении примеров, пока не стоит обращать особого внимания.

Связывание переменных

В Perl 6 существует механизм, называемый binding, создающий ссылки на переменные. Синтаксис связывания – $link := $var. Например:

my $hour = 14;

my $summertime := $hour;

say $hour;

$summertime++;

say $hour;

Эта программа дважды выводит на печать переменную $hour, но при этом печатает разные значения, хотя явного изменения этой переменной в программе нет.

for

Оператор for реализован более или менее полно. Например, уже сейчас можно пользоваться привлекательной конструкцией «for @value -> $var». К сожалению, выбирать за один шаг более двух значений пока нельзя.

my @values = <

    registration

    lunch

    coffee-break

    closing

>;

my $c = 0;

for @values -> $event {

    $c++;

    say "$c. $event";

}

Классы, isa и WHAT

В Rakudo реализованы элементы ООП, в частности, присутствует примитивная поддержка синтаксиса классов и сопутствующие методы WHAT и isa.

Вот пример простого класса, который использует закрытую переменную $!Name. На закрытость указывает вторичный сигил (восклицательный знак).

class Language {

    has $!Name;

    method give_name ($newname) {

        $!Name = $newname;

    }

    method say_name {

        say "This is $!Name";

    }

}

my $lang = Language.new();

$lang.give_name('Perl 6');

$lang.say_name();

Попытка узнать имя класса через вызов метода WHAT на переменной $lang и на имени класса Language на данный момент возвращает разные результаты, в то время как в Pugs – одинаковые:

say $lang.WHAT;

# печатает 'Refs' в Rakudo и 'Language' в Pugs

say Language.WHAT;

# везде печатает 'Language'

Метод WHAT позволит узнать тип значения, которое сейчас хранится в переменной.

Например:

my $var = 'Perl 6';

say $var.WHAT;

$var = 6;

say $var.WHAT;

Первый вызов say $var.WHAT напечатает Str, второй – Int.

Стоит обратить внимание на то, что если переменной присваивается результат вызова функции, то значение, возвращаемое WHAT, может оказаться не тем, которое мог бы ожидать программист:

$var = callme;

say $var.WHAT;

sub callme {

say 'I am a sub';

}

Эта программа напечатает Int. Объяснение простое: значение именно этого типа возвращает оператор say:

say (say 2).WHAT;

Метод isa позволяет проверить тип переменной. Например:

say "OK" if 10.isa('Int');

my $var = 'string';

say "OK" if $var.isa('Str');.

say "True" if (?100).isa('Bool');

say "True" if (Bool::False).isa('Bool');

Мультифункции

Мультифункции – набор функций с одинаковым именем, которые различаются типом и (или) количеством принимаемых аргументов. В объявлении должно присутствовать ключевое слово multi. Rakudo умеет различать такие функции:

multi sub say_time ($hour) {

    say "$hour:00";

}

multi sub say_time ($hour, $minute) {

    say "$hour:$minute";

}

say_time(14);

say_time(14, 15);

Try

В Rakudo реализован механизм перехвата исключений:

say 'before';

try {

    die 'Bye!';

}

say 'after';

Программа выводит обе строки 'before' и 'after', а сообщение об ошибке (в данном случае строка 'Bye!') содержится в переменной $!. Интересно отметить, что конструкция «проверить, не было ли ошибки» принимает такой вид: if !$!.

Регулярные выражения

Rakudo поддерживает базовый набор для работы с регулярными выражениями. В частности, именованные регулярные выражения можно создавать с помощью ключевого слова regex. К таким объектам можно обратиться по имени, например, при вызове оператора сопоставления:

regex language {Perl|XML};

say "ok" if 'Perl' ~~ /<language>/;

say "not ok" unless 'PHP' ~~ /<language>/;

Остальные вопросы, связанные с реализацией компилятора Rakudo Perl 6, будут освещены в одном из докладов на конференции YAPC::Russia «May Perl 2008», которая состоится в Москве 17-18 мая.

Официальный сайт мероприятия – http://2008.perlrussia.ru.


Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-41
Fax: (499) 277-12-45
E-mail: sa@samag.ru