mirror of
https://github.com/tsoding/good_training_language.git
synced 2026-09-12 19:50:53 +05:00
89 lines
6.8 KiB
Plaintext
89 lines
6.8 KiB
Plaintext
- [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););
|
||
- Это пока невозможно в силу того, что строковый литерал выделяется в памяти временной машины и теряется
|
||
- [ ] Переменная «результат» как в Паскале.
|
||
- Если есть передача аргументов по-ссылке, то оно особо и не нужно.
|