icfpc 2014

Jul 29, 2014 01:01

ICFPC`14

Этот год я как-то слил.

Задание было примерно такое: написать AI PacMan`а на ассемблере для Lisp-заточенного процессора. Причем, чтобы было интереснее - AI привидений нужно было писать на другом, более микропроцессорном ассемблере в духе PIC, синхронизация процессоров внешняя, а если кому-то всё ещё мало - в AI пакмана передавалось не только состояние поля, но и программы AI привидений.

Я сломался через полтора дня без видимых/осязаемых результатов. Начал с архитектуры управляющего проца, прикинул как игра будет считать такты, как надо вызывать AI на сопроцессорах привидений и пакмана, и тут мне бы сделать визуализацию, чтобы иметь карту на посмотреть, а в перспективе показать на ней движение привидений - так нет, сразу пошел писать реализацию компилятора ассемблера для недоPIC`а.

Ассемблер для Lisp-процессора был страшен и функционально заточен: GС (по легенде - реализованный в железе); типы данных Целое, Пара и ссылка на Функцию; отдельный код и три независимых стека, в одном из которых можно было оперировать фреймами для локальных переменных; отсутствие приличной (т.е. прямой) адресации.
Как хинт мейнтейнеры сказали, что заточили какой-то паскалевский компилятор для генерации кода, но мне это не помогло.

Из выводов: нужно иметь приличный токенайзер для разбора чего угодно, нужно осознавать как работают функциональные языки, нужно делать промежуточный результат видимым. Отсутствие формального образования при работе с такой заумью также сказывается.

Из забавного: изобретать собственный GC без фундаментальных знаний о том как оно работает - не так просто как кажется. Первая версия была неживая совсем, вторая вроде бы могла работать, и даже могла бы находить кольца ссылок - если бы я её дописал - только вот по условиям задачи там кольца создать было невозможно. 8-)

Ну и естественно - народ, айда летом `15 года три дня писать какую-нибудь околофункциональную хрень! 8-)
Previous post Next post
Up