DEADSOFTWARE

Добавлено вычисление размеров типа для аллокации
[dsw-obn.git] / notes
1 - нету типа real, оператор / должен возвращать дробный результат
2 - нету открытых массивов
3 - нет символов и строк
5 - нету операторов if, while и т.д.
7 - импортируемые модули не инициализируются (секция begin)
8 - нету типа set
9 - не реализована свёртка констант
10 - не протестированы типы разнных размеров
12 - не реализовано расширение типа record:
13 libgccjit не умеет в классы. Проверки в рантайме надо делать вручную.
14 - нет проверок границ массивов в рантайме:
15 Потому что как минимум нет дескрипторов типа.
16 Возможно можно заюзать это:
17 https://gcc.gnu.org/onlinedocs/gcc/Pointer-Bounds-Checker-builtins.html
18 - При вычислении размера структур не учитывается вравнивание.
19 в libgccjit нет средств получения размера типов, в т.ч. структур
20 Как происходит выравнивание и есть ли оно вообще по дефолту - не понятно:
21 Нужно ли для получения выровненных структур использовать gcc_jit_type_get_aligned?
22 Пересекается с этим:
23 https://gcc.gnu.org/onlinedocs/gcc/Common-Type-Attributes.html
24 Требуемые выравнивания для типов можно получить через встроинную функцию __alignof__(T)
25 https://gcc.gnu.org/onlinedocs/gcc/Alignment.html
26 Возможный алгоритм выравнивания:
27 https://stackoverflow.com/questions/6963998/how-does-gcc-calculate-the-required-space-for-a-structure
28 http://www.rendoc.tech/questions/834444/how-does-gcc-calculate-the-required-space-for-a-structure
29 Есть ещё что-то для проверки границ объектов:
30 https://gcc.gnu.org/onlinedocs/gcc/Object-Size-Checking.html
31 - не понятен результат присваивания статических/разыменованных структур и массивов
32 (* reca := recb; *) - побайтовое копирование?
33 - не реализовано присваивание процедур к переменным-процедурам:
34 в libgccjit нет средств получения указателя на функцию.
35 Как решение-костыль - получение указателя в основной программе и сохранение в переменной.
36 - не реализован автокаст:
37 Не критично: libgccjit сам разруливает типы разных размеров.
38 - не реализованы локальные процедуры:
39 libgccjit не умеет в локальные функции.
40 Обойти можно костылём как в jvm.
41 - нет проверок переполнения как в рантайме, так и в компилтайме.
42 Возможно можно заюзать это:
43 https://gcc.gnu.org/onlinedocs/gcc/Integer-Overflow-Builtins.html
45 - нету счёта строк / столбцов
46 - любая ошибка фатальна