recoder: (Default)
recoder ([personal profile] recoder) wrote2005-01-13 07:06 pm
Entry tags:

Читая "Perl6". Часть 1

cover
Читаю книжку "Perl 6 and Parrot Essentials" и не перестаю поражаться элегантности нового перла.

Сначала рассказано про принципы дизайна языка:

  • Principle of Simplicity - что простое решение лучше сложного
  • Huffman Coding - часто употребляемое должно занимать меньше места
  • Principle of Adaptability - если надо будет - Перл легко расширить!
  • Principle of Prominence - важные структуры должны сами бросаться в глаза
  • Principle of End Weight - простые и важные вещи должны быть в начале
  • Principle of Context - люди мыслят в контекстах, так пусть и Перл тоже использует контексты
  • Principle of DWIM - Do What I Mean, язык должен быть интуитивным (для людей с правильной интуицией)
  • Principle of Reuse - не надо плодить лишние сущности и правила, если можно использовать старые в новом контексте
  • Principle of Distinction - действительно разные вещи должны выглядеть разными
  • Principle of Freedom - свободу программисту в его самовыражении! (ну и TMTOWTDI)
  • Principle of Borrowing - хорошую фичу и из другого языка позаимствовать не грех

Ну приятно же когда умные люди заботливо пишут язык для других умных людей!

Ну в каком ещё языке бывают такие изящные конструкции:

my $pi is constant = 3.14159;

my @range = 3...; # бесконечный диапазон

my %hash is Hash of Array of Int; # при том, что это необязательно

Красивые гипер-операторы с "»" и "«", применяющие оператор поэлементно к спискам.

my @sum = @first »+« @second;
my @pay = @money »*« @rate;

Просто шикарный оператор switch given:

given $bugblatter {
    when Beast::Trall { close_eyes();     }
    when 'ravenous'   { toss( 'steak' );  }
    when .feeding     { sneak_past();     }
    when /grrr+/      { cover_ears();     }
    when 2            { run_between();    }
    when (3..10)      { run_away();       }
}

Такие вот занятные сравнения:

if( 24 < $age < 42 ) { ... }

if( $whale // $petunia ) { ... } # сравнение на OR по критерию definedness 

Мощнейшая концепция matching'a. Матчится почти всё почти ко всему:

$string ~~ "Ford" # сравнение строк

$number ~~ 42 # сравнение чисел

$string ~~ /towel/
$string ~~ s/weapon/towel/ # RegExp'ы

$name ~~ ( "Zaphod", "Ford", "Trillian" ) # поиск значения в списке
$name ~~ ( "Zaphod", 42, /petunias/ ) # или такой поиск по списку

( "Zaphod", "Ford", "Trillian" ) ~~ ( "Zaphod", "Ford", "Trillian" ) # сравнение списков

@array ~~ /illi/ # OR-match по всем элементам массива

$key ~~ %hash # проверка значения хэша по ключу

%vogons ~~ %humans # поиск пересечения по ключам хэшей

А как вам такие итераторы?

for %ages.kv -> $name, $age {
    print "$name is now $age";
}

for zip( @animals, @things, :by(2) ) -> $a1, $a2, $t1, $t2 {
    print "The animals, they came, they came in twosies, twosies: ";
    print "$a1 and $a2";
    print "Two things. And I call them, $t1 and $t2.";
}

for @useful_things -> $item {
    next when 'towel';
    redo when .try_again;
    last when 'bomb';
    print "Are you sure you need your $item?";
}

И это я ещё не дошёл до классов, свойств, особенностей (traits) и прочего богатства! Продолжаю читать...

Бородатый дядька Larry Wall - форева!

books
perl

[identity profile] corvalol.livejournal.com 2005-01-13 09:35 pm (UTC)(link)
Спасибо, очень интересно. Я про шестёрку пока ничего не знал.

[identity profile] valyakol.livejournal.com 2005-01-13 10:19 pm (UTC)(link)
Описание Перла 6 прям таки захватывает!
Где можно скачать дистрибутив ?

[identity profile] apelsin.livejournal.com 2005-01-14 04:20 am (UTC)(link)
Блин, а как я умудрился пропустить выход шестого Перла? %-////

Вот в чем польза ЖЖ. :)
Так бы и жил в неведении!

Спасибо. :)

[identity profile] larubin.livejournal.com 2005-01-14 09:22 am (UTC)(link)
Шо то я не впечатлился (с чего бы это? наверное с того, что нагородили огорода в и так не сильно понятный язык)

[identity profile] apelsin.livejournal.com 2005-01-16 11:40 am (UTC)(link)
Насчет непонятного - с этим я не согласен. :)

Главное - иметь правильную интуицию, как тут кто-то мощно завернул. :)

Вот лично я Перл обожаю за то, что я пишу всякую хрень - а он понимает и правильно делает! %))