January 5th, 2016

Немного изощрений.

В самом деле, код на основе массива получается в чём-то проще и гибче: индекс ведь не обязан быть той же разрядности, что и физический адрес, соотв., структуры для хранения этих данных можно сделать меньше. Так и сделал - 16-битный индекс (то есть в массиве не может быть больше 65536 ячеек в принципе, а на самом деле там ещё на один бит меньше, поэтому не более 32768 ячеек). Изменив один #define и перекомпилировав программу, можно сделать 32-битные индексы, соответственно увеличив максимальное количество ячеек до прям таки ниииивааабразимых величин.

Но, подозреваю, однажды выяснится, что одним массивом не обойтись и нужно заводить какую-то параллельную структуру данных для хранения чего-нибудь типа списка (или таблицы) встроенных констанкт, функций и операторов - я не хочу тратить драгоценное ОЗУ контроллера для хранения того, что всё равно не меняется (подобные вещи можно и нужно хранить в памяти программ, всегда).

Пока пишу код мелкими кусочками, отлаживая и исследуя его поведение. Вот, например, обобщённые функции получения данных атома по его индексу и копирования атома:
Collapse )
Простенькая защита от дурака присутствует. Работает, прикольно. Во второй функции можно было бы вставить вызов data_of, но тогда два раза вычислялось бы значение флага type_valid, а зачем мне такие сложности?

Немцам почему-то не понравились самобытные обычаи дружелюбных и трудолюбивых.

Об муд смен