Минутка ненависти к STL

Submitted by BLK Dragon on

Комментарии

К сожалению в "корневых" библиотеках содержатся ошибки или их использование совместно с другими библиотеками ограничено. Поэтому все всегда стараюсь иметь в исходниках. Тем более что скорость сборки проектов c++ значительно ускорилась при использовании SSD дисков. У самого был случай, когда человек ради работы с файлами использовал boost. Как говорится в муху из ракеты.

А если вы профессионально работаете (по постам 200%, что да), то просто можно элементы из STL включить в свой набор проверенных классов (core на базе которого ведется разработка).

Submitted by Necro on
Necro wrote:

можно элементы из STL включить в свой набор проверенных классов (core на базе которого ведется разработка).

Так всякие "стл-подобные" штуки конечно есть в Core (и попытки использовать какой-нить std::vector или std::map пресекаются на корню), с этим особо проблем нету.

Вот внешние библиотеки время от времени такие сюрпризы преподносят. Помнится долго и занудно вырезал всякий мусор из исходников зависимостей COLLADA, чтобы оно взлетело на PSV/PS3 (viewer моделек).

Submitted by BLK Dragon on
А как убедить человека (к сожалению, он лид) хотя бы не использовать буст? Smile Для наших проектов - это уже не пушкой по воробушкам, а ядерной боеголовкой по мухам. "У меня большой опыт уже и мы давно его используем и отказываться от него уже не будем, а если и будем, то перетянем к себе все то, что там используем" - стабильная фраза на вопрос "а нах... он нам нужен?". Я вот до сих пор не могу понять, чем так людей пленяет шаредптр?! Неужто это такая большая проблема освободить самому?
Submitted by MaxImuS on
MaxImuS wrote:
А как убедить человека (к сожалению, он лид) хотя бы не использовать буст?

Никак.

Ну т.е. единственный рабочий способ -- зашипить игрулю на консоли. Тогда "внезапно" и std::map ( std::string, something ) тормозить начинает и бусто-хрени проблемы на компиляции и на рантайме вызывают.

Ещё одна большая проблема стл-бустов -- читать сложно. Ну вот тупо быстрее разобраться в банальном цикле по поинтерам на 5 строчек, чем в двух строчках с какими-нить функторами.
Но прелесть быстрого разбирания кода опять же понимаешь только когда начианаешь ковырять кодобазы на пол-миллиона строчек кода.
Или когда портируешь чужой код на другую платформу. У меня как раз недавно был опыт с двумя проектами, один написан "по-простому" а другой со всякими наворотами типа делегатов и прочим. Первый без особых проблем взлетел на пс3 за пару недель, второй я с матами забивал в виту -- компилер глючил на генерации кода с exceptions/RTTI и пару раз был в идиотской ситуации когда на текущей версии СДК оно не работало, а с новой версй СДК не работало железо (тогда ещё прототипы девкитов были). Мораль басни -- писать simplest thing that works (не путать с наивным подходом); в этом плане shared_ptr явно не простейшая рабочая реализация, плюс в сложных случаях может так выстрелить в ногу, что ого-го.
Submitted by BLK Dragon on
Итак для чего нужен boost? Этот монстр шаблонов нужен для качественной абстрактной разработки на С++. Если по проще представьте вы делаете igame, у неё есть iresource, за события в ней отвечает iscript и написана ifunctional design document, по которой ведется разработка, неким iarchitector. Т. е. для качественного прототипирования. А теперь спросите себя вы делаете igame или конкретную игру?
Submitted by Necro on
Necro wrote:
Итак для чего нужен boost? Этот монстр шаблонов нужен для качественной абстрактной разработки на С++. Если по проще представьте вы делаете igame, у неё есть iresource, за события в ней отвечает iscript и написана ifunctional design document, по которой ведется разработка, неким iarchitector. Т. е. для качественного прототипирования. А теперь спросите себя вы делаете igame или конкретную игру?

Качественное прототипирование и буст как-то слабо связаны. Прототип, вообще то, должен делатся быстро, а не качестенно. Типично в прототипах самый говнокод из говнокода, и это нормально -- всё равно потом выбрасывать/переписывать.

Буст, по задумке, должен как бы добавлять в С++ "отсутствующие фичи" типа лямд (ну не поддерживались они раньше компилирами) и прочего.
Главная проблема буста -- там ну просто ДОФИГА кода. Х с ней с компиляцией (хотя тут даже ССД не спасает в запущенных случаях), проблема в чтении кода юзающего все эти шаблонные выверты. Т.е. нужно знать все эти мегашаблоны и как они себя ведут друг с другом. С учётом того, что каких то мега-полезностей буст не добавляет в случае геймдева, знания излишние (а джуниоры так и вообще не знают).

Т.е. я вот в-принципе могу выпиливать лобзиком по шаблонам достаточно неплохо, но в продакшн коде избегаю излишних заумностей -- не только потому что оно под консоли должно работать, но и потому что другие люди должны быть способны читать и можифицировать код (и не все читают Александреску на ночь, ага).
Submitted by BLK Dragon on
Я просто хочу подчеркнуть, что есть секта разработчиков языка. Александреску у них там не на последнем месте. Они "делают" язык привнося в него много нового. Делают они именно прототипы кода. Т. е. boost результат работы большого количества гуру. Он мне как разработчику дает возможность полностью писать максимально абстрактный не увязанный на платформу, на типы код. Считается, что это вершина объектно ориентированного подхода в С++. Очень многие вещи в boost пересекаются с C#, кстати. Я бы сказал С++ + boost - объектноориентированный язык на котором можно качественно реализовывать прототипы приложений, алгоритмов, паттерны программирования и т. д.. У нас для робототехники именно в роботе в бортовом компьютере с ограниченными ресурсами использовать boost не рекомендуется. На счет игр считаю, что Вы абсолютно правы как эксперт в этой области.
Submitted by Necro on

GameDev.by