Тривиль — вопросы и уточнения

1) Оператор return — как он должен называться в русскоязычном языке?

  • вернуть? — не очень хорошо, если результата нет (процедура, а не функция)
  • возврат?
  • другое?

2) Преобразование типа и динамическая проверка типа

Я не хочу делать две разных конструкции, как это сделано в Go, где есть

  • конверсия (conversion): int64(x),
  • и динамическая проверка типа (type assertion): x.(T).

Если один синтаксис, то надо сделать возможным использовать эту обобщенную конверсию на уровне PrimaryExpr или, как это называлось в Модуле/Обероне — designator. Я перебрал множество вариантов и остановился на вот таких скобках: ‹ › (U+2039, U+203A), то есть

  • х‹цел64› — конверсия
  • х‹Узел› — динамическая проверка типа, а по сути конверсия к типу Узел

Тогда эти скобки останутся для обобщенных типов: « ».

3) Null safety

Я решил, что надо делать с самого начала, так как если добавлять потом, придется исправлять уже написанный текст .

Долго маялся способом записи и тем, как лучше читается:

  • сначала тип, потом признак nullable — как в Kotlin/Swift: T? (постфиксная запись)
  • или наоборот, сначала признак, потом тип (префиксная запись).

Это существенно для составных типов, например, для массивов, если использовать постфиксную запись: []цел64? — к чему относится признак — к массиву или к элементу массива?

Решил, что префиксная лучше читается и придумал такую запись:

  • мб Тип — где мб сокращение от «может быть».

Тогда для массивов:

  • мб []Узел — массив может быть не задан (равен null в тех терминах), а элемент не может
  • []мб Узел — массив всегда задан, а элемент может быть не задан.
  • мб []мб Узел  — и массив и элемент могут быть не заданы.

Вроде неплохо, а дальше практика покажет.

А для выражений надо добавить операторы ‘?’ и ‘!’, такие же как в Kotlin/Swift .

4) Идентификатор

Расписал идентификатор с пробелами, ‘-‘, ‘№’ и вопросительным, восклицательным знаком в конце. Примеры:

  • Паниковать!
  • Делится на три?
  • проверка-массива
  • пока № > 0 { №— }

5) Добавил в лексику «модификатор», то что обычно называется annotation или decorator. Нужно, для того, чтобы отметить заголовок «внешней» функции и «пред-описанной» функции — нужно, так как первый компилятор хочу сделать однопроходным.

Собственно, практически все. Можно писать компилятор.

Моя оценка разработки компилятора — две рабочие недели, 80 часов. Понятно, что из-за того, что работа будет с перерывами, то займет больше и растянется на несколько месяцев.

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


    1. «выход» — это скорее break (или exit в виртовских языках). В идеале надо найти согласованную пару — return/break. Согласованную, в смысле — оба глагола или оба существительные.
      Я использую сейчас вернуть/прервать.

      Ответить

      1. break — это «прервать».
        exit — это «выход».
        А оставить надо «вернуть». Вернуть не только результат, но и управление в том числе. В любом случае, даже если «вернуть» — «что-то вернуть», но ничего не возвращается. фактически в терминах Си возвращается return void.

        Ответить

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *