Рубрика «rakudo»

Помните ли вы статью про оператор последовательностей в Perl 6?

Последним аргументом он принимает ограничение, которое останавливает генерацию последовательности. К примеру

    1, 2, 4 ... 32;         # 1 2 4 8 16 32
    1, 2, 4 ... * > 10;     # 1 2 4 8 16

В первом случае используется числовое сравнение. Во втором запись * > 10 интерпретируется как замыкание -> $x { $x > 10 }.

Оператор последовательностей выполняет «волшебное» сравнение в зависимости от типа соответствия. Это сравнение называется «умным соответствием» («smartmatching»), и эта концепция появляется во многих местах Perl 6. Примеры:
Читать полностью »

Рассмотрим одну нечисловую последовательность, основанную на использовании цепей Маркова в тексте. Следующий символ последовательности будет случайным образом определяться на основе двух предыдущих. Распределение следует шаблону, содержащемуся в исходном тексте.

use v6;
use List::Utils;
 
my $model-text = $*IN.slurp.lc;
$model-text .=subst(/<[_']>/, "", :global);
$model-text .=subst(/<-alpha>+/, " ", :global);
 
my %next-step;
for sliding-window($model-text.comb, 3) -> $a, $b, $c {
    %next-step{$a ~ $b}{$c}++;
}
 
my $first = $model-text.substr(0, 1);
my $second = $model-text.substr(1, 1);
my @chain := $first, $second, -> $a, $b { %next-step{$a ~ $b}.roll.key } ... *;
say @chain.munch(80);

После инициализации в коде чётко видны три части.
Читать полностью »

Одна из проблем программирования – борьба с возрастающей сложностью программ при возрастании их объёма. Исторически она решается путём изолирования отдельных частей программ, взаимодействие которых друг с другом ограничено. Такой подход действует на всех уровнях программирования – «разделение концепций», «делай что-то одно и делай это хорошо», BCNF, монады, процедуры, классы, роли, модули. Все они поощряют ограничение частей программы, чтобы не играть против комбинаторики. Простейшим примером логического разделения является лексическая переменная.

{
    my $var;
    # $var доступна тут
}
# $var а тут недоступна

Что же в этом интересного?
Читать полностью »

Одна из новых идей Perl 6 – метаоператор. Это оператор, который можно скомбинировать с обычным оператором, изменив его поведение. Таких метаоператоров есть несколько штук, но в этой статье мы рассмотрим только X и Z.

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

> say ((1, 2) X ('a', 'b')).perl
((1, "a"), (1, "b"), (2, "a"), (2, "b"))

Однако, запись infix:<X> — это короткая запись метаоператора X, примененного к оператору конкатенации infix:<,> . И действительно, можно написать:

> say ((1, 2) X, (10, 11)).perl
((1, 10), (1, 11), (2, 10), (2, 11))

Что произойдёт, если мы применим Х к другому инфиксному оператору? Например, к infix:<+>
Читать полностью »

В Perl 6 введён новый оператор … для задания последовательностей. Вот, как это работает:

my @even-numbers  := 0, 2 ... *;    # арифметическая последовательность
my @odd-numbers   := 1, 3 ... *;
my @powers-of-two := 1, 2, 4 ... *; # геометрическая последовательность

Пример использования:

> my @powers-of-two := 1, 2, 4 ... *; 1;
1
> @powers-of-two[^10]
1 2 4 8 16 32 64 128 256 512

Читать полностью »

Директории

Вместо opendir и его друзей, в Perl 6 есть одна функция dir, которая возвращает список файлов из директории (по умолчанию, из текущей). Вместо тысячи слов:
Читать полностью »

Серия статей о Perl 6 и Rakudo – одном из компиляторов, поддерживающих спецификацию Perl6. Эта статья собрана из заметок от 2009 года.

Устанавливаем Rakudo

В данный момент существует несколько неполных реализаций Perl 6. Самая полная из них – это компилятор Rakudo (скачать).

Пользователи git могут создать свою копию при помощи следующих команд:

$ git clone git://github.com/rakudo/rakudo.git
$ cd rakudo
$ perl Configure.pl --gen-parrot --gen-moar --gen-nqp --backends=parrot,jvm,moar
$ make
$ make install

Как вариант, можно собрать его из исходников, скачав их с github.com/rakudo/rakudo/tree/nom

Для Windows есть готовый установщик бинарников. Версии установщика и исходный код доступны по ссылке
Читать полностью »

Темы выпуска:

Читать полностью »

1) 12-13 Мая, Киев, YAPC::Russia + Perl Mova

  • Более 200 зарегистрированных участников из 13 стран;
  • 19 докладов и 6 блиц-докладов;
  • Бесплатное участие (благодаря gateline.net );
  • Отчет Вячеслава ‘vti’ Тихановского;

2) 20 Мая — Вышел Perl 5.16
Читать полностью »