Vlad-Shcherbina / icfpc2014-tbd

fourth place
Do What The F*ck You Want To Public License
4 stars 0 forks source link

Спеки вроде 'gcpy_file:YoleGCC:ff.py' #30

Open Vlad-Shcherbina opened 10 years ago

Vlad-Shcherbina commented 10 years ago

Кстати, а у этого паттерна есть общепринятое название?

Мне паттерн очень понравился. Получилась бесплатная интероперабельность между турнирами и реплеями, а также удобное и унифицированное стравливание стратегий вне зависимости от реализации.

Несмотря на полную симметрию между картами, гостами и пакманами, спеки для карт появились довольно поздно, когда Йоле прикрутил map_loader. Наверное, сказался тот факт что у нас не было отдельных классов Map и Game. Потом спеки карт тоже пригодились: можно было поворачивать карту параметром в спеке, что позволило увеличить нашу скудную коллекцию в четыре раза. Ещё можно было бы сделать спеку для генератора случайных карт.

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

manpages commented 10 years ago

Это хорошая мысль, которую можно применить для задач типа 2011, 2012, 2014, :thumbsup:

fj128 commented 10 years ago

Да, более того, ИМО нужно было и в других местах использовать game.lambda_man_ai_from_spec (и аналогичные функции для загрузки ghost_ai, maps, and, maybe, the game engine itself if we were ever to make a separate implementation) вместо прямых импортов.

Паттерн называется Inversion of Control и Dependency Injection если что, и я его дико одобряю ибо decoupling. Ну, в разумных пределах, конечно, когда это не приводит к callback hell. То есть типа когда это strictly necessary, game.py как бы всё-таки должна быть более или менее активным объектом и вызывать имплементации АИ и прочего.

yole commented 10 years ago

Спеки меня в начале удивили (особенно в том месте, когда мы делали eval произвольного питоновского кода), но на самом деле они хороши. Особенно для менеджмента соревнований.