Boost.Mixin

Всичко за програмирането на игри - архитектура, графика, звук, изкуствен интелект, мрежи.
Потребителски аватар
stoiko
Power User
Power User
Мнения: 617
Регистриран: 04 дек 2003 15:44
Контакти:

Re: Boost.Mixin

Мнение от stoiko » 14 ное 2013 10:24

pdimov написа:Не съм много сигурен с какво сравняваш. Предполагам с твоята собствена?
с торба указатели например. в играта която пиша в момента обекта е M*N.
pdimov написа:Но на потребителите на библиотеката хикс и игрек все някога ще им потрябват, съответно постепенно простичката ти библиотека ще стане "ненужно" сложна.
а ако не ми потрябват никога, а вмесо това ми трябва зет? звъня на боби? пренасям черен козел в жертва на бярне?

Stilgar
Power User
Power User
Мнения: 824
Регистриран: 12 яну 2006 22:15
Контакти:

Re: Boost.Mixin

Мнение от Stilgar » 14 ное 2013 11:16

M+N не е ли сериозна далавера?

pdimov
gosu
gosu
Мнения: 871
Регистриран: 02 дек 2003 01:04

Re: Boost.Mixin

Мнение от pdimov » 14 ное 2013 12:13

stoiko написа:а ако не ми потрябват никога, а вмесо това ми трябва зет?
Значи библиотеката не само не е ненужно сложна, но не е достатъчно сложна?

Така или иначе, това е аргумент срещу ползването на каквито и да е библиотеки. Няма как нещо готово да включва само зетовете, които са необходими конкретно на теб.

Потребителски аватар
stoiko
Power User
Power User
Мнения: 617
Регистриран: 04 дек 2003 15:44
Контакти:

Re: Boost.Mixin

Мнение от stoiko » 14 ное 2013 12:52

pdimov написа:Значи библиотеката не само не е ненужно сложна, но не е достатъчно сложна?

Така или иначе, това е аргумент срещу ползването на каквито и да е библиотеки. Няма как нещо готово да включва само зетовете, които са необходими конкретно на теб.
Не не, това е аргумент срещу точно тази библиотека, защото за разширяването и трябва или ти да си полубожество, или да се молиш на някое друго такова да ти я разшири.
M+N не е ли сериозна далавера?
зависи. за мен, по-скоро не.

zah
New User
New User
Мнения: 4
Регистриран: 09 ное 2013 18:21
Контакти:

Re: Boost.Mixin

Мнение от zah » 14 ное 2013 14:06

Както Стойко сам каза, правилният начин да се измерва сложността на софтуера е да се
разглежда сложността на control flow-a в програмата (включително сложните взаймодействия
между различните подсистеми) и да се вземе в предвид богатството от състояния в които могат
да бъдат структурите от данни (затова някои хора казват, че immutable езиците са по-прости).

По тези показатели boost.mixin е изключително прост. Ако Боби добави една страница в документацията
в която се описват структирите от данни, сигурен съм, че повечето от вас лесно ще могат да си
представят какво прави библиотеката алгоритмично. В крайна сметка всичко което се случва е да се
алокира малко памет и да се попълнят няколко таблици с пойнтъри към функции.

Когато наричаме една библиотека сложна, защото сме незапознати със C++ приомите, които се ползват,
това е все едно да наричаме Френския език по-сложен от Българския, защото не можем да го четем.
Тук това даже е само лирично отклонение, защото boost.mixin дори не е толкова сложен като C++
хватки - както казах, правят се само type erasure трикове подобни на std::function [1] и се регистрират
типове и message-и на централизирано място, което им дава номера и поддържа помощна информация за тях.

Например, как можем да дадем пореден номер на всеки тип от програмата ни, който е използван като компонент?
Отговора е прост, функции като get<T>() използват вътрешно темплейтна статична променлива TypeID<T>::Value,
която може да е дефинирана така:

Код: Избери всички

template <class T>
int TypeID<T>::Value = RegisterType<T>(typeid(T).name()); // RegisterType ползва глобален брояч
Ако се зачетете в имплементацията, можете дори да намерите някой полезен C++ трик за личните си проекти.

[1] http://zao.se/~zao/boostcon/10/2010_pre ... ostcon.pdf

Потребителски аватар
haho
Power User
Power User
Мнения: 999
Регистриран: 07 дек 2003 21:52
Местоположение: България
Контакти:

Re: Boost.Mixin

Мнение от haho » 14 ное 2013 17:37

iboB написа:Да, има код, генериран от макросите, който става част от твоя, ама какво ти пука какъв е? Защо ще го дебъгваш?
Защото ти(автора на макроса) допускаш бъгове. Хващал съм много бъгове в енджини за милиони :), никой не е перфектен

