Страницы

воскресенье, 9 апреля 2023 г.

Процедура верхнего уровня

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

Можно сказать, что в некоторой степени такая простота провалилась и не нашла поддержки как со стороны некоторых систем, так и какой-то части пользователей, предпочитающих использовать два вида модулей в духе Turbo Pascal, поддерживающего кодовые единицы unit и program. Но за неимением соответствующей терминологии в Oberon-системах разница между модулями выражается через неявный контекст.

MODULE Main;
 IMPORT Out;
BEGIN
 Out.String("Казалось бы, при чём тут секция инициализации переменных?"); Out.Ln
END Main.

Исходно в Modula-2 программный модуль выглядел именно так, но библиотечный модуль обозначался как IMPLEMENTATION MODULE, что явно задавало нужный контекст.

В Обероне же была устранены разновидности модулей, а в отношении секции операторов модуля автор, несмотря на минимализм сообщения о языке, был вполне однозначен[0]:

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

Можно, конечно, отмахиваться от желания людей использовать Oberon так, но есть причины, почему это можно и учесть. Главное, что плохо в неявных главных модулях в Обероне — это смешивание понятий, что как показывает опыт, может плохо сказываться на ясности даже для опытных программистов.

Для избежания терминологической путаницы в экспериментальной ветке транслятора Восток сделано небольшое добавление — процедуры верхнего уровня[1]:

PROCEDURE Go;
 IMPORT Out;
BEGIN
 Out.String("Вроде бы то же самое, но ясности больше."); Out.Ln
END Go.

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

Сноски:

[0] Н.Вирт. Язык программирования Оберон. Глава 11.
[1] Пример процедуры верхнего уровня в песочнице.

Комментариев нет:

Отправить комментарий

Обработка ошибок

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