Logo

1 января 2015 г.

Отказ от ключевого слова elsif

Синтаксис Кантора вновь подвергся небольшому пересмотру: исключено ключевое слово elsif. Спасибо коллеге Zealint за наводку. На смену elsif приходит совмещение блоков, не требующее отдельного end. Это означает, что теперь вместо elsif нужно писать else case или else if, и ничего за это не будет.

Совмещение блоков

Совмещение блоков — синтаксический механизм в языке Кантор, позволяющий совмещать идущие друг за другом или вложенные блочные операторы с целью завершения их одним end.
В данный момент совмещение работает для блочных объявлений с of, блоков where all и where any, а теперь еще и для else case и else if.

Совмещение блоков of

// Без совмещения
public class ScreenInfo of
  final of
    var Core:Word Width, Height;
    var Core:ShortWord PixelsPerInch;
  end;
end;

// Совмещение
public class ScreenInfo final of
  var Core:Word Width, Height;
  var Core:ShortWord PixelsPerInch;
end;

Совмещение блочных условий where

Синтаксис контейнерной арифметики до конца не проработан, поэтому пример схематичен:
with
  lst = {'C', 'Cantor', 'Pascal'};
return group from lst inner where all // совмещение
  row.Length == 6;
  row.First == 'C';
end;
Идущие друг за другом операторы where all и where any совмещаются принудительно, поэтому примера без совмещения нет.

Оператор case

Объединенный оператор ветвления (следования), полученный в результате приведения if к case, теперь выглядит так:
case выражение
  when значение1 then
    ветвь;
  when значение2 then
    ветвь;
  when значение3 then
    ветвь;
else
  ветвь;
end;
При этом ветвь else совмещается, если в ней находится единственный case или if:
// Совмещение else case
case выражение1
  when значение1_1 then
    ветвь;
  when значение1_2 then
    ветвь;
  when значение1_3 then
    ветвь;
else case выражение2
  when значение2_1 then
    ветвь;
  when значение2_2 then
    ветвь;
  when значение2_3 then
    ветвь;
else
  ветвь;
end;

// Совмещение else if
case выражение1
  when значение1_1 then
    ветвь;
  when значение1_2 then
    ветвь;
  when значение1_3 then
    ветвь;
else if выражение2 then
  ветвь;
else
  ветвь;
end;
Поскольку ранее предполагалось, что записи с elsif в байт-коде должны быть неотличимы от вложенных ветвлений, совмещение лишь приближает текстовую запись к байт-коду, что улучшает воплощение концепции «Кантор — высокоуровневый ассемблер».

Оператор if

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

// Одиночный оператор
if условие then
  ветвь;
else
  ветвь;
end;

// Совмещение else case
if условие then
  ветвь;
else case выражение
  when значение1 then
    ветвь;
  when значение2 then
    ветвь;
  when значение3 then
    ветвь;
else
  ветвь;
end;

// Совмещение else if
if условие1 then
  ветвь;
else if условие2 then
  ветвь;
else
  ветвь;
end;
Еще в прошлой ревизии оператор if был признан синтаксическим сахаром case, поэтому предыдущий код может быть отекстован и так:
// Одиночный оператор
case условие 
  when True then
    ветвь;
else
  ветвь;
end;

// Совмещение else case
case условие 
  when True then
    ветвь;
else case выражение
  when значение1 then
    ветвь;
  when значение2 then
    ветвь;
  when значение3 then
    ветвь;
else
  ветвь;
end;

// Совмещение else if → else case
case условие1 
  when True then
    ветвь;
else case условие2 
  when True then
    ветвь;
else
  ветвь;
end;

Строчные case и if

Строчные case и if аналогичны блочным с той разницей, что на месте ветвей выполнения стоят одиночные выражения или кортежи.

2 комментария

  1. Когда планируете выпустить в свет язык?

    ОтветитьУдалить
    Ответы
    1. При наилучшем раскладе до рабочего прототипа еще год работы, так что не раньше.

      Удалить

Выбрав в выпадающем списке пункт «Имя/URL», можно оставить комментарий от своего имени без предварительной регистрации.