Когда пишут все в заголовках - в чем минусы?
От: Shmj Ниоткуда  
Дата: 13.02.23 23:05
Оценка:
Как вы относитесь к этой библиотеке и примененному там подходу: https://github.com/CrowCpp/Crow

?
Re: Когда пишут все в заголовках - в чем минусы?
От: wl. Россия  
Дата: 14.02.23 05:43
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Как вы относитесь к этой библиотеке и примененному там подходу: https://github.com/CrowCpp/Crow


относительный минус одного огромного файла — некоторые IDE плохо с такими работают, начинают дико тормозить, не могут найти место в файле, когда пытаешься перейти к определению функции. Например, XCode такая.
Но так как это библиотека, работать напрямую с этим файлом ты не будешь, так что минусов нет
Re: Когда пишут все в заголовках - в чем минусы?
От: DiPaolo Россия  
Дата: 14.02.23 07:06
Оценка: +3
S>Как вы относитесь к этой библиотеке и примененному там подходу: https://github.com/CrowCpp/Crow

S>?


индифферентно

Шымж, кончай спамить, а. Есть конкретные вопросы — пиши. И уж будь добр больше контекста давай в своих сообщениях, а то ты все разделы форума захламляешь всякими рандомными вопросами. Вот конкретно тут: напиши, что ты ищешь; что смущает в этой либе; не можешь подключить — так и напиши; есть вопросы в производительности — так и спроси; какой подход тебя интересует; сам что думаешь.

Ну короче, твои посты кажутся написанными ботом. Я абсолютно не уверен, что ты все это через себя пропускаешь. Спамишь как из пулемета, блин.
Патриот здравого смысла
Re[2]: Когда пишут все в заголовках - в чем минусы?
От: Shmj Ниоткуда  
Дата: 14.02.23 07:16
Оценка:
Здравствуйте, DiPaolo, Вы писали:

DP>индифферентно

DP>Шымж, кончай спамить, а. Есть конкретные вопросы — пиши.

Думаю сам так писать, почему нет? Зачем плодить сущности?
Re[3]: Когда пишут все в заголовках - в чем минусы?
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 14.02.23 07:38
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>Думаю сам так писать, почему нет? Зачем плодить сущности?

Там же шаблоны везде. Как ты их в cpp запихаешь?
Sic luceat lux!
Re[2]: Когда пишут все в заголовках - в чем минусы?
От: Skorodum Россия  
Дата: 14.02.23 07:47
Оценка: +2
Здравствуйте, wl., Вы писали:

wl.>Но так как это библиотека, работать напрямую с этим файлом ты не будешь, так что минусов нет

Минус в скорости сборки.
Re: Когда пишут все в заголовках - в чем минусы?
От: LaptevVV Россия  
Дата: 14.02.23 07:48
Оценка: 13 (2) +1
Минус может быть только один — объем транслируемого кода.
А так я вижу одни плюсы.
Например, SQLite — прямо в виде исходных кодов прямо в твой прогу включается, и она становится совершенно независимой от наличия SQLite у заказчика.
unit-тестирование с doctest — это класс!!!
Пока народ сочинял всякие проги/библиотеки для этого — я нифига не пользовался.
А сейчас — — блеск, инклуд написал, и пиши себе тесты по самые помидоры.
Я вот предпочитаю именно такой подход и стараюсь разыскать либу подобного типа для разных работ.
Это же сродни пакетам в Go.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[4]: Когда пишут все в заголовках - в чем минусы?
От: Shmj Ниоткуда  
Дата: 14.02.23 08:54
Оценка:
Здравствуйте, Kernan, Вы писали:

S>>Думаю сам так писать, почему нет? Зачем плодить сущности?

K>Там же шаблоны везде. Как ты их в cpp запихаешь?

Тут не в шаблонах дело а именно целенаправленны отказ от cpp-файлов. Для примера: https://github.com/CrowCpp/Crow/blob/master/include/crow/task_timer.h

Почему метод process_tasks реализован в заголовочном файле а не как обычно в cpp?
Re[5]: Когда пишут все в заголовках - в чем минусы?
От: LuciferSaratov Россия  
Дата: 14.02.23 09:26
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>Почему метод process_tasks реализован в заголовочном файле а не как обычно в cpp?


