DEADSOFTWARE

Добавлены открытые массивы
[dsw-obn.git] / notes
1 - открытые массивы работкают криво как статические аргументы процедур
2 Случай 1: не проходит проверки libgccjit
3 (*
4 TYPE Ar = ARRAY OF INTEGER;
5 VAR a : POINTER TO Ar;
7 (* так же и с VAR-параметром *)
8 PROCEDURE Ax(x : Ar);
9 END Ax;
11 Ax(a);
12 *)
13 Случай 2: массив должен быть указателем, да и ещё копироваться
14 (*
15 TYPE Ar = ARRAY OF INTEGER;
16 VAR a : POINTER TO Ar;
18 (* при использовании VAR-параметра работает *)
19 PROCEDURE Ax(x : Ar);
20 END Ax;
22 Ax(a^);
23 *)
25 - нет символов и строк
26 - нужен автокаст int -> real для DIV. Да и вообще каст типов.
28 - нету операторов if, while и т.д.
30 - импортируемые модули не инициализируются (секция begin)
31 - нету типа set
32 - не реализована свёртка констант
33 - не протестированы типы разнных размеров
35 - не реализовано расширение типа record:
36 libgccjit не умеет в классы. Проверки в рантайме надо делать вручную.
37 - нет проверок границ массивов в рантайме:
38 Потому что как минимум нет дескрипторов типа.
39 Возможно можно заюзать это:
40 https://gcc.gnu.org/onlinedocs/gcc/Pointer-Bounds-Checker-builtins.html
41 - При вычислении размера структур не учитывается вравнивание.
42 в libgccjit нет средств получения размера типов, в т.ч. структур
43 Как происходит выравнивание и есть ли оно вообще по дефолту - не понятно:
44 Нужно ли для получения выровненных структур использовать gcc_jit_type_get_aligned?
45 Пересекается с этим:
46 https://gcc.gnu.org/onlinedocs/gcc/Common-Type-Attributes.html
47 Требуемые выравнивания для типов можно получить через встроинную функцию __alignof__(T)
48 https://gcc.gnu.org/onlinedocs/gcc/Alignment.html
49 Возможный алгоритм выравнивания:
50 https://stackoverflow.com/questions/6963998/how-does-gcc-calculate-the-required-space-for-a-structure
51 http://www.rendoc.tech/questions/834444/how-does-gcc-calculate-the-required-space-for-a-structure
52 Есть ещё что-то для проверки границ объектов:
53 https://gcc.gnu.org/onlinedocs/gcc/Object-Size-Checking.html
54 - не понятен результат присваивания статических/разыменованных структур и массивов
55 (* reca := recb; *) - побайтовое копирование?
56 - не реализовано присваивание процедур к переменным-процедурам:
57 в libgccjit нет средств получения указателя на функцию.
58 Как решение-костыль - получение указателя в основной программе и сохранение в переменной.
59 - не реализован автокаст:
60 Не критично: libgccjit сам разруливает типы разных размеров.
61 - не реализованы локальные процедуры:
62 libgccjit не умеет в локальные функции.
63 Обойти можно костылём как в jvm.
64 - нет проверок переполнения как в рантайме, так и в компилтайме.
65 Возможно можно заюзать это:
66 https://gcc.gnu.org/onlinedocs/gcc/Integer-Overflow-Builtins.html
68 - нету счёта строк / столбцов
69 - любая ошибка фатальна