Для оператора unless не хватает битов
Необходимость в операторе unless с самого начала была под сомнением, и окончательное решение о его добавлении в язык решено было оставить на стадию разработки байт-кода: мол, логика команд всё решит. Так пока и получается.Байт-код Кантора представляет собой вариант синтаксического дерева (AST), узлы которого кодируются не командами виртуальной машины, а набором состояний. В байте 8 бит, тем самым можно закодировать восемь одновременных состояний, среди которых есть
Conditional
, Ordered
и Reversed
, а также Parameters
, совмещенный с Reversed
. Смысл состояний следующий: Parameters = ReversedИз примера видно, что набор битов для кодирования оператора case совпадает с набором битов для unless. Коллизия вполне ожидаемо разрешается исключением unless из возможного набора операторов.
{Conditional} // if
{Conditional, Parameters} // case, пересекается с {Conditional, Reversed}
{Conditional, Ordered} // while
{Conditional, Ordered, Reversed} // repeat
Поскольку разработка байт-кода еще продолжается, данное описание является предварительным.
Если unless это просто обратный if, то это просто синтаксический сахар. И можно просто компилировать его в байт-кода if'а.
ОтветитьУдалитьРабочая гипотеза на данный момент — не делать отдельного unless, а считать нормальной конструкцию if-else, без then.
Удалить