Синтаксис Кантора вновь подвергся небольшому пересмотру: исключено ключевое слово
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 аналогичны блочным с той разницей, что на месте ветвей выполнения стоят одиночные выражения или кортежи.
Когда планируете выпустить в свет язык?
ОтветитьУдалитьПри наилучшем раскладе до рабочего прототипа еще год работы, так что не раньше.
Удалить