1

Тема: Стадии/режимы script, mount и make, подрежим check

Пока непонятно, относится эта тема к компилятору Кантора или к платформе Кантора в целом.

Из-за основанности на обратимом коде любая компиляция на Канторе является как минимум двухстадийной (кодогенерация станет третьей стадией) и представляет собой процесс обмена кодом с ядром Кантора:

  • На стадии script исходный текст разбирается и превращается в объектный код, затем складывается в БД кода. Поскольку БД кода первична, любой исходный текст считается скриптом, пополняющим или изменяющим БД.

  • На стадии make ядро получает целевую точку (и стратегию сборки?), под которую выбирает из БД весь зависимый код, выполняет над ним тождественные преобразования (частичные вычисления?), оптимизации и прочие действия, чтобы получить результат, пригодный к подаче на вход кодогенератора. Затем ядро мини-Кантора запускает внешний кодогенератор, а в будущем Кантор будет использовать свой собственный.

В целом стадии независимы друг от друга. Например, после script может выполняться отекстовка полученного объектного кода, или же компилятору может передаваться сразу точка сборки, а весь код браться целиком из БД. При наличии непрерывно работающего ядра Кантора с оперативной (online) БД стадии становятся режимами и могут работать параллельно, контроль целостности и согласованность кода берет на себя ядро.

Непрерывная работа ядра вводит еще один режим — mount, в котором объектный код монтируется из двоичных файлов хранилища с выполнением лишь общих проверок целостности. Это будет быстрее script, но требует разработки двоичного (сериализованного) хранилища БД кода и соответствующей обвязки в ядре. Двоичные и текстовые исходники взаимозаменяемы. Встретив текстовый исходник, mount будет запускать script.

2

Re: Стадии/режимы script, mount и make, подрежим check

Говоря о стадии script, по всей видимости, нужно использовать термин трансляция, исходя из того, что транслятор лишь переводит одно представление программы в другое, не добавляя отсебятины вроде экстракодов. Ассемблеры являются трансляторами, а Кантор позиционируется в роли ассемблера своей платформы.

3

Re: Стадии/режимы script, mount и make, подрежим check

Здесь еще где-то должны быть дополнительные режимы:

  • Режим документирования — генерация документации из каркаса классов и свойств, с включением обычных и/или вики-комментариев.

  • Режим перевода строк сообщений и комментариев — генерация исходника, содержащего только строки и комментарии (в том числе вики), подлежащие переводу. Исходный и целевой языки задаются пользователем.

Генерация документации будет, скорее всего, на основе вики-комментариев, — для чего они, собственно, и предназначены.

В целом же, появление в языках программирования режимов обработки исходных текстов, отличных от генерации кода, говорит в пользу перехода от текстового представления к БД, ибо только отекстовываемая БД позволит иметь одноразовые исходники, содержащие срез кода с возможностями, требуемыми сейчас, для текущего вида работ, без оглядки на остальные. Тема будет раскрыта далее.

4

Re: Стадии/режимы script, mount и make, подрежим check

Преимущества двухстадийной компиляции на примере расширенного понятия константных выражений в Халва-Паскале:

function f(p1, p2: Integer): Integer;

const
  const1 = f(1, 2);
  const2 = f(3, 4);

var
  arr1: array[0..f(5, 6) - 1] of Integer;

5

Re: Стадии/режимы script, mount и make, подрежим check

Важность разделения на стадии в их естественности. С точки зрения инженерии программирование вычислительных машин можно разделить на разработку библиотек и разработку программ:

  • При разработке библиотек во главу угла ставится охват как можно большего числа случаев использования, и широта охвата выражается через абстрагирование. Библиотеки создаются ради решения общих задач, их цель — повторное использование кода.

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

Тут нужна цитата из учебника по проектированию.

В сложившемся процессе разработки наблюдается противоречие: основой программирования является разработка библиотек, занимая всё большее время по времени и трудозатратам, а инструменты по-прежнему ориентированы на разработку программ. Каждая библиотека создает внутри себя некую модель кода и данных, но в машинном виде эта модель существует лишь во время работы компилятора, возникая заново из исходных текстов при каждом запуске. (Аргументация напоминает ОС «Фантом»).

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

От систем в образе типа Smalltalk Кантор отличается тем, что не пытается строить единую идеальную модель, а берет на себя роль хранилища произвольных моделей, задача которого — беспристрастно проверять формальные правила, не более. Инструмент должен замещать инструмент. Пакетный менеджер и хранилище исходных текстов — инструменты. Чтобы заместить их, нужно предложить лучшие инструменты.

Re: Стадии/режимы script, mount и make, подрежим check

Стадию script я назвал бы стадией parse скорее… Мне не очевидно, почему используется термин script.

7

Re: Стадии/режимы script, mount и make, подрежим check

Смысл использования термина script — подчеркнуть временность существования кода в текстовом виде. Скрипт — это скрипт БД, скрипт установки, отбрасываемый после завершения установки. Если назвать как-то по-другому, то только install. Это никак не parse, разбор — вспомогательная низкоуровневая операция, лишь часть процесса установки, «впечатывания» кода в БД.