Logo

1 июля 2015 г.

«Hello, world!» из объектно-ориентированной ОС

Язык программирования Кантор назван в честь немецкого математика Георга Кантора, родившегося в Петербурге. Георг Кантор разработал теорию неперечислимых множеств — математическую основу фракталов. Объектная модель в языке Кантор также является фрактальной — это попытка переосмыслить принципы SOLID, чтобы создать объектно-ориентированную ОС.

Кантор разрабатывается как компилируемый язык и язык системного программирования, но основан на функциональной и объектно-ориентированной парадигмах. Цель — создать новые направления системного программирования: функциональное системное программирование и объектно-ориентированное системное программирование, а затем разработать перспективную ОС, которая не будет копией уже имеющихся.

Далее речь пойдет об альфа-версии Кантора, разрабатываемого на Delphi как интерпретатор — это первый шаг к самораскрутке компилятора. Со временем Кантор будет переписан на Канторе и научится собирать сам себя.

Уже на этапе альфа-версии важно проработать ключевые понятия чистой объектно-ориентированной среды, поскольку на первых порах роль объектно-ориентированной ОС будет выполнять сам Кантор. Для этого всем выбранным теориям нужно найти практическое воплощение, попутно переосмысливая привычные понятия ОС.

13 февраля 2015 г.

Неоднозначность разбора и возможный возврат elsif

Похоже, ключевое слово elsif придется вернуть в язык, поскольку возникает неоднозначность. На фоне предновогодней эйфории я больше думал над синтаксисом со стороны отекстовки, а посмотреть со стороны синтаксического разбора забыл.

Неоднозначность

Без elsif при синтаксическом разборе всегда возникает неоднозначность, поскольку на момент входа в оператор еще не известно, единственный он во вложенном блоке или нет. Все последующие блоки также под вопросом, поскольку теперь не понятно, какой end какой блок завершает:
if условие1 then
операторы;
else if условие2 then
операторы;
end;
операторы;
end; /* это лишний end или завершение предыдущего if,
не единственного в блоке? */
С привычными отступами выглядит понятней:
if условие1 then
операторы;
else
if условие2 then
операторы;
end;
операторы;
end;
Проблема характерна для любого языка с блочными операторами ветвления и свободной записью: SQL, Модула-2, частично Ада.

В Канторе я вижу два выхода:
  • Вернуть elsif и получить тонны ненависти от программистов, не любящих это ключевое слово.
  • Не бояться «лишних» end при разборе. Тут нужен дополнительный анализ — что делать с возможными неоднозначностями. В любом случае это усложнит компилятор и затруднит проверку синтаксиса.
Возвращение elsif, если случится, может быть частичным, — только для алгоритмических блоков. В выражениях с if/case вполне может остаться принудительное совмещение.

Принудительное совмещение в выражениях

В выражениях с if/case внутри веток могут стоять только одиночные значения или кортежи, поэтому принудительное совмещение не приводит к неоднозначности и elsif не нужен:
a = if условие1 then
значение1 // в выражениях точка с запятой не ставится
else if условие1 then
значение2
// из-за отсутствия точки с запятой никакие другие операторы
// тут недопустимы
end;
Пример с кортежем отличается только числом значений:
a, b, c = if условие1 then
значение1, значение2, значение3 // точка с запятой опять не ставится
else if условие2 then
значение4, значение5, значение6
end;

1 января 2015 г.

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

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

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

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