Исследование визуального языка программирования
Цель
Придумать язык, который позволит комфортно создавать программы в трёхмерном пространстве с помощью VR. Язык позволит красиво иллюстрировать алгоритмы. Красотой кода смогут насладиться не только программисты. Такой код можно будет тематически оформлять. Скорей всего это будет дорогое удовольствие для привлечения программистов. Это скрасит разработку и даст возможность делать красивые презентации кода.
Эскиз
граф, вычисляющий n-ое число фибоначчи по наивному методу, вершина CB (CallBack) выполняет роль рекурсии
Интерпретатор
Установка зависимостей:
python3 -m pip install antlr4-python3-runtime==4.7.2
Запуск:
python3 gi examples\fibonacci.g 3
Основные принципы
- Красота
- Компактность
- Минимум контекста
- Наглядность
- Эргономика
Прогресс
Шаг 1 - простые арифметические операции и ветвление
Шаг 2 - рекурсия через подпространство
Шаг 3 - интерпретатор на питоне через регулярки
Пример:
./gi -p examples/simple.g 5
Требуется установка antlr4-python3-runtime
Шаг 4 - использование граммара
Добавлен ANTLR граммар. На его основе сделан парсер. Пришлось отказаться от табуляции, иначе граммар получается с кодом на языке, для которого генерируется парсер. В моём же случае, нужны разные парсеры для разных языков.
Шаг 5 - редактор на Unity
Шаг 5.1 - Отрисовка графа
Добавлен ANTLR парсер и сортировка дерева на основе силовых алгоритмов.
Шаг 5.2 - Работа с узлами в простом графе
Шаг 5.3 - Работа с подпространством
Шаг 5.4 - Загрузка и сохранение графа
Шаг ? - перейти на UE4
Шаг ? - интерпретатор на Си
Идеи
- Ввести понятие - подпространство. Это изолированная область от внешних и внутренних контекстов. У подпространства есть входные связи и выходные. Такой механизм позволит сделать рекурсию через генератор подпрастранства.
- Работу со списками можно сделать через хвостовую рекурсию. Здесь понадобятся ноды получения первого и оставшихся элементов в последовательности.
- Динамическое подключение отладчика к программе. Построение систем визуализации внутри редактора. Подключение к запущенному миру, наблюдение артефактов системы.
