Перейти к контенту

xStream

 Ветераны
  • Число публикаций

    375
  • Регистрация

  • Последнее посещение

  • Дней в топе

    1
  • AMKoin

    17 [Подарить AMKoin]

Весь контент пользователя xStream

  1. Для такого я делаю две вещи: 1) подключаю модуль самым первым ( ну или повыше), поэтому отказалась от идеи как у Саши просто кидать файлик - чуть больше контроля. 2) Там где надо я могу выстрелить еще один ивент, скажем on_post_take (после взятия) или on_pre_drop (перед удалением), ну или банально дропать, как предлагают ребята. Не суть как назвать - внутри события можно кинуть еще одно, и это решает вопрос о сложных зависимостях. Однако, не могу не согласиться с Сашей - лучше дисциплины ничего нет, легкие ограничения помогают выдерживать строгость проектирования и не позволять появляться ситуациям типа undefined behaviour. Удобно, но я чуть выше написала, почему так не сделала (помимо фала надо еще описание подключения), хотя была мысль. Скажем так - архитектурное решение. Все же один файлик подправить не страшно, а невозможность загрузить модуль не приведет к краху. Плюс, там можно определить как раз последовательность и зависимости модулей, тоже выше написала. Я делала так - отслеживала состояние объектов на выходе из колбека. Имею ввиду, которые подавались на вход. И если было что-то сделано фатальное (я переопределяла, например, метод release у алайфа), и не было остановки ивента, я кидала ворнинг. ЗЫ Сделала я это правда существенно позже, чем отдала ее в огсе, а потом было влом :-)
  2. @Malandrinus, в догонку к твоему шикарному описанию в контексте сталкера: становится возможным быстрое манипулирование модулями (что самоочевидно вытекает из концепции) - то, что столько непонимания вызывало в моих аи-схемах, например, - достаточно просто удалить или переименовать модуль, или закомментировать его подключение. (Кстати, поэтому я назвала систему песочницей - изоляция модулей и возможность "играться" ) Эта фича позволяет методом бинарного поиска быстро определить сбойный модуль, если что не так. Хотя это самый жесткач - система построена так, что при подключении модуля может дать предварительный лог, если модуль не подключился - мол айайай, проверьте синтаксис. Короче говоря: это еще и средство отладки (в нагрузку к проверке зависаний и прочему). @Dennis_Chikin, собственно речь о том и была - что хорошо бы людям прививать культуру кода, а не копипастить (вот Саша, к примеру жаловался, что так и не смог изжить АМКшный подход к таймерам и событиям) - все просто привыкли, а обучаться и лень и некому. Вот в ОГСЕ научились и вышло неплохо. Собственно к системам есть довольно подробные мануалы с десяток пунктов с примерами (да и самих методов у тех же сигналов 3-4 штуки - вот и весь интерфейс). Все очень просто. Другим колбекам даже не надо знать, что объект удалили - они просто не сработают.
  3. @FantomICW, но похоже. Я не говорю, что это плохо
  4. @KD87, отступы бы существенно помогли. А еще оно действительно делает не то, что написано в комменте
  5. Ненене, так низзя. Еще потому, что комменты не помогут сопроводить этот кусок кода в принципе - ну даже если сторонний человек посмотрит код, то толку не будет, ибо если не имеет представления с чем работает в принципе, то пшик. Если нетривиальное что-то, можно описать функцию/метод. В общем, все это остается на совести автора так или иначе.
  6. @Desertir, это называется call chaining. Это есть много где, если постараться и построить нормальный интерфейс.
  7. @Desertir, а мне, кстати, нравится (сам подход с декораторами, аггрегаторами и прочей приблудой). Пришерстить отступами и будет вообще шоколадно.
  8. А у нас на роёне это не миф. Да и вообще, я же там мелким ан нет, не мелким шрифтом написала: до тех пор, пока этого достаточно. В одном месте с меня требовали, например, описывать вплоть до блоков кода. А в другом всем было пофиг. И те и другие благополучно сопровождают проекты до сих пор. Ну вот собственно это нормальный пример, который на мой взгляд документирован слегка избыточно (ибо названия функций, но не полностью избыточно - из-за разношерстного интерфейса), но в целом все то, о чем и говорим. @Malandrinus, про хуки и хаки - само собой, это не относится к тривиальным вещам в принципе. @abramcumner, да, точно! Для меня быстро читается distance_between, а если ты не знаешь, что это и кто такие сталкеры, то тут не комментарии нужны, а ртфм
  9. Тоже в качестве лирики: у нас принято писать self-explaining код. Если появились комментарии, значит где-то код перестал быть тривиальным, и это тревожный звоночек. Это не значит, что их не должно быть: если логика нетривиальна или громоздка и это не исправить (а иногда просто незачем), они необходимы.
  10. Ненене, девидблейн Я это говорила не про луа. А про простую реализацию, которую я выкладывала. Она была очень упрощенной, потому и была "всевдо-ооп" - я хотела показать, что не так уж и сложно реализовать парадигму с помощью ЛУА.
  11. @Карлан, эм. Вы напрашиваетесь на нецензурный ответ, молодой человек. Это ваши половые трудности, что вы так реагируете на слова. А про все остальное уже уважаемый @Viнt@rь расписал. Просто пошло переливание из пустого в порожнее в который раз, да еще проявилась ущемленная гордость у кое-кого. Ректальный нагрев произошел. Так что к этому всему прибавить нечего - присоединяюсь к Назгулу. Не было никаких общих усилий и не было никакого "под себя". Но это все ерунда. Все началось с некоего персонажа, весьма резко высказавшегося в духе "вот хреново-то сделано было, а я д'артаньян - у меня крутяк". Собственно лично меня именно это немножко огорчило. А там дальше по накатанной понеслось: ЧСВ звездных величин, отсутствие знаний и возможности идти на компромиссы, когда закончились аргументы, то перешли на грамматику и словарный запас. Что примечательно, извинения не работают и каждый пытается учить остальных. Это нормально? Прошу заметить: лично я не хаяла, я задавала вопросы и высказывала мнение, которое всего лишь не было "толерантным". Что, в принципе, и вызывало ректум темпера. Спокойной ночи.
  12. Вот только не надо вот этого Были "непонятки", мы разобрались, я объяснила, что имела ввиду, а вот учить меня речи не стоит, право слово. Раз вы столь ревностный блюститель чистоты речи, то что же вы тюремный жаргон используете? Атата. Ну простите, что взрослая тетя пришла и поломала ваш куличик и попортила душевное равновесие. Разница в том, что, как я написала, я стараюсь доказать, аргументировать, почему мой... гм... куличик, лучше или отличается от других. Без категоричного "мой куличик лучше всех!". Разве нет? Более того, "нападая" на несчастных окружающих, я готова вытерпеть такое же "нападение": важно движение вперед, тут демократия не работает. Эм... Ок. Да, босс. ЗЫ Зная твою любовь к тому, чтобы последнее слово было за тобой, уступаю: ты белый и пушистый, я была неправа и все такое.
  13. Ну я не употребляла слово "плагиат" или "воровство". И я не говорила, что это плохо. Так что в позу богомола не стоит вставать. Мне не нравилось никогда твое стремление все сделать универсальным и я этого никогда не скрывала. Стиль программирования тоже не импонирует, но тут уж точно личное дело каждого. Более того, я признаю и даже спасибо скажу за то, что хоть так, но в массы пошло то, что действительно развивалось со временем, а не хромоножки. Спасибо. Акцентирую: натырил - напихал всего и вся, своровал - я не употребляла это слово. Ты всегда указывал авторов, никаких претензий. Это даже смешно Если я правильно поняла метафору, то... То вот: если грызут, то это отлично! Если грызут и хаят предшественников, на чьем труде учились - не айс. Если грызут и говорят, что их леденец круче и вкуснее, то пусть готовятся аргументировать и доказывать. И тут дело не вкуса даже. В программировании есть такое понятие, как эффективность (помимо читаемости, скорости кода, скорости разработки и т.п.). Так вот эту эффективность стоит доказывать, иначе будет то, из-за чего весь бор и пошел - вместо одной рухляди писать свой велосипед и называть его мотоциклом. Да ради Б-га! Но отстаивать надо. Как делали другие
  14. Вами любимый Артос, к примеру, но он сделал тоже то еще гм... Просто брал то, что делали другие и убивал часть идеи, но и на том спасибо - часть удобства доходила до конечных потребителей. Хвалить надо тех, кто сделал то, что он натырил Тогда какие еще могут быть вопросы то? Вот оно - удобное, а то что здесь, гм...
  15. Тыкали. Неоднократно. Но видимо там слишком сложно с интрукцией и примерами. То же самое - новомодному сто лет в обед. Даже у Артоса, которого так хвалишь, благополучно затырены в мод все эти вещи. Поняла, но есть такая штука, как сарказм
  16. Это означает, что выкинуть это "вот так" вообще в принципе И это не зависит от года. Твой лисапед не сильно от этого отличается. Системы ивентов - всего лишь один файл! О.Д.И.Н. с более менее внятными примерами. И для его работы напрочь не нужно "вот так". Естественно. На земле дерьмокода и так тысячи
  17. , то есть, если на фоне существующих решений, решение кажется не айс, то эти существующие нельзя как вариант приводить? Обязательно очередной лисапед? А я считаю, что те, кто написал такие же велосипеды, имеют право критиковать - опыт есть. Это что за системы такие? Если вы про высокоуровневые, то у меня для вас плохие новости: вы повторяете путь тех, кто прошел "эволюцию" несколько лет назад, выдаете такие же решения, и при этом говорите, что костыльного типа решения (один в один как те, олдскульные и якобы непригодные) - айс, а получше и поэффективнее - фигня. Удачи, чо Как вы смеете это использовать?! Это же суперсистема! Тогда чего это конкретно то, что тут предлагается, нужно принимать с радостью и уважением? Про бритву Оккама слышали?
  18. То есть обсуждать и критиковать в принципе не разрешается?
  19. xStream

    C++

    Плакать и истекать кровью? Процессору и памяти все равно, что там они хранят или считают. Первая и главная причина появления динамических библиотек (это ведь не только в винде так, но и юнихах с линухами) - экономия памяти, но не памяти одного экзешника, а всей системы в целом. Представь себе веб сервер, на нем крутится апач, на каждый хит (на самом деле все зависит от настроек, но я буду описывать так - это нагляднее) создается дочерний процесс, который например тянет пхп интерпретатор. Так вот, если апач-процесс - это нормально, многопоточность и раздельные ресурсы и так далее, то пхп-интерпретатор один, вот он и существует в виде библиотеки. Например, весит он 6Мб (версия 5.4 столько весит), потом сам пхп подключает туеву хучу расширений - опять же в виде длл (1-30Мб). Так вот, по идее на каждый апач-процесс должно быть несколько экземпляров пхп (по количеству изолированных нитей выполнения), сам пхп - по пачке расширений (количество расширений помножим на количество пхп). Без длл это было бы очень много - под пару гигов оперативки, что очень расточительно. При использовании длл, каждая из них (будь то пхп или его расширения) загружается в память всего один раз, что дает всего под сотню метров оперативки. Чувствуется разница? Не совсем так. Он создает код для автоматической загрузки библиотеки и импорта имен библиотеки в пространство программы (инклюдит .h файлы). Можно любую динамическую либу загрузить программно после запуска программы в любой момент, просто использовать код, который обращается к ней до этого нельзя, да и банально не выйдет. Так же некоторые неудобства получаются с именованиями - все приходится ручками делать, так как автоматического импорта не происходит.
  20. Нет, это просто разные понятия ... о! можно попросить словарик? Ну какая у тебя терминология. А то постоянно ты непонят остаешься. Сие к таймерам ну никак не относится.
  21. xStream

    C++

    Шта, простите? .h - заголовочные файлы с объявлениями, .c & .cpp - файлы имплементации, то бишь реализации собственно сама логика, код. И то и другое - исходный код. .lib - это файлы библиотек для компоновки результата. Используется в случае и статической и динамической линковки. По сути - промежуточные файлы, нужные линкеру (иногда компилятору, но сами являются результатом работы компилятора) .exe и .dll - файлы, содержащие исполняемый код. Екзешники самостоятельны, имеют точки входа, дллки тоже могут иметь точки входа, но не являются самостоятельными сущностями в ОСи. В случае статической линковки, в .lib файле собирается полностью исходный код и встраивается в тело программы, в случае динамической, в .lib файле собираются определения того, какая динамическая библиотека используется и адреса функций и методов классов, что позволяет основной программе использовать содержимое динамической библиотеки в своих целях. Зачем нужны динамические библиотеки - отдельный вопрос. Ну как минимум в случае сталкера такие дллки сделаны потому, что и игра и редактор используют одни и те же классы и дефиниции, чтобы не дублировать код, его и вынесли в отдельные либы. Это в общем-то какой-то бессмысленный набор слов @Desertir, Собсно я выше расписала. Да, нет такого понятия. И переносить просто бессмысленно. Не только и не столько. Это делается еще и для распространенных библиотек - библиотека единожды загружается в память, а использоваться может разными программами. Что и память экономит и универсализирует интерфейс. Пример таких библиотек, пресловутые msvcxxx.dll библиотеки, они используются программами, написанными в разных версиях визуалстудии от мелкомягких. Для программистов может быть еще одна причина важна, которую я написала выше. Не совсем. Опять же на примерах: библиотеки могут предоставлять одинаковый интерфейс, но реализовывать разный функционал, ядру же (программе) пофиг, как там работает библиотека. В случае сталкера - рендеры, они подгружаются в зависимости от настроек программы, но коду ядра совершенно все равно, какой рендер сейчас подключен.
  22. Мы уже выяснили, что есть сложности с формулировками Таймер - нечто, позволяющее выполнить какое-либо действие через минимальное определенное время © Примерно так. Каким образом это нечто функционирует, вопрос реализации. И тут самое интересное - как не извращайся, количество проверок на такие события не изменится. Другое дело интерфейс. Я за удобство, а быстрее работать заставить вряд ли выйдет. Точнее не так - ресурсов использовать меньше. Все ветвления и "медленные" обработчики делаются опять же разными способами, не меняя сути в принципе.
  23. @Desertir, я тоже не очень понимаю. ------ Подводя итог: Dennis_Chikin возмущен реализацией. Вот и весь сказ. По сути, реализация амк - это polling с перебором по условиям. Сигнальная система - это события по сигналам (на самом деле где-то тоже идет polling, но централизованно и скрыто) Можно реализацию polling'а разнести по объектам-"носителям" (а-ля, сталкер, аномалия и т.п.) - на их апдейты. Суть на самом деле не особо то и меняется (кроме только того, что актор всегда онлайн). Опять же, как итог: как ни реализуй систему срабатывания чего либо по временным засечкам, количество кода, который будет исполнятся, останется тем же. Приоритезирование задач может помочь, но сам принцип приоритетов не зависит от исполнения. Самым удобным с моей точки зрения является event-driven модель - намного меньше макаронного кода, проще интерфейсы и более-менее инкапсуляция.
×
×
  • Создать...