пятница, июня 15, 2007

EASTL

Ссылки на EASTL я встречала в течение довольно продолжительного времени, вот наконец почитала о том, что это такое.
Electronic Arts не устраивали существующие реализации STL и они сделали свою. Вот здесь лежит ее подробное описание EASTL - Electronic Arts Standard Template Library.

Не устраивало их много чего. В тексте перечисляются производительность, сложности в отладке, работа с памятью. В EASTL они очень активно борятся с фрагментацией памяти. Кроме того, в EASTL память втихую от программиста не выделяется, пустые контейнеры места не занимают.

Интерфейс в EASTL постарались сохранить по максимуму такой же как и в STL. Удалось это не всегда, аллокаторы у них несколько отличаются от STL'евских. Кроме того, в EASTL есть контейнеры и алгоритмы, которых в STL нет.

Кроме скорости работы перечисляют специфические для разработки игр требования. Например, в играх редко используются исключния, поэтому в EASTL исключения легко отключить.

В конце текста приведена впечатляющая таблица сравнения производительности STL и EASTL.

Я тут привела очень краткий пересказ. На самом деле это довольно объемный и подробный документ. Там четко изложено что именно их не устраивало, какие в итоге были приняты решения, что именно им победить не удалось.

Если будут какие-нибудь свободно доступные реализации EASTL, интересно было бы их опробовать.

4 коммент.:

Анонимный комментирует...

Disclaimer: знакомый программист, долгое время работавший в EA lead programmer'ом, не знал о существовании EASTL. :) По его утверждению, в большинстве prev-gen проектов STL в каком-либо виде (EA или не EA) вообще не использовался. Вообще, в ЕА каждая команда вольна писать себе свой енжин. Хотя общий пул библиотек существует, он не обязателен к использованию.

Анонимный комментирует...

Зависит все от проекта. Когда ты пытаешься писать один код, который должен работать на 5 или 6 платформах, то ты точно будешь знать про ЕАСТЛ.

Анонимный комментирует...

Работал около года в EA Canada на большом проекте.
Про EASTL местные конечно слышали, но никто его практически не использовал. Во всем проекте всего лишь в паре мест.
Не использовали по причине незнания, т.к. квалификация программистов - ниже плинтуса. У нас у выпускников университетов знаний и то больше.
В результате получался ЖУТКИЙ говнокод, который нереально саппортить.
Поначалу волосы вставали дыбом - такое ощущение, что руководствовались они антипаттернами программирования - в проекте было все: от многократных копипастов, километровых свичей, кастования enumов в другие enumы, сложение индексов из разных enumов и получение по результату смещение в третьем массиве. Про отсутствие стейтмашины, отсутствие архитектуры, отутствие компонентности, жуткую связность кода я уже и не говорю.
Причем, такое допускали даже лиды направлений...
Вот так вот.
Единственное, что там было хорошо написано - это core-библиотеки, наподобие eastl и прочих - видно, что писали их профессионалы.

Konstruktor комментирует...

Не знаю будет ли смысл от этого комментария после стольких лет. Но вот вспомнил про EASTL, который вышел в опенсорс и решил портировать одну игрушечку, которая довольно сильно опирается на контейнеры STL, на EASTL. К моему удивлению никакой выгоды я не получил, а местами наоборот, например когда std::vector заменил. Но вполне может быть как-то неправильно ее использовал и есть нюансы. А может и STL у Microsoft за эти годы стал значительно лучше, например при переходе с VS 2005 на 2013 чуть ли не в два раза FPS скакнул.