О каких возможностях вы можете придумать для переходов Perl 6?

Дополнительная информация из запись в Perl 6 Wikipedia

Junctions

Perl 6 вводит понятие переходов: значения, которые являются композитами других значений. [24] В ранние дни дизайна Perl 6 они назывались "суперпозициями", по аналогии с концепцией квантовой физики квантовых суперпозиций - формы волн, которые могут одновременно занимать несколько состояний, пока наблюдение "не разрушит" их. Модуль Perl 5, выпущенный в 2000 году Дамианом Конвей под названием Quantum:: Superpositions [25], предоставил первоначальное доказательство концепции. Хотя сначала такие суперпозиционные ценности казались просто программным любопытством, со временем их полезность и интуитивность стали широко узнаваемыми, а соединения теперь занимают центральное место в дизайне Perl 6.

В их простейшей форме соединения создаются путем объединения набора значений с юнктирующими операторами:

my $any_even_digit = 0|2|4|6|8; # any(0, 2, 4, 6, 8)
my $all_odd_digits = 1&3&5&7&9; # all(1, 3, 5, 7, 9)

| указывает значение, равное либо его левым, либо правым аргументам. и указывает значение, равное его левому и правому аргументам. Эти значения могут использоваться в любом коде, который будет использовать нормальное значение. Операции, выполняемые на стыке, действуют на всех членов соединения одинаково и объединяются в соответствии с юнктирующим оператором. Итак, ( "яблоко" | "банан" ) ~ "s" даст "яблоки" | "бананы". В сравнении, переходы возвращают единственный истинный или ложный результат для сравнения. "любые" соединения возвращаются true, если сравнение верно для любого из элементов соединения. "все" соединения возвращают true, если сравнение верно для всех элементов соединения.

Переходы также могут использоваться для более богатого расширения системы типов путем введения стиля общего программирования, которое ограничено переходами типов:

sub get_tint ( RGB_Color|CMYK_Color $color, num $opacity) { ... }
sub store_record (Record&Storable $rec) { ... }

Ответы

Ответ 1

Сколько дней в этом месяце?

given( $month ){
  when any(qw'1 3 5 7 8 10 12') {
    $day = 31
  }
  when any(qw'4 6 9 11') {
    $day = 30
  }
  when 2 {
    $day = 29
  }
}

Ответ 2

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

Ответ 3

Автообновление звучит круто, хотя я не знаю, каков его текущий статус.

for all(@files) -> $file {
    do_something($file);
}

Переходы не имеют порядка, поэтому виртуальная машина свободно порождает поток для каждого элемента в @files и обрабатывает их все параллельно.