Пример из моей практики работы над криптографической библиотекой: знание на этапе компиляции определенных констант (если точнее: целых таблиц констант) - позволяет компилятору генерировать код, который лучше векторизуется и работает на 10-15% быстрее, чем код, скомпилированный с кодогенерацией)
Да я на самом деле не против wrapper-ов, более того, я очень даже за и даже уже написал их) Просто заняло это прилично времени, значительно больше "на один час" и потребовало немало усилий) Не говоря уже о том, что теперь их ещё и поддерживать надо)
В общем, wrapper-ы это концептуально правильно, но чем их больше, чем больше сил на поддержку и доработку уходит, ведь хорошие API - сложно писать)
А в моём проекте потребуется значительно больше Verify) Как минимум весь API по работе с X509 сертификатами. А для этого придется ещё пяток других API обернуть, чтобы типы не протекали.
И это работа не на один день даже) Смысл этой работы правда не сильно ясен)
Продумать API хорошего wrapper-а - это прям тонкая работа) Хороший wrapper - это wrapper не повторяющий логику работы низлежащей реализации, а реализующий нужные бизнес-API.
А для этого нужно сильно подумать наперёд, какие потребности реализует этот API и над какими сущностями работает. Это точно не работа на один час)
Фреймворк отличается от библиотеки тем, что в общем случае он выполняет некую работу сам по себе, обладает внутренним состоянием и (самое главное) — не является полностью черным ящиком с точки зрения приложения.
Мне не очень нравится это определение, т.к. оно довольно размытое. С моей колокольни, пока ваша программа использует функциональность извне - это "извне" является библиотекой. Если ваша программа является "плагином" к коду извне - это "извне" является фреймворком.
Получается библиотека реализует функциональность. Фреймворк реализует поведение, и предоставляет точки кастомизации этого поведения.
Обернуть любую внешнюю библиотеку в свой интерфейс — работа на час с перекурами
Штош :) Вот вам для затравки: OpenSSL. Оберните эту библиотеку в С++ интерфейсы "за час с перекурами")) Встретимся через недельку, когда вы будете всё ещё пыхтеть над API)
Не знаю как предыдущий оратор, но да, я предлагаю) Если эффект от действий нулевой, суды - это пустая трата сил.
Чтобы что-то изменилось - надо примыкать, тем или иным образом, к политико-экономичесским силам, которые заинтересованы в уменьшении слежки. Но таковых не наблюдается, а потому пора просто смириться и разрабатывать стратегии жизни в мире, в котором полнейший цифровой беспредел.
Я минусы ставить не могу, но мне в России вроде безопасно в бытовом смысле) Конечно, чувство безопасности пошатнулось из-за войны, но до неё я чувствовал себя вполне комфортно.
Продукты разные есть и рядовой айтишник вполне себе может позволить качественные) Да, они будут дороже, но другие вещи будут сильно дешевле. Коммуналка та же. В среднем, выйдет то же самое.
Как минимум, студенты будут знать про Postgres Pro) Так гляди, подрастут, да внедрят где-нибудь) Сам Postgres Pro с этого вообще ничего не теряет по сути.
Несмотря на все сетования людей тут, могу сказать, что новые фичи хоть в общем-то и не нужны, не ломают старый UX, что уже хорошо.
Пускай телега и жиреет, она все равно работает достаточно хорошо и стабильно, и свою базовую функцию мессенджера выполняет отлично. При подключенном премиуме так и рекламы нет никакой, а наличие оной при нежелании платить считаю вполне справедливым.
Пользоваться звёздочками, платными сообщениями, подарками и прочей косметикой вообще никто не заставляет и насильно на весь экран баннеры тоже не пихают.
В стандартной библиотеке нет ничего, нельзя даже имея готовую 2D картинку в памяти, вывести ее на экран... (и далее)
Можно я задам тупой вопрос: а зачем? Ну, возьмите другой язык, чтобы вывести картинку.
У С++ одна ниша - делать что-то очень-очень быстро. Всё. Если вам нужно выводить 10000 объектов в секунду - вам нужен С++, но я вас уверяю, написание кода по соббсно отрисовки UI будет наименьшей из ваших проблем. В остальных случай возьмите JS, Python, Qt и не парьтесь особо.
Кто из практических программистов пользуется чем-то выходящим за рамки 11-го ну в крайнем случае 14-го стандартов ???
Ну, я пользуюсь вполне С++17 и считаю, что до этого стандарта плюсы довольно-таки гавно и если где-то пишут на С++14 я туда уже не пойду. А я ещё на С++98 успел пописать, т.е. прошёл все итерации стандарта.
Впрочем, С++20 тоже вполне себе неплох. consteval и концепты - очень приятная вещь. Вот С++23 да, чисто косметика, да ещё и не поддерживается нигде.
Будь моя воля, я бы вообще заморозил развитие С++ как языка и сосредоточился исключительно на библиотеках.
Нужно все и сразу - ну возьмите boost. Если уж совсем печально, но есть деньги - возьмите Qt.
Для тех кому нужен высокий уровень абстракции, есть куча куда более вкусных альтернатив.
Всё так и есть. Хочется высокого уровня и не думать о железках - используйте другие языки. Я вот успешно пишут на Python в параллель к плюсам и мне вполне нормально. Rust и Go в принципе тоже ничего.
Год назад работал в месте, где были скрипты на Perl для самописной сборочной системы, написаны они были 7 лет назад одним энтузиастом, и с тех пор почти не изменились, т.к. никто в отделе из 70+ человек больше не знает Perl)
И это было единственное место за последние 10 лет, где я видел Perl)
Пример из моей практики работы над криптографической библиотекой: знание на этапе компиляции определенных констант (если точнее: целых таблиц констант) - позволяет компилятору генерировать код, который лучше векторизуется и работает на 10-15% быстрее, чем код, скомпилированный с кодогенерацией)
Концепция черного ящика никак не связана с чистотой функций, но я вас понял. В вашей терминологии действительно фреймворк не черный ящик)
Думаю, ту лучше подойдёт концепция "серого ящика", когда мы имеем входы и выходы, но при этом знаем некоторые детали о внутренней структуре)
Да я на самом деле не против wrapper-ов, более того, я очень даже за и даже уже написал их) Просто заняло это прилично времени, значительно больше "на один час" и потребовало немало усилий) Не говоря уже о том, что теперь их ещё и поддерживать надо)
В общем, wrapper-ы это концептуально правильно, но чем их больше, чем больше сил на поддержку и доработку уходит, ведь хорошие API - сложно писать)
Возможно мы по разному понимаем черный ящик)
Да нет, я пишу вообще условный TLS Proxy. А заменить можно кучей всего. Ну, например BoringSSL, Botan, wolfSSL, NSS, GnuTLS, да тысячи их)
А в моём проекте потребуется значительно больше Verify) Как минимум весь API по работе с X509 сертификатами. А для этого придется ещё пяток других API обернуть, чтобы типы не протекали.
И это работа не на один день даже) Смысл этой работы правда не сильно ясен)
Продумать API хорошего wrapper-а - это прям тонкая работа) Хороший wrapper - это wrapper не повторяющий логику работы низлежащей реализации, а реализующий нужные бизнес-API.
А для этого нужно сильно подумать наперёд, какие потребности реализует этот API и над какими сущностями работает. Это точно не работа на один час)
Мне не очень нравится это определение, т.к. оно довольно размытое. С моей колокольни, пока ваша программа использует функциональность извне - это "извне" является библиотекой. Если ваша программа является "плагином" к коду извне - это "извне" является фреймворком.
Получается библиотека реализует функциональность. Фреймворк реализует поведение, и предоставляет точки кастомизации этого поведения.
Штош :) Вот вам для затравки: OpenSSL. Оберните эту библиотеку в С++ интерфейсы "за час с перекурами")) Встретимся через недельку, когда вы будете всё ещё пыхтеть над API)
Но ведь вся история в том, что никуда я не пройду, никаких штрафов не заплачу и ничего со мной не будет.
Получается, вроде как не я живу в мире фантазий, а вы?)
Не знаю как предыдущий оратор, но да, я предлагаю) Если эффект от действий нулевой, суды - это пустая трата сил.
Чтобы что-то изменилось - надо примыкать, тем или иным образом, к политико-экономичесским силам, которые заинтересованы в уменьшении слежки. Но таковых не наблюдается, а потому пора просто смириться и разрабатывать стратегии жизни в мире, в котором полнейший цифровой беспредел.
Я минусы ставить не могу, но мне в России вроде безопасно в бытовом смысле) Конечно, чувство безопасности пошатнулось из-за войны, но до неё я чувствовал себя вполне комфортно.
Продукты разные есть и рядовой айтишник вполне себе может позволить качественные) Да, они будут дороже, но другие вещи будут сильно дешевле. Коммуналка та же. В среднем, выйдет то же самое.
Как минимум, студенты будут знать про Postgres Pro) Так гляди, подрастут, да внедрят где-нибудь) Сам Postgres Pro с этого вообще ничего не теряет по сути.
:)
Несмотря на все сетования людей тут, могу сказать, что новые фичи хоть в общем-то и не нужны, не ломают старый UX, что уже хорошо.
Пускай телега и жиреет, она все равно работает достаточно хорошо и стабильно, и свою базовую функцию мессенджера выполняет отлично. При подключенном премиуме так и рекламы нет никакой, а наличие оной при нежелании платить считаю вполне справедливым.
Пользоваться звёздочками, платными сообщениями, подарками и прочей косметикой вообще никто не заставляет и насильно на весь экран баннеры тоже не пихают.
Так это вроде есть. Тыкаешь на сообщение, выбираешь "Copy link"
А где есть?) Даже JS не в счёт, там что-то отличное от текста в консоли выводится только в браузере. За пределами браузера ничего нет)
Только в python можно графички повыводить, и в Java вроде чего-то есть, но опять же - не очень-то кроссплатформенно.
В С++ есть Qt. Работает вообще на всех платформах. Есть imgui, тоже работает почти везде и простой. Есть SFML. Всё вполне рабочее.
Можно я задам тупой вопрос: а зачем? Ну, возьмите другой язык, чтобы вывести картинку.
У С++ одна ниша - делать что-то очень-очень быстро. Всё. Если вам нужно выводить 10000 объектов в секунду - вам нужен С++, но я вас уверяю, написание кода по соббсно отрисовки UI будет наименьшей из ваших проблем. В остальных случай возьмите JS, Python, Qt и не парьтесь особо.
Ну, я пользуюсь вполне С++17 и считаю, что до этого стандарта плюсы довольно-таки гавно и если где-то пишут на С++14 я туда уже не пойду. А я ещё на С++98 успел пописать, т.е. прошёл все итерации стандарта.
Впрочем, С++20 тоже вполне себе неплох. consteval и концепты - очень приятная вещь. Вот С++23 да, чисто косметика, да ещё и не поддерживается нигде.
Нужно все и сразу - ну возьмите boost. Если уж совсем печально, но есть деньги - возьмите Qt.
Всё так и есть. Хочется высокого уровня и не думать о железках - используйте другие языки. Я вот успешно пишут на Python в параллель к плюсам и мне вполне нормально. Rust и Go в принципе тоже ничего.
Незаслуженно был забыт любимый многими YoptaScript
Год назад работал в месте, где были скрипты на Perl для самописной сборочной системы, написаны они были 7 лет назад одним энтузиастом, и с тех пор почти не изменились, т.к. никто в отделе из 70+ человек больше не знает Perl)
И это было единственное место за последние 10 лет, где я видел Perl)