Потребителски аватар
iboB
Power User
Power User
Мнения: 113
Регистриран: 09 фев 2006 13:36
Местоположение: София
Контакти:

Re: Boost.Mixin

Мнение от iboB » 14 ное 2013 17:51

haho написа:
iboB написа:Да, има код, генериран от макросите, който става част от твоя, ама какво ти пука какъв е? Защо ще го дебъгваш?
Защото ти(автора на макроса) допускаш бъгове. Хващал съм много бъгове в енджини за милиони :), никой не е перфектен
И след това допълних
iboB написа: Естествено, че може има бъг, който е преминал през всички тестове. При такава ситуация следва да се дебъгва. Това ще е трудно. Но това ще е много рядко. Все пак библиотеката в момента се ползва в жив проект и работи. И твърдя, че тази трудност на дебъгване е цена, която си залужава да се плати на фона на ползите от библиотеката.
Библиотеката може да е толкова бъгава, че даже и най-малкия опит да се ползва, ще доведе до един тон крашове и ще трябва да се дебъгва. Ако това е вярно, няма смисъл да се ползва, даже и да е рай за дебъгване. Ако не е вярно, бъговете, ако ги има, ще са рядкост и това да експанднеш някой-друг макрос ръчно (под 10 минути на макрос), ще си струва на фона на ползите, които ще получиш.

Аргументът с макросите тотално не ме кефи. Да, лоши са в С++. Да С++ не е много приятен език за подобно нещо. Да, неизбежни са. Нямат алтернатива за тази ситуация. Това религиозно да проклинаш макросите, само защото са макроси (или goto) е глупаво. Понякога вършат работа, която иначе няма как да се свърши.

Ако библиотеката беше с нула макроси, щяхте ли да кажете, че е най-великото нещо след нарязания хляб? :)

Потребителски аватар
haho
Power User
Power User
Мнения: 999
Регистриран: 07 дек 2003 21:52
Местоположение: България
Контакти:

Re: Boost.Mixin

Мнение от haho » 14 ное 2013 18:02

Библиотеката е хубава и наистина подобна библиотека съзнателно или несъзнателно е имплементирана в почти всяка игра.

Потребителски аватар
themean
Power User
Power User
Мнения: 860
Регистриран: 02 дек 2010 22:51

Re: Boost.Mixin

Мнение от themean » 14 ное 2013 18:27

iboB написа:Аргументът с макросите тотално не ме кефи. Да, лоши са в С++. Да С++ не е много приятен език за подобно нещо. Да, неизбежни са. Нямат алтернатива за тази ситуация.
Е чак да няма :). Има и други средства за генериране на код, от Qt ползват moc за целта. Разбира се ако ползваш такава техника библиотеката ти може само да си мечтае за boost, но пък ти ще имаш много по-добър продукт.

Потребителски аватар
iboB
Power User
Power User
Мнения: 113
Регистриран: 09 фев 2006 13:36
Местоположение: София
Контакти:

Re: Boost.Mixin

Мнение от iboB » 14 ное 2013 18:45

Ако знаеш пък колко хора хейтят Qt, заради moc.

Но, мислил съм си за custom препроцесинг тул, между другото. Точно същото. Обаче почти всеки ще се откаже да я ползва, заради сложността да я интегрира. Трябва да съм много голям и силен, за да мога да изисквам от хората нещо подобно. Не съм nokia :) А и, наистина, това автомагически би я отписало от boost и би и направило шансовете и да стигне до много хора незначителни.

Все пак това не е абсолютно изключено. Даже и макросите да останат, ще е относително лесно да се напише тяхна алтернатива, която генерира bmoc :) файлове за тях, особено след като неободимият код за генериране е доста по-прост от това, което прави Qt

Потребителски аватар
themean
Power User
Power User
Мнения: 860
Регистриран: 02 дек 2010 22:51

Re: Boost.Mixin

Мнение от themean » 14 ное 2013 18:59

Според мен moc е гениална идея пък и не е толкова трудно за интрегриране, един пребилд степ и си ти.
Според мен трябва да го пробваш, с него нещата могат да станат чисти, елегантни и ще може да се дебъгва :) пък майната му на бууст, така или иначе повечето хора се изприщват като чуят за него.

Потребителски аватар
iboB
Power User
Power User
Мнения: 113
Регистриран: 09 фев 2006 13:36
Местоположение: София
Контакти:

Re: Boost.Mixin

Мнение от iboB » 14 ное 2013 19:22

