Стилистически выразительный язык программирования

Mar 03, 2015 14:26

Данное размышление следует понимать новой вариацией на давно известную тему. Но здесь неожданно получилась более симпатичная версия.

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

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



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

Тогда следует начать с предмета, условно, "основных комплексов" такого "стилистически выразительного" языка программирования. То, что в стандартных языках программирования носит название "программа", здесь должно получить название "рама", на которую, как и в обычном случае создания технических устройств, навешиваются "агрегаты" (в обычном программировании - процедуры и функции). То есть модуль программы примет следующий вид:

рама 'название'
агрегат 'название'
....
агрегат 'название'

Напротив агрегатов можно указать их состояние в момент запуска программы:

рама 'название'
агрегат 'название' активизация
....
агрегат 'название'

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

Типы переменных следует сохранить такими, какие они есть, за исключением некоторых изменений. Первое, переменным сразу следует определять их назначение - либо это переменные каким-то образом хранящие служебную информацию самой программы, либо - это переменные (здесь сразу следует понимать - массивы переменных), предназначенные для хранения внешней программе информации. Переменные, хранящие служебную информацию, следует определить под именем "индексов", а переменные, хранящие внешнюю информацию, под именем "сведений". Также и непонятные логике повседневной речи "массивы" следует переименовать, и использовать здесь два имени - "зона" для обозначения пустого массива, и "комплект" для обозначения содержимого массива. Тогда появится возможность осмысленного перед не перед математически ориентированным пониманием программного события выделения "зоны" и помещение в подобный объем "комплекта". Далее, индексы, сведения и комплекты, как и это и принято в современном программировании, следует определять в качестве локальных и нелокальных; тогда по умолчанию их следует понимать локальными, ограниченными конкретным "агрегатом" или "узлом", а особым образом уже определять как нелокальные (см. ниже). Кроме того, вероятно, вместо "констант" следует ввести зарезервированное слово "значение".

Далее следует убрать все понятия математической логики, например, оператор "if" (если). Превосходным именем обработчика, способным заменить оператор "если" можно назвать такое понятие, как "сторож". Тогда для "сторожа" следует указывать такие характеристики, как условия останова

сторож - 2< индекс <5

и перехода

сторож
3 - агрегат 'название' активизация
4 - агрегат 'название' активизация

или в сборе

сторож - 2< индекс 'название' <5
3 - агрегат 'название' активизация
4 - агрегат 'название' активизация

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

Аналогичным образом следует определить все типовые обработчики и создать библиотеку типовых обработчиков. В частности, предусмотреть зарезервированные имена "добавление" или "уменьшение" индекса и т.п.

Для объявления "рам", "агрегатов" и "индексов" использовать зарезервированное слово "учредить" -

учредить
индекс 'название' нелокальный
сведения 'название'

Считывание следует обозначить словом "получить", выдачу - словом "раскрыть" -

получить сведения 'название'
раскрыть сведения 'название'

Для получения значения нелокальной переменной из другого агрегата или узла также следует предусмотреть некое зарезервированное слово, например, "забрать" -

индекс 'название' забрать индекс 'название' узел 'название'

Вспомогательные библиотечные формы наподобие библиотек *.dll обозначить зарезервированным именем "обеспечение" и предусмотреть зарезервированное имя, скажем "обратиться" за обеспечением. Специфические формы обеспечения наподобие записываемых в регистры и файлы конфигурации данных определять также под зарезервированным именем "атрибуты".

Возвращаясь к общей структуре программы, следует принять, что "рама" может содержать только "агрегаты", "узлы". Но при этом агрегатам и узлам следует обеспечить возможность обмена содержанием как индексов, так и сведений и комплектов. Следует также определить общий принцип, что разделителями модулей программы следует понимать сами зарезервированные слова, и в этом отношении, возможно, следует ввести лишь метку окончания "рамы", например, "завершение".

Весь определенный здесь объем функционала позволяет представить примерный синтаксис модуля программы, если в качестве образца использовать некоторые небольшие учебные программы. Положим, это будет программа из пособия Р. Хершеля “Turbo Pascal 4,0/5,0” -

program outp_absent_num;
var ein, aus: integer;
begin
aus := 1;

writeln (‘новое число (конец = 0):’);
readln(ein); writeln (‘считано:’, ein:3);
while ein <> 0 do

begin

writeln (‘отсутствуют:’);
while aus < ein do
begin writeln(aus);
aus := aus +1;
end;
writeln (‘новое число (конец = 0):’);
readln(ein); aus := aus +1;
writeln (‘считано:’, ein:3);

end;

end.

На гипотетическом "стилистически выразительном" языке программирования эту программу можно записать следующим образом -

рама ‘program outp_absent_num’

агрегат ‘основной’ активизация
узел ‘первый’
узел ‘второй’

завершить

агрегат ‘основной’
учредить
сведения ‘ein’ нелокальный
сведения ‘aus’ нелокальный

получить сведения ‘aus’ значение ‘1’
наэкран ‘новое число (конец = 0):’
получить сведения ‘ein’
наэкран ‘считано:’ раскрыть сведения ‘ein’:3
сторож сведения ‘aus’=0 узел ‘первый’ активизация

узел ‘первый’

наэкран ‘отсутствуют:’
сторож сведения ‘ein’ =< сведения ‘aus’ узел ‘второй’ активизация
на экран ‘новое число (конец = 0):’
получить сведения ‘ein’
добавить сведения ‘aus’ значение ‘1’
наэкран ‘считано:’
раскрыть сведения ‘ein’:3

узел ‘второй’
раскрыть сведения ‘aus’
добавить сведения ‘aus’ значение ‘1’

семантика

Previous post Next post
Up