ну, так проще подключить этот код в свой проект.
кроме этого особых преимуществ я не вижу, остаются только недостатки.
по большому счёту, это личные предпочтения автора кода.
никакого скрытого мегазамысла в этом нет.
Re: Когда пишут все в заголовках - в чем минусы?
От: Chorkov Россия  
Дата: 14.02.23 09:57
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>Как вы относитесь к этой библиотеке и примененному там подходу: https://github.com/CrowCpp/Crow


S>?


Минусы:
1) Время компиляции (и время отдельной единицы трансляции у пользователя библиотеки, и необходимость пересборки всего, при внесении изменений в код библиотеки).
2) Раздувание результирующего кода (клонирование тела inline функций).
3) Нарушение изоляции (инкапсуляции).

Плюсы:
1) Простота распространения/подключения.


Пока проект маленький — плюсы перевешивают, но с ростом проекта (с ростом числа таких библиотек) — минусы растут быстрее чем линейно, в отличии от плюса.

Нормально если это редко обновляемые библиотеки (извлекли из git-а, и живем с одной версией библиотеки, до выпуска следующего релиза).
Совсем плохо, если эта библиотека — ваша корпоративная (т.е. изменения в нее вносятся регулярно).
Эти изменения начинают заметно тормозить всех пользователей, даже если улучшения не меняют интерфейс библиотеки.
Re: Когда пишут все в заголовках - в чем минусы?
От: rg45 СССР  
Дата: 14.02.23 10:21
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Когда пишут все в заголовках — в чем минусы?


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

S>Как вы относитесь к этой библиотеке и примененному там подходу: https://github.com/CrowCpp/Crow?


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

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

- Как Вы относитесь к этой библиотеке?
— А Вы из какой газеты?

--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 14.02.2023 10:23 rg45 . Предыдущая версия . Еще …
Отредактировано 14.02.2023 10:21 rg45 . Предыдущая версия .
Отредактировано 14.02.2023 10:21 rg45 . Предыдущая версия .
Re[2]: Когда пишут все в заголовках - в чем минусы?
От: so5team https://stiffstream.com
Дата: 14.02.23 11:42
Оценка:
Здравствуйте, Chorkov, Вы писали:

C>2) Раздувание результирующего кода (клонирование тела inline функций).


Вроде бы уже давно inline -- это всего лишь указание компилятору на то, что нет нарушения ODR в результате включения одного заголовка в несколько единиц трансляции. Будет ли реальная подстановка тела в место вызова решает компилятор и, возможно, линкер.

C>3) Нарушение изоляции (инкапсуляции).


А это как?
Re[3]: Когда пишут все в заголовках - в чем минусы?
От: Chorkov Россия  
Дата: 14.02.23 13:12
Оценка: 8 (1)
Здравствуйте, so5team, Вы писали:

S>Здравствуйте, Chorkov, Вы писали:


C>>2) Раздувание результирующего кода (клонирование тела inline функций).


S>Вроде бы уже давно inline -- это всего лишь указание компилятору на то, что нет нарушения ODR в результате включения одного заголовка в несколько единиц трансляции. Будет ли реальная подстановка тела в место вызова решает компилятор и, возможно, линкер.


Так, но если определение функции доступно в данной единице трансляции, то вероятность что она будет встроена — выше.
Если функция недоступна — то ниже. Если LTCG отключен, то точно не строит.

C>>3) Нарушение изоляции (инкапсуляции).


S>А это как?


Тут два аспекта:

1) Многие библиотеки мусорят в глобальное пространство имен. Возможны конфликты.

Например: https://ru.stackoverflow.com/questions/1460674/%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B0-%D0%BF%D1%80%D0%B8-%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B8-execution-%D0%B2-qt/


2) Если реализация видна пользователю "насквозь", то велик соблазн вызвать, например, вызвать функцию из `namespace private`.
Если детали реализации лежат в отдельных заголовочных файлах, которые недоступны для #include из стороннего кода — то такая вероятность сильно снижается.
Re[4]: Когда пишут все в заголовках - в чем минусы?
От: so5team https://stiffstream.com
Дата: 14.02.23 14:47
Оценка:
Здравствуйте, Chorkov, Вы писали:

