AntKrotov / oberon-07-compiler

Oberon-07 compiler for x64 (Windows, Linux), x86 (Windows, Linux, KolibriOS), MSP430x{1,2}xx, STM32 Cortex-M3
BSD 2-Clause "Simplified" License
61 stars 5 forks source link

Форматирование READMY #18

Closed prospero78 closed 2 years ago

prospero78 commented 2 years ago

`

1472 lines, 0.01 sec, 6477 bytes ./bin/testing Testing begin... test.COLLECTIONS.create() test.COLLECTIONS.push() testing NIL dereference module: COLLECTIONS line: 29 ` Хм. Это правильное поведение?

AntKrotov commented 2 years ago

`

1472 lines, 0.01 sec, 6477 bytes ./bin/testing Testing begin... test.COLLECTIONS.create() test.COLLECTIONS.push() testing NIL dereference module: COLLECTIONS line: 29 ` Хм. Это правильное поведение?

Сначала надо объявить тип-расширение от COLLECTIONS.ITEM, потом создать экземпляр такого типа (NEW(...)), и только тогда можно добавить новый экземпляр в коллекцию.

ext* = POINTER TO RECORD (COLLECTIONS.ITEM)

    (* добавить нужные поля *)

END;                       
...
NEW(...)

Элементы добавляются в конец и извлекаются из конца (по сути это стэк, коллекцией я это назвал, потому что там могут храниться элементы любого типа, производного от COLLECTIONS.ITEM). При добавлении нового элемента в коллекцию проверка на NIL не производится, потому что по логике программы всегда добавляются ненулевые элементы. Коллекции используются для временного хранения свободных динамических записей, чтобы реже обращаться к операционной системе. Если запись больше не нужна, то вместо DISPOSE(...), она помещается в коллекцию. Если требуется создать новую динамическую запись, то она будет взята из коллекции и только если коллекция пустая, тогда будет обращение к ОС за памятью. Этот прием заметно ускоряет работу компилятора.

prospero78 commented 2 years ago

Ихмо, нельзя полагаться на логику работы. Нельзя допускать ситуации, когда в коллекцию кладётся NIL. Вот это точно поломает всю логику. Опять же, где реально возникла ошибка -- непонятно. Из какого места прилетает подобный NIL -- совершенно не очевидно. Догадываться -- худшее, что может случиться с программистом при анализе ошибок в коде.