Логическая структура модуля

1. Общее описание

Как описывалось выше (см. п.3.1 статьи «Общие принципы») один модуль = один файл = один класс. Соответственно здесь будет описана общая структура файла.

Модуль состоит из строковых выражений, корневых блоков и пустых строк.

2. Пустые строки

Пустые строки состоят из пробелов и комментариев. Пустые строки при компиляции игнорируются.

3. Строковое выражение

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

У строкового описания нет единых правил оформления, особенности оформления смотрите в соответствующих главах.

4. Блоки

Корневым блоком может быть описанием функции, юнит-тестом, описанием импорта.

Блок состоит из более чем одной строки, блоки могут быть вложенные. Общая лексическая структура такова:

<Описание блока>:
    <Строковое описание>
    <Строковое описание>
...
    <Строковое описание>

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

5. Пример

Пример программы:

класс расширяет Базовый

использовать Кар как Ат

стат функция запустить(массив(строка) Параметры) возвращает число:
	константа КоличествоПараметров = 3
        // Пустая строка. Здесь может быть сколько угодно пробелов и комментов.
	если (Параметры.Длина не равно КоличествоПараметров):
		Ат.Печатать("Кол-во параметров программы должно быть равно 3.%н")

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

6. Разбиение одной строки на несколько

Способы разбить одну строку на несколько:

  1. Комментарий сильнее символа новой строки. Это означает, что в любом месте, где разрешен пробельный символ можно с помощью комментария разделить одну строку на две. Например:
поле Количество = /*

*/ 5

2. Скобки сильнее символа новой строки:

стат функция ПосчитатьСумму(
    число Слагаемое1,
    число Слагаемое2
) возвращает число:

3. Можно поставить в конце строки знак «».

7. Запрет кольцевых вызовов

Картарский язык программирования является языком с ограниченным сборщиком мусора. На самом деле как таковой сборщик мусора отсутствует. Фактически каждый ссылочный объект имеет свой счётчик и удаляется, если он становится равен нулю.

Однако, при таком подходе возникает проблема кольцевых зависимостей. Так как если объект А ссылается на объект Б, а объект Б ссылается на объект А, то счётчики ссылок на эти объекты никогда не удалятся. В том числе если эти объекты имеют один и тот же тип.

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

Часто бывает все-таки нужно создать структуру с кольцевой зависимостью. Для этого есть «хак» — типы данных дерево и граф. Этого вполне достаточно практически для любой задачи.

Остается только проблема кольцевых зависимостей проекта. Проект А создает класс из проекта Б, а тот в свою очередь создает класс из проекта А. Задача поиска и исправления таких зависимостей остается на плечах разработчика.

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

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