S>>А это как?


C>1) Многие библиотеки мусорят в глобальное пространство имен. Возможны конфликты.


Понятно. Отмечу лишь, что не могу вспомнить header-only плюсовые библиотеки, которые бы не использовали пространств имен.

C>2) Если реализация видна пользователю "насквозь", то велик соблазн вызвать, например, вызвать функцию из `namespace private`.


Это уже из категории ССЗБ.
Re[5]: Когда пишут все в заголовках - в чем минусы?
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 14.02.23 15:28
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Почему метод process_tasks реализован в заголовочном файле а не как обычно в cpp?

Это один частный файл, остальное это шаблон на шаблоне. Я думаю автор просто хотел header-only либу сделать.
Sic luceat lux!
Re[6]: Когда пишут все в заголовках - в чем минусы?
От: Shmj Ниоткуда  
Дата: 14.02.23 17:21
Оценка: -2 :))
Здравствуйте, Kernan, Вы писали:

K>Здравствуйте, Shmj, Вы писали:


S>>Почему метод process_tasks реализован в заголовочном файле а не как обычно в cpp?

K>Это один частный файл, остальное это шаблон на шаблоне. Я думаю автор просто хотел header-only либу сделать.

А что мешает с шаблонами применять стандартный механизм разделения на декларацию в заголовках и определение в cpp-файлах? Или вы просто не знаете как это записать?

Вот пример, пользуйтесь: https://stackoverflow.com/questions/13477086/use-of-class-template-requires-template-argument-list

Отредактировано 14.02.2023 17:23 Shmj . Предыдущая версия . Еще …
Отредактировано 14.02.2023 17:22 Shmj . Предыдущая версия .
Re[4]: Когда пишут все в заголовках - в чем минусы?
От: Shmj Ниоткуда  
Дата: 14.02.23 17:24
Оценка:
Здравствуйте, Kernan, Вы писали:

S>>Думаю сам так писать, почему нет? Зачем плодить сущности?

K>Там же шаблоны везде. Как ты их в cpp запихаешь?

https://stackoverflow.com/questions/13477086/use-of-class-template-requires-template-argument-list — пример
Re[5]: Когда пишут все в заголовках - в чем минусы?
От: rg45 СССР  
Дата: 14.02.23 18:52
Оценка: +2
Здравствуйте, Shmj, Вы писали:

S>https://stackoverflow.com/questions/13477086/use-of-class-template-requires-template-argument-list — пример


А ты еще более безмозглый, чем я думал

Исчезни отсюда, пожалуйста. Тебе что, других форумов мало?
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 14.02.2023 18:58 rg45 . Предыдущая версия . Еще …
Отредактировано 14.02.2023 18:57 rg45 . Предыдущая версия .
Re: Если всё писать в заголовке, то тогда на любое изменение в любом файле проек
От: T4r4sB Россия  
Дата: 14.02.23 18:56
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Как вы относитесь к этой библиотеке и примененному там подходу: https://github.com/CrowCpp/Crow


S>?
Re[6]: Когда пишут все в заголовках - в чем минусы?
От: Shmj Ниоткуда  
Дата: 14.02.23 20:09
Оценка:
Здравствуйте, rg45, Вы писали:

R>А ты еще более безмозглый, чем я думал

R>Исчезни отсюда, пожалуйста. Тебе что, других форумов мало?

У нас принято даже при глупости собеседника — не опускаться до перехода на личности а давать исчерпывающий детальный ответ даже на глупый вопрос, как бы обличающий оппонента, чтобы всем все стало понятно. Я достаточно детально ответил на ваш вопрос?
Re[5]: Когда пишут все в заголовках - в чем минусы?
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 15.02.23 04:16
Оценка:
Здравствуйте, Shmj, Вы писали:

S>https://stackoverflow.com/questions/13477086/use-of-class-template-requires-template-argument-list — пример

