Logo

15 мая 2014 г.

Будет ли unless?

Разработка байт-кода несколько продвинулась, и теперь можно дать ответ на вопрос, будет ли в Канторе оператор unless — обратный if, в котором ветка then исполняется при ложности условия. Похожий оператор есть в языке Руби.

Для оператора unless не хватает битов

Необходимость в операторе unless с самого начала была под сомнением, и окончательное решение о его добавлении в язык решено было оставить на стадию разработки байт-кода: мол, логика команд всё решит. Так пока и получается.

Байт-код Кантора представляет собой вариант синтаксического дерева (AST), узлы которого кодируются не командами виртуальной машины, а набором состояний. В байте 8 бит, тем самым можно закодировать восемь одновременных состояний, среди которых есть Conditional, Ordered и Reversed, а также Parameters, совмещенный с Reversed. Смысл состояний следующий:
Parameters = Reversed

{Conditional}             // if
{Conditional, Parameters} // case, пересекается с {Conditional, Reversed}

{Conditional, Ordered}           // while
{Conditional, Ordered, Reversed} // repeat
Из примера видно, что набор битов для кодирования оператора case совпадает с набором битов для unless. Коллизия вполне ожидаемо разрешается исключением unless из возможного набора операторов.

Поскольку разработка байт-кода еще продолжается, данное описание является предварительным.

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

  1. Если unless это просто обратный if, то это просто синтаксический сахар. И можно просто компилировать его в байт-кода if'а.

    ОтветитьУдалить
    Ответы
    1. Рабочая гипотеза на данный момент — не делать отдельного unless, а считать нормальной конструкцию if-else, без then.

      Удалить

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