Здравствуйте, Shmj, Вы писали:
S>Как вы относитесь к этой библиотеке и примененному там подходу: https://github.com/CrowCpp/Crow
относительный минус одного огромного файла — некоторые IDE плохо с такими работают, начинают дико тормозить, не могут найти место в файле, когда пытаешься перейти к определению функции. Например, XCode такая.
Но так как это библиотека, работать напрямую с этим файлом ты не будешь, так что минусов нет
Шымж, кончай спамить, а. Есть конкретные вопросы — пиши. И уж будь добр больше контекста давай в своих сообщениях, а то ты все разделы форума захламляешь всякими рандомными вопросами. Вот конкретно тут: напиши, что ты ищешь; что смущает в этой либе; не можешь подключить — так и напиши; есть вопросы в производительности — так и спроси; какой подход тебя интересует; сам что думаешь.
Ну короче, твои посты кажутся написанными ботом. Я абсолютно не уверен, что ты все это через себя пропускаешь. Спамишь как из пулемета, блин.
Патриот здравого смысла
Re[2]: Когда пишут все в заголовках - в чем минусы?
Здравствуйте, wl., Вы писали:
wl.>Но так как это библиотека, работать напрямую с этим файлом ты не будешь, так что минусов нет
Минус в скорости сборки.
Минус может быть только один — объем транслируемого кода.
А так я вижу одни плюсы.
Например, SQLite — прямо в виде исходных кодов прямо в твой прогу включается, и она становится совершенно независимой от наличия SQLite у заказчика.
unit-тестирование с doctest — это класс!!!
Пока народ сочинял всякие проги/библиотеки для этого — я нифига не пользовался.
А сейчас — — блеск, инклуд написал, и пиши себе тесты по самые помидоры.
Я вот предпочитаю именно такой подход и стараюсь разыскать либу подобного типа для разных работ.
Это же сродни пакетам в Go.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[4]: Когда пишут все в заголовках - в чем минусы?
Здравствуйте, Shmj, Вы писали:
S>Почему метод process_tasks реализован в заголовочном файле а не как обычно в cpp?
ну, так проще подключить этот код в свой проект.
кроме этого особых преимуществ я не вижу, остаются только недостатки.
по большому счёту, это личные предпочтения автора кода.
никакого скрытого мегазамысла в этом нет.
Здравствуйте, Shmj, Вы писали:
S>Как вы относитесь к этой библиотеке и примененному там подходу: https://github.com/CrowCpp/Crow
S>?
Минусы:
1) Время компиляции (и время отдельной единицы трансляции у пользователя библиотеки, и необходимость пересборки всего, при внесении изменений в код библиотеки).
2) Раздувание результирующего кода (клонирование тела inline функций).
3) Нарушение изоляции (инкапсуляции).
Плюсы:
1) Простота распространения/подключения.
Пока проект маленький — плюсы перевешивают, но с ростом проекта (с ростом числа таких библиотек) — минусы растут быстрее чем линейно, в отличии от плюса.
Нормально если это редко обновляемые библиотеки (извлекли из git-а, и живем с одной версией библиотеки, до выпуска следующего релиза).
Совсем плохо, если эта библиотека — ваша корпоративная (т.е. изменения в нее вносятся регулярно).
Эти изменения начинают заметно тормозить всех пользователей, даже если улучшения не меняют интерфейс библиотеки.
Здравствуйте, Shmj, Вы писали:
S>Когда пишут все в заголовках — в чем минусы?
На этот вопрос ты без труда мог бы найти ответ самостоятельно — если бы хотел, конечно.
S>Как вы относитесь к этой библиотеке и примененному там подходу: https://github.com/CrowCpp/Crow?
А в теле сообщения у тебя вообще другой вопрос — не тот, что в заголовке.
Все это указывает на то, что, скорее всего, ответы на вопросы тебя мало интересуют, ты просто заскочил потрындеть мимоходом.
- Как Вы относитесь к этой библиотеке?
— А Вы из какой газеты?
--
Не можешь достичь желаемого — пожелай достигнутого.
Здравствуйте, Chorkov, Вы писали:
C>2) Раздувание результирующего кода (клонирование тела inline функций).
Вроде бы уже давно inline -- это всего лишь указание компилятору на то, что нет нарушения ODR в результате включения одного заголовка в несколько единиц трансляции. Будет ли реальная подстановка тела в место вызова решает компилятор и, возможно, линкер.
C>3) Нарушение изоляции (инкапсуляции).
А это как?
Re[3]: Когда пишут все в заголовках - в чем минусы?
Здравствуйте, so5team, Вы писали:
S>Здравствуйте, Chorkov, Вы писали:
C>>2) Раздувание результирующего кода (клонирование тела inline функций).
S>Вроде бы уже давно inline -- это всего лишь указание компилятору на то, что нет нарушения ODR в результате включения одного заголовка в несколько единиц трансляции. Будет ли реальная подстановка тела в место вызова решает компилятор и, возможно, линкер.
Так, но если определение функции доступно в данной единице трансляции, то вероятность что она будет встроена — выше.
Если функция недоступна — то ниже. Если LTCG отключен, то точно не строит.
C>>3) Нарушение изоляции (инкапсуляции).
S>А это как?
Тут два аспекта:
1) Многие библиотеки мусорят в глобальное пространство имен. Возможны конфликты.
2) Если реализация видна пользователю "насквозь", то велик соблазн вызвать, например, вызвать функцию из `namespace private`.
Если детали реализации лежат в отдельных заголовочных файлах, которые недоступны для #include из стороннего кода — то такая вероятность сильно снижается.
Re[4]: Когда пишут все в заголовках - в чем минусы?
Здравствуйте, Chorkov, Вы писали:
S>>А это как?
C>1) Многие библиотеки мусорят в глобальное пространство имен. Возможны конфликты.
Понятно. Отмечу лишь, что не могу вспомнить header-only плюсовые библиотеки, которые бы не использовали пространств имен.
C>2) Если реализация видна пользователю "насквозь", то велик соблазн вызвать, например, вызвать функцию из `namespace private`.
Это уже из категории ССЗБ.
Re[5]: Когда пишут все в заголовках - в чем минусы?
Здравствуйте, Shmj, Вы писали:
S>Почему метод process_tasks реализован в заголовочном файле а не как обычно в cpp?
Это один частный файл, остальное это шаблон на шаблоне. Я думаю автор просто хотел header-only либу сделать.
Sic luceat lux!
Re[6]: Когда пишут все в заголовках - в чем минусы?
Здравствуйте, Kernan, Вы писали:
K>Здравствуйте, Shmj, Вы писали:
S>>Почему метод process_tasks реализован в заголовочном файле а не как обычно в cpp? K>Это один частный файл, остальное это шаблон на шаблоне. Я думаю автор просто хотел header-only либу сделать.
А что мешает с шаблонами применять стандартный механизм разделения на декларацию в заголовках и определение в cpp-файлах? Или вы просто не знаете как это записать?
Здравствуйте, rg45, Вы писали:
R>А ты еще более безмозглый, чем я думал R>Исчезни отсюда, пожалуйста. Тебе что, других форумов мало?
У нас принято даже при глупости собеседника — не опускаться до перехода на личности а давать исчерпывающий детальный ответ даже на глупый вопрос, как бы обличающий оппонента, чтобы всем все стало понятно. Я достаточно детально ответил на ваш вопрос?
Re[5]: Когда пишут все в заголовках - в чем минусы?
Здравствуйте, Shmj, Вы писали:
S>Здравствуйте, Kernan, Вы писали:
S>>>Думаю сам так писать, почему нет? Зачем плодить сущности? K>>Там же шаблоны везде. Как ты их в cpp запихаешь?
S>Тут не в шаблонах дело а именно целенаправленны отказ от cpp-файлов. Для примера: https://github.com/CrowCpp/Crow/blob/master/include/crow/task_timer.h
S>Почему метод process_tasks реализован в заголовочном файле а не как обычно в cpp?
А как ещё ты будещь отмазываться, что ты вместо работы в ютюбчике медитируешь, как не долгой компиляцией?
Спасибо за внимание
Re[2]: Когда пишут все в заголовках - в чем минусы?
Здравствуйте, rg45, Вы писали:
LVV>>unit-тестирование с doctest — это класс!!!
R>Есть еще такого же плана Catch2. Я пользовался, мне понравилось.
Пользовался обоими. ЕМНИП, Catch2 содержит больше фич, но не идет ни в какое сравнение по скорости компиляции: doctest уделывает Catch2 в легкую.
Но для простых тестовых кейсов переход с Catch2 на doctest практически безболезненный.
R>Правда вот по ссылке пишут что "Catch2 v3 has been released" и что теперь это не header-only.
Так и есть
Re[3]: Когда пишут все в заголовках - в чем минусы?
LVV>>unit-тестирование с doctest — это класс!!! R>Есть еще такого же плана Catch2. Я пользовался, мне понравилось.
Собственно, я начинал с Catch/
Прочитал про нее у Евгения Охотникова.
Тут же состряпал лабу по ООП для студентов.
Потом по ее мотивам сделал наш пацан doctest, которая побыстрее транслируется. R>Правда вот по ссылке пишут что "Catch2 v3 has been released" и что теперь это больше не header-only. И это очень грустно, приходится признать.
Ну, тогда просто надо перейти на googletest — а я все никак не соберусь.
doctest проще.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[4]: Когда пишут все в заголовках - в чем минусы?
Здравствуйте, LaptevVV, Вы писали:
LVV>Ну, тогда просто надо перейти на googletest — а я все никак не соберусь. LVV>doctest проще.
Я перешёл на googletest с Microsoft-овского фрейворка. Преимущество в том, что он нативно поддерживается и Студией (распихивает результаты по Test Explore-у) на равне со своим "родным" NUnit и CMake-ом. А так как у меня сейчас вся разработка стала кроссплатформенной, это очень удобно.
Re[4]: Когда пишут все в заголовках - в чем минусы?
Здравствуйте, LaptevVV, Вы писали:
LVV>Собственно, я начинал с Catch/ LVV>Прочитал про нее у Евгения Охотникова. LVV>Тут же состряпал лабу по ООП для студентов. LVV>Потом по ее мотивам сделал наш пацан doctest, которая побыстрее транслируется.
Эмм, простите за занудство, но во всей публичной информации о Viktor Kirilov указано Sofia, Bulgaria — работа, университет.
Не думаю, что он из России.
Re[7]: Когда пишут все в заголовках - в чем минусы?
LVV>>Не, не мой. Просто он российский. И молодой. PM>Эмм, простите за занудство, но во всей публичной информации о Viktor Kirilov указано Sofia, Bulgaria — работа, университет. PM>Не думаю, что он из России.
Да и бог с ним.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[7]: Когда пишут все в заголовках - в чем минусы?
Здравствуйте, PM, Вы писали:
PM>>>Это вы про https://github.com/doctest/doctest, и https://github.com/onqtam ваш пацан? В смысле из https://astu.org? LVV>>Не, не мой. Просто он российский. И молодой.
PM>Эмм, простите за занудство, но во всей публичной информации о Viktor Kirilov указано Sofia, Bulgaria — работа, университет. PM>Не думаю, что он из России.
Вроде бы он сам про себя говорит, что из Болгарии:
Здравствуйте, LaptevVV, Вы писали:
LVV>>>Не, не мой. Просто он российский. И молодой. PM>>Эмм, простите за занудство, но во всей публичной информации о Viktor Kirilov указано Sofia, Bulgaria — работа, университет. PM>>Не думаю, что он из России. LVV>Да и бог с ним.
А я уж было обрадовался за пацана из астраханского рыбного У меня почему-то при прочтении
LVV>Собственно, я начинал с Catch/ LVV>Прочитал про нее у Евгения Охотникова. LVV>Тут же состряпал лабу по ООП для студентов. LVV>Потом по ее мотивам сделал наш пацан doctest, которая побыстрее транслируется.
у меня сложилось в последовательность событий:
1. вам посоветовали Catch
2. вы сделалил лабораторную работу для студентов, чтобы они пользовались Catch
3. по мотивам Catch один из ваших студентов сделал doctest
Кстати, кто-нибудь знает C++17/20 библиотеку для тестов, которая вместо тормозных iostreams использует fmtlib?
Мне doctest не понравилась когда-то тем, что внутри она отключает кучу предупреждений и делает forward declarations для сущностей из пространства имен std. Последнее вроде как UB, которое, конечно, везде работает, но не очень бы хотелось такое тащить в свой проект.
Re[7]: Когда пишут все в заголовках - в чем минусы?
Здравствуйте, пффф, Вы писали:
П>ОМГ П>Иди отсюда, невежда
С чего бы? Тут не указан обязательный минимум для задаваемых вопросов.
Мне не приходилось работать с шаблонами в С++. Думал что они похожи на C#, но потом попробовал и увидел что нет — это типа приблуда прекомпилятора или типа того.
Re[9]: Когда пишут все в заголовках - в чем минусы?
Здравствуйте, Shmj, Вы писали:
П>>Иди отсюда, невежда
S>С чего бы? Тут не указан обязательный минимум для задаваемых вопросов.
Существуют определенные нормы поведения, которые ты СИСТЕМАТИЧЕСКИ игнорируешь. В частности: Как правильно задавать вопросы.
Прежде, чем спрашивать...
Прежде, чем задавать технический вопрос по электронной почте или в дискуссионную группу, в чате или на форуме, сделайте следующее:
Попытайтесь найти ответ с помошью поиска в Web. Попытайтесь найти ответ в руководстве. Попытайтесь найти ответ в списке часто задаваемых вопросов (ЧаВО). Попытайтесь найти ответ путем проверок или экспериментов.
Спросите опытного товарища.
Если вы — программист, попытайтесь найти ответ, анализируя исходный код.
S>Мне не приходилось работать с шаблонами в С++. Думал что они похожи на C#, но потом попробовал и увидел что нет — это типа приблуда прекомпилятора или типа того.
Высказывания типа этого ясно показывают, что найти ответ ты не пытался. И это еще только пол беды. Высказывания типа такого наводят на мысль, что сюда ты пришел вовсе не в поисках ответа. Ты ведь фактически и вопрос-то ни разу нормально не сформулировал. Вместо вопросов — набросы. И глупые кривляния.
--
Не можешь достичь желаемого — пожелай достигнутого.