good_training_language/ПЛАН.txt

89 lines
6.8 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

- [x] Исправить порядок записи чтения параметров функции (см. тесты/тест.хуя)
- [x] Реализовать возврат значений из процедур (см. тесты/тест.хуя)
- [x] Реализовать ./примеры/06-рейлиб.хуя
- [x] Синтаксис линковки библиотек
- [x] Поддержка «вещ32» для ./примеры/06-рейлиб.хуя
- [x] Исправить тест_вещественных_чисел() (см. тесты/тест.хуя)
- [x] Реализовать тест_вещественных_чисел() для кодогенерации эльфа
- [x] Приоритет бинопов
- [x] Добавить отскакивание от стенок в ./примеры/06-рейлиб.хуя
- [x] Вещественные литералы
- [x] Инструкция останова
- Правда, кодогенерации без неё и так хорошо. Возможно она будет полезна только для констатного исполнения.
- [x] Кастомизируемый размер стека для интерпретации
- [x] Индексировать массивы круглыми скобками
- Так мы 100% избавляемся от переключения раскладки для набора квадратных скобок.
- Плюс такой же синтаксис имеет Ada.
- [x] Оба вида инструкций вызова функций должны подчищать за собой аргументы.
- В данный момент так делает только вызов внешней процедуры, что создает кучу проблем для компилятора.
- Скомпилировать такую процедуру не сложно, а вот интерпретация усложняется.
- А может тогда в теле функции сбрасывать элементы? Не получится, у нас там адрес возврата лежит.
- Походу надо снова рассматривать идею второго стека.
- Реализовал второй стек. Проблема иррелевантна.
- [x] Строки и срезы как временные объекты.
- [x] Рекурсия
- [x] Присваивание со сложными левосторонними выражениями
- [x] Структуры
- [x] Локальные переменные
- [x] Инициализация локальных переменных
- [x] Локальные массивы
- [x] Локальные константы
- [x] Циклы «для»
- [x] Объявление переменных в цикле «для»
- [x] Исправить сегфолт при выделении локальной переменной в цикле «для»
- [x] Вложенное индексирование
- [x] Отрицательные числа (Знаковые целые)
- [x] Типизированные литералы
- [x] Game of Life
- [x] Rule110
- [x] Типизированные константы
- [x] Через интерпретацию ПП
- [x] Многострочные комментарии
- [x] Не забудь избавиться от прямого доступа к символам, чтобы случайно не крашнуться.
- [x] «для» должен неявно объявлять переменную
- [x] Операторы сравнения
- [x] Экранирование «ёлочек»
- [x] Switch-case-ы в каком-виде виде («вилка»)
- [x] Шестнадцатеричные литералы (для примера рейлиб)
- [x] Выражение::ЦепочкаВызовов
- [x] Массивы в полях структур
- [x] Все бинопы для всех релевантных типов в правой части
- [x] НеРавно/Равно
- [x] Меньше/Больше/МеньшеРавно/БольшеРавно
- [x] и/или, добавить «либо» (исключающее или)
- [x] сложение/вычитание/умножение/деление/остаток
- [x] конвертация между типами («как»)
- [x] знаковые битовые смещения
- [x] унарный минус
- [x] Все бинопы для всех релевантных типов в левой части
- [x] Интерпретация всех недостающих инструкций
- [x] Кодогенерация всех недостающих инструкций
- [x] сделать!(вызываемое.лок(), "Индексация срезов из сложных выражений");
- [x] сделать!(&имя.лок, "Индексация срезов в левой части присваивания");
- [ ] Доработать интринсики
- [ ] «ввод»
- [ ] «срез»
- [ ] «сисвызов»
- [ ] «печать»
- [ ] Создание новых срезов по адресу и типу элементов
- [ ] ...
- [ ] Поддержка всех релевантных примитивных параметров для внешних процедур
- [ ] Печать вещественных чисел
- [ ] Что дальше?
- Низкий приоритет
- [ ] Небесполезные операции сравнения срезов.
- [ ] Аналоги операций выхода из циклов (continue, break)
- [ ] Провека, что все потоки исполнения возвращают значение.
- [ ] Выравнивание структур как в Си
- [ ] WebAssembly
- [ ] Не прерывай компиляцию из-за одной лишь ошибки.
- [ ] Перечисления в каком-нибудь виде
- [ ] Динамическая память в каком-нибудь виде
- [ ] Передача переменных по ссылке
- [ ] Индексирование строковых литералов (печать(«Q»(0) как нат8));
- [ ] Индексирование строковых констант (конст ы := «Q»; печать(ы(0) как нат8););
- Это пока невозможно в силу того, что строковый литерал выделяется в памяти временной машины и теряется
- [ ] Переменная «результат» как в Паскале.
- Если есть передача аргументов по-ссылке, то оно особо и не нужно.