Блин, иди читай Джосаттиса по шаблонам. Пока не прочитаешь, не приходи. Хочешь занять место РэшнФеллоу? Ну так у него хотя есть чтобы быть таким, а ты вроде без особенностей.
Sic luceat lux!
Отредактировано 15.02.2023 4:18 Kernan . Предыдущая версия .
Re[5]: Когда пишут все в заголовках - в чем минусы?
От: Doom100500 Израиль  
Дата: 15.02.23 07:07
Оценка:
Здравствуйте, 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 СССР  
Дата: 15.02.23 08:13
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>unit-тестирование с doctest — это класс!!!


Есть еще такого же плана Catch2. Я пользовался, мне понравилось.

Правда вот по ссылке пишут что "Catch2 v3 has been released" и что теперь это больше не header-only. И это очень грустно, приходится признать.
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 15.02.2023 8:37 rg45 . Предыдущая версия . Еще …
Отредактировано 15.02.2023 8:21 rg45 . Предыдущая версия .
Отредактировано 15.02.2023 8:20 rg45 . Предыдущая версия .
Re[3]: Когда пишут все в заголовках - в чем минусы?
От: so5team https://stiffstream.com
Дата: 15.02.23 08:31
Оценка:
Здравствуйте, rg45, Вы писали:

LVV>>unit-тестирование с doctest — это класс!!!


R>Есть еще такого же плана Catch2. Я пользовался, мне понравилось.


Пользовался обоими. ЕМНИП, Catch2 содержит больше фич, но не идет ни в какое сравнение по скорости компиляции: doctest уделывает Catch2 в легкую.
Но для простых тестовых кейсов переход с Catch2 на doctest практически безболезненный.

R>Правда вот по ссылке пишут что "Catch2 v3 has been released" и что теперь это не header-only.


Так и есть
Re[3]: Когда пишут все в заголовках - в чем минусы?
От: LaptevVV Россия  
Дата: 15.02.23 10:15
Оценка:
LVV>>unit-тестирование с doctest — это класс!!!
R>Есть еще такого же плана Catch2. Я пользовался, мне понравилось.
Собственно, я начинал с Catch/
Прочитал про нее у Евгения Охотникова.
Тут же состряпал лабу по ООП для студентов.
Потом по ее мотивам сделал наш пацан doctest, которая побыстрее транслируется.
R>Правда вот по ссылке пишут что "Catch2 v3 has been released" и что теперь это больше не header-only. И это очень грустно, приходится признать.
Ну, тогда просто надо перейти на googletest — а я все никак не соберусь.
doctest проще.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[4]: Когда пишут все в заголовках - в чем минусы?
От: Videoman Россия https://hts.tv/
Дата: 15.02.23 17:47
Оценка: 11 (1)
Здравствуйте, LaptevVV, Вы писали:

LVV>Ну, тогда просто надо перейти на googletest — а я все никак не соберусь.

LVV>doctest проще.

Я перешёл на googletest с Microsoft-овского фрейворка. Преимущество в том, что он нативно поддерживается и Студией (распихивает результаты по Test Explore-у) на равне со своим "родным" NUnit и CMake-ом. А так как у меня сейчас вся разработка стала кроссплатформенной, это очень удобно.
Re[4]: Когда пишут все в заголовках - в чем минусы?
От: PM  
Дата: 15.02.23 19:44
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Собственно, я начинал с Catch/

LVV>Прочитал про нее у Евгения Охотникова.
LVV>Тут же состряпал лабу по ООП для студентов.
LVV>Потом по ее мотивам сделал наш пацан doctest, которая побыстрее транслируется.

Это вы про https://github.com/doctest/doctest, и https://github.com/onqtam ваш пацан? В смысле из https://astu.org?
Re[5]: Когда пишут все в заголовках - в чем минусы?
От: LaptevVV Россия  
Дата: 16.02.23 05:06
Оценка: -1
LVV>>Потом по ее мотивам сделал наш пацан doctest, которая побыстрее транслируется.
PM>Это вы про https://github.com/doctest/doctest, и https://github.com/onqtam ваш пацан? В смысле из https://astu.org?
Не, не мой. Просто он российский. И молодой.
Хотя для меня сейчас даже 50-летние — пацаны...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[6]: Когда пишут все в заголовках - в чем минусы?
От: PM  
Дата: 16.02.23 06:10
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>>>Потом по ее мотивам сделал наш пацан doctest, которая побыстрее транслируется.

