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

  Опросы
1001 и 1 книга  
12.02.2021г.
Просмотров: 8551
Комментарии: 2
Коротко о корпусе. Как выбрать системный блок под конкретные задачи

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

11.02.2021г.
Просмотров: 8889
Комментарии: 4
Василий Севостьянов: «Как безболезненно перейти с одного продукта на другой»

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

20.12.2019г.
Просмотров: 16065
Комментарии: 0
Dr.Web: всё под контролем

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

04.12.2019г.
Просмотров: 15156
Комментарии: 13
Особенности сертификаций по этичному хакингу

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

28.05.2019г.
Просмотров: 16275
Комментарии: 6
Анализ вредоносных программ

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

Друзья сайта  

Форум системных администраторов  

sysadmins.ru

 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