Ако се откажа от boost обричам библиотеката на obscurity. Няма как да стигне до много хора, без нещо популярно зад гърба си (то би могло да бъде и автора, но аз не съм нещо особено популярно). Особено, при положение че прави неща, които не се намират лесно с гугъл търсене и не са подходящи за малки проекти.

Иначе смятам да направя bmoc, както и standalone non-boost версия на библиотеката, най-вече защото е доста просто да се направи. Просто не ми е нагоре в приоритетите за сега.

zah
New User
New User
Мнения: 4
Регистриран: 09 ное 2013 18:21
Контакти:

Re: Boost.Mixin

Мнение от zah » 14 ное 2013 19:43

Само да отбележа, че предишното ми мнение беше постнато сутринта и трябваше да бъде отговор на коментара на Стойко за нуждата от полубожества при поддържането на библиотеката.

За макросите ви съветвам все пак да пробвате библиотеката и да прецените доколко са проблем. Освен явните недостатъци обсъждани тук, макросите все пак имат и предимства като например това, че step-in операцията ще премине през целия dispatch код само с една единствена стъпка. В Masthead често ми се е налагало да помагам на колеги при проблеми с вътрешните библиотеки и практиката показва, че точно тези макроси рядко са били повод за трудности. По-реалният проблем, който библиотеката създава при дебъгване идва от динамичната природа на обектите, която прави използването на watch прозорците в debugger-a малко по-неудобно (дори след като е написан специален визуализатор за целта).

SuryIIID
Power User
Power User
Мнения: 431
Регистриран: 01 яну 2004 21:03
Местоположение: София
Контакти:

Re: Boost.Mixin

Мнение от SuryIIID » 14 ное 2013 22:57

Аз бих приветствал едно такова разграничаване от boost.
Без съмнение, това само по себе си не дава никаква смислена информация -
1. Дали искам да завардя този микс-ин от накити от кълбото косми, наречено boost, гдето люспести пипала ще обвият в заплетена тъма изумрудени концепции.
2. Или да браня шедьовъра boost и виртуозният му код от суетливи буренаци, никнещи на завет в исполинската сянка на този колос.

А иначе, наистина можеш да опиташ да вървиш и по двата пътя - със и без boost. Чувал съм, че доста хора го избягват.

Потребителски аватар
iboB
Power User
Power User
Мнения: 113
Регистриран: 09 фев 2006 13:36
Местоположение: София
Контакти:

Re: Boost.Mixin

Мнение от iboB » 15 ное 2013 00:00

Не смятам че boost e шедьовър, просто защото boost не е едно нещо. Това е колекция от (относително) независими библиотеки. Намирам че някои от тях са супер яки, а за други се чудя дали са сериозни или гавра с езика, която даже и авторът и не би си помислил да ползва в истински проект (гледам към теб, spirit)

Това да отбягваш boost, заради boost пак ми се вижда лоша идея.

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

Сега какви са причините, които съм чувал някой да отбягва boost:

1. Обвързва се с един тон bloatware: Това не е (съвсем) вярно. Повечето библиотеки са лесни за обособяване. Необходимо е относително малко ядро. В момента по проекта, по който работя ползваме девет boost библиотеки, три от които са заради зависимости. Девет от колко? 50? Ако не ползвахме С++11, щяхме да ползваме още две. Ползите от тези библиотеки са огромни.

2. Обвързва се с obscure сложен за четене дебъгване код, който му дава безумни компилационни грешки: За съжаление много от хората, които избягват boost заради това, ще намерят че Mixin притежава същите черти. Кодът отдолу може да се види доста хм... неортодоксален за някой, който не е вещ С++ специалист. Наистина тази библиотека не е толкова краен случай, колкото други, но все пак не е и "земи това апи и си го викай"

3. ??? Нещо изпускам може би

4. А, и естествено ред глупави причини, които показват тотално неразбиране и с които няма как да се спори.

Не виждам смисъл да влагам особени усилия в неboost версия на този етап. Ако стане част от колекцията и съответно хиляди хора я видят (и харесат?), може би ще си струва да се направи така. Може би най-вече заради custom препроцесора, за който говорихме нагоре.

Потребителски аватар
themean
Power User
Power User
Мнения: 860
Регистриран: 02 дек 2010 22:51

Re: Boost.Mixin

Мнение от themean » 15 ное 2013 10:40

Първо в никакъв случай не го къщавай bmoc, къде къде по-добре звучи mixinator да речем и второ дори и да успееш да си бутнеш библиотеката в бууст тва не ти гарантира че ще стане популярна.
Ама ако направиш някви много яки приложения , които ползват библиотеката и те самите станат много популярни, това ти гарантира добри шансове на библиотеката (е аз така си мисля де :) )

Отговори