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

Jan 13, 2005 19:06




Читаю книжку "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 - форева!





perl, books

Previous post Next post
Up