Предложения по учебному языку программирования
Для обучения программированию предложены сотни языков, включая управление графическими элементами. По этому предложение нового языка для обучения требует дополнительных обоснований.
Попробую описать преимущества предлагаемого языка обучения программированию (рабочее название PL/2) и программирования игр (рабочее название PL/2 script), и предлагаю найти недостатки в подходе.
Основными парадигмами предполагаются следующие:
Ассемблерный код, позволяющий управлять процессором
Логическое программирование, представленное языками Prolog, SQL
Функциональное программирование
Императивное программирование, описываемое алгоритмами
Объектное программирование, заключающееся в передаче и обработке сигналов
В настоящее время эти методики объединяются в расширениях существующих языков программирования. Предлагается подход для объединения парадигм в едином синтаксисе, заранее разрешающем конфликты между различными подходами, что уменьшит затраты времени на изучение различных синтаксисов.
Итак, ключевые элементы учебного языка программирования.
Исходный текст
Файл с исходным текстом состоит из произвольного текста (комментарии, описание алгоритма), в который могут включаться [именованные] фрагменты на различных языках программирования — PL/2, sql, html, текст, PL/2 script.
начало вставки кода обозначается ключевым словом meta (мета) в первой позиции строки
окончание вставки обозначается последовательность /meta в первой позиции строки
Синтаксис PL/2 включает единообразные требования к отступам, в частности, текст программы смещен не менее чем на 4 позиции от начала строки.
Структура текста программы
Размер сдвига между уровнями вложенности составляет 4 пробела. Продолжение оператора на следующей строке смещается не менее, чем на 3 пробела относительно уровня оператора
Основной уровень программы смещен на 4 пробела относительно символа разметки исходного файла meta, соответственно, ни один символ программы не может иметь отступ менее 4 пробелов
Синтаксис
Для разных видов блоков предполагаются разные виды скобок:
круглые скобки (. ) используются для описания и передачи параметров при вызове методов
квадратные скобки [. ] используются для описания размерности массивов и указания индекса при доступе к элементу массива.
фигурные скобки <. >используются для указания различных элементов структуры программы. Для локализации ошибок фигурные скобки снабжаются дополнительными символами.
— аналог круглых скобок — используется при описании тела реляционного класса
— используется при описании тела функционального блока
— внешние обрамляющие скобки при описании константы структурного класса
— описание тела класса или интерфейса
<|… |>— параллельно выполняемые блоки
— внутренний блок в теле метода
Операторы
== сравнение на равенство =/= сравнение на неравенство := присваивание значения переменной ++ преффиксный инкримент -- преффиксный декремент + сложение - вычитание * умножение / деление -/- рациональное деление (выделяется только для наглядности формул, в т.ч. в IDE) (? boolean ? value_true :: value_false ?) - тернарный оператор
Императивное программирование
Предлагается следующий синтаксис для структурного программирования:
Операторы, заключенные между скобками , выполняются последовательно в порядке, указанном в тексте программы
Для изменения порядка выполнения используются операторы цикла и ветвления
выполнение при исполнении условия
выполнение блока при исполнении первого из условий и блок else при не выполнении ни одного из условий
переключатель по численному значению с указанием константы или члена перечисления
В выражениях можно также использовать оператор тернарного выбора
loop [explicit] [метка] < for ; from ; while ; next ; where . continue; . break [метка блока]; . >
Здесь:
loop — оператор начала цикла
explicit — цикл исполняется хотя бы один раз, проверка условия выхода из цикла перед первым проходом не выполняется
for — список переменных цикла и их инициализация
while — условие, при котором цикл продолжает итерации
next — команды, выполняемые после итерации
from — контейнер, из которого выбираются элементы при проходе по циклу
where — условие для выполнения тела цикла
continue — оператор досрочного перехода к следующей итерации
break — оператор досрочного выхода из текущего или указанного цикла
Обработка ошибок
управление транзакциями и участками с возможностью отказа
Объектно-ориентированное программирование
new — создание нового объекта
drop — удаление объекта
select ::= — получение информации об именованных объектах коллекции
insert += — включение нового объекта в коллекцию
delete -= — удаление объекта из коллекции
update — множественные обновления в коллекции
управление правами действий объекта над объектами указанного класса или его свойствами/методами
grant += — назначить разрешающие права объекта на класс или свойство
deny += — назначить запрещающие права объекту на класс или свойство
revoke — удалить права объекта на класс
Виды классов
Классы делятся на следующие типы:
- domain class — элементарный класс среды исполнения
- relation class — связь между указанными объектами (аналогично предложениям Prolog, списку параметров функций), методы и свойства отсутствуют, доступ происходит только к открытым членам. По возможностям аналогично набору, возвращаемому из реляционной базы данных
- structure class — структура с открытыми элементами. Для доступа к элементу текущего объекта используется слово this. Может содержать методы для обработки.
- system class — система, которая может содержать закрытые и защищенные наследуемые элементы.
- process class — процесс, которому можно передать инициализирующие значения и получить результирующие значения. Соответствует службе. Любой метод получает не только указатель на себя (this), но и указатель на вызвавший класс или объект (sender). Это позволяет проверить авторизацию объекта, осуществляющего доступ к методу. Содержит стандартные методы.
Не императивное программирование
операторы работы с лямбда-выражениями и списками
- ::= — определение раскрытия выражения
- |> — конвейер для всех элементов из левой коллекции, задаваемый правым выражением
кванторы существования и всеобщности на упорядоченных списках
- &> — коллекция из всех элементов из левой коллекции, удовлетворяющих правому выражению
- !> — конвейер для всех элементов из левой коллекции, не удовлетворяющих заданному правому выражению
- %> — коллекция из первого элемента из левой коллекции, удовлетворяющего правому выражению (арифметически — остаток от деления)
- ~> — все элементы списка, кроме первого, удовлетворяющие правому условию
- $> — коллекция из всех элементов из левого списка, кроме последнего, удовлетворяющего заданному правому выражению
- ?> — коллекция из последнего элемента из левого списка, удовлетворяющего заданному правому выражению
Ассемблер
Используется класс процессора, аргументами методов которого являются аргументы ассемблерных команд, а свойствами — регистры процессорного ядра.
Такой подход позволяет использовать наследование, как переход к новому поколению линейки процессоров, а также использовать полные имена команд вместо коротких мнемоник и возможность равноправного описания в системах помощи.
Hallo, world
hallo.pl2 При использовании program код помещается в метод default.Default.Main() meta source="pl2" name="example2" using user.OS.IO; // using OS Console interface program (String arguments[] \execution time command line parameters\ ) /meta *** hallo.pl2 ***
PL/2 script
Язык PL/2 script предоставляет возможность описания сценариев и расширения классов во время описания переменной для программирования игр.
Вместо функциональной переменной предлагается использовать строку, которая (как в Excel) начинается со знака равенства.
При этом описание классов и объектов удобно хранить в XML, а код использовать для активной обработки.
pl2script/game/scene.htm Scene Сцена Game class as a main class for a game Класс для описания контекста игры prop . prop . tip . Сообщение при .
Ноосфера Большой мир Вы попали в большой мир Вселенная Солнечная система Земля По стране В себя На природу В школу На завод В университет
Прошу высказаться о проблемах, возможных при использовании такого синтаксиса
Ссылки:
habrahabr.ru/post/136272 Какой язык программирования должен быть первым при изучении в школе?
habrahabr.ru/post/176243 «Национальные» языки программирования
Спасибо пользователю oeai за ссылку на проект INSTEAD и язык Lua