Я тут довольно большой проект начал — язык высокого уровня для программируемого калькулятора «Электроника МК-61». В прошлом я с ним немного сталкивался и даже писал десять лет назад «Песню о пиве» для него.
Программирую вайбкодингом, разумеется, лучшими нейросетями из доступных — «Опусом 4.8» и «ГПТ 5.5». Вручную это проект на годы, без сеток я бы его даже не начинал.
Основная сложность — скромные возможности. На программу выделено всего 105 байт и несколько регистров, которыми можно оперировать, поэтому все лучшие программы написаны просто с нереальным количеством хаков, использующих как универсальные вещи (вроде возвратно-ориентированного программирования), так и специфические вещи, основанные на аппаратных особенностях и багах и багах калькулятора.
Ядро языка уже давно написано и даже пережило несколько рефакторингов, но до конца ещё далеко. Я перевёл на него несколько существующих кодовых бриллиантов, чтобы разобраться с применёнными там приёмами оптимизации и моему транслятору до таких вершин ещё далеко.
Сейчас я, например, разбираюсь с упаковкой нескольких переменных в один регистр. Идея простая, но позволяет иногда экономить очень много: если у нас есть три переменные и каждая принимает значение от нуля до десяти, то можно хранить их в одном регистре поразрядно от «00.0» до «99.9».
Так, например, переписывается в текущем синтаксисе игра «Охота на лис» из блога Дениса Монатко:
program FoxHuntMK61 {
field: board(0..9, 0..9)
state {
cell: coord(field)
foxes: coord_list(field, 9) = random_unique()
bearing: counter 0..9 = 0
}
loop {
cell = read()
if cell in foxes {
found_fox()
}
scan_from_cell()
show("--", cell:02, "--", bearing)
}
fn found_fox() {
show(-20)
}
fn scan_from_cell() {
bearing = line_count(foxes, cell)
}
}Это один из более чем двадцати примеров, где оптимизатор справляется лучше или на уровне опытного программиста на этом калькуляторе.
Тот самый из «Мама, папа я — и микрокалькулятор»?
Таких книг много издавалось :-) Но для меня сейчас полезнее короткие справочники.
Добавлено: добавил, кстати, игры оттуда в свой репозиторий!