-
Notifications
You must be signed in to change notification settings - Fork 8
/
ПЛАН.txt
88 lines (87 loc) · 6.76 KB
/
ПЛАН.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
- [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););
- Это пока невозможно в силу того, что строковый литерал выделяется в памяти временной машины и теряется
- [ ] Переменная «результат» как в Паскале.
- Если есть передача аргументов по-ссылке, то оно особо и не нужно.