PM>>Это вы про https://github.com/doctest/doctest, и https://github.com/onqtam ваш пацан? В смысле из https://astu.org?
LVV>Не, не мой. Просто он российский. И молодой.

Эмм, простите за занудство, но во всей публичной информации о Viktor Kirilov указано Sofia, Bulgaria — работа, университет.
Не думаю, что он из России.
Re[7]: Когда пишут все в заголовках - в чем минусы?
От: LaptevVV Россия  
Дата: 16.02.23 09:31
Оценка:
LVV>>Не, не мой. Просто он российский. И молодой.
PM>Эмм, простите за занудство, но во всей публичной информации о Viktor Kirilov указано Sofia, Bulgaria — работа, университет.
PM>Не думаю, что он из России.
Да и бог с ним.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[7]: Когда пишут все в заголовках - в чем минусы?
От: so5team https://stiffstream.com
Дата: 16.02.23 09:47
Оценка:
Здравствуйте, PM, Вы писали:

PM>>>Это вы про https://github.com/doctest/doctest, и https://github.com/onqtam ваш пацан? В смысле из https://astu.org?

LVV>>Не, не мой. Просто он российский. И молодой.

PM>Эмм, простите за занудство, но во всей публичной информации о Viktor Kirilov указано Sofia, Bulgaria — работа, университет.

PM>Не думаю, что он из России.

Вроде бы он сам про себя говорит, что из Болгарии:



Цинк: https://www.youtube.com/watch?v=tp9ZoQ6HJM4&t=2s
Re[8]: Когда пишут все в заголовках - в чем минусы?
От: PM  
Дата: 16.02.23 10:43
Оценка: +2
Здравствуйте, 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]: Когда пишут все в заголовках - в чем минусы?
От: пффф  
Дата: 16.02.23 18:41
Оценка: 11 (1) -1
Здравствуйте, Shmj, Вы писали:

S>А что мешает с шаблонами применять стандартный механизм разделения на декларацию в заголовках и определение в cpp-файлах? Или вы просто не знаете как это записать?


S>Вот пример, пользуйтесь: https://stackoverflow.com/questions/13477086/use-of-class-template-requires-template-argument-list


S>



ОМГ

Иди отсюда, невежда
Re[8]: Когда пишут все в заголовках - в чем минусы?
От: Shmj Ниоткуда  
Дата: 16.02.23 21:08
Оценка:
Здравствуйте, пффф, Вы писали:

П>ОМГ

П>Иди отсюда, невежда

С чего бы? Тут не указан обязательный минимум для задаваемых вопросов.

Мне не приходилось работать с шаблонами в С++. Думал что они похожи на C#, но потом попробовал и увидел что нет — это типа приблуда прекомпилятора или типа того.
Re[9]: Когда пишут все в заголовках - в чем минусы?
От: rg45 СССР  
Дата: 16.02.23 22:29
Оценка:
Здравствуйте, Shmj, Вы писали:

П>>Иди отсюда, невежда


S>С чего бы? Тут не указан обязательный минимум для задаваемых вопросов.


Существуют определенные нормы поведения, которые ты СИСТЕМАТИЧЕСКИ игнорируешь. В частности: Как правильно задавать вопросы.

Прежде, чем спрашивать...


Прежде, чем задавать технический вопрос по электронной почте или в дискуссионную группу, в чате или на форуме, сделайте следующее:


S>Мне не приходилось работать с шаблонами в С++. Думал что они похожи на C#, но потом попробовал и увидел что нет — это типа приблуда прекомпилятора или типа того.


Высказывания типа этого ясно показывают, что найти ответ ты не пытался. И это еще только пол беды. Высказывания типа такого наводят на мысль, что сюда ты пришел вовсе не в поисках ответа. Ты ведь фактически и вопрос-то ни разу нормально не сформулировал. Вместо вопросов — набросы. И глупые кривляния.
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 17.02.2023 7:13 rg45 . Предыдущая версия . Еще …
Отредактировано 16.02.2023 22:37 rg45 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.