Статью надо было озаглавить: "Всегда делайте getters/setters inline".
Или, что, когда у вас есть указатель на класс, который final, то vtable не нужон. Но тогда вы тему CRTP ни разу не раскрыли. <offtopic> В Расте вообще это просто traits, которые бывают двух типов, а в С++ это превращается в виртуал, или в CRTP.</offtopic>
Что-то про ranges было, но ни разу не упомянули, что они ни в libstdc++, ни в libc++, они не оптимизированы, а делают код, который медленнее, чем старые аналоги, если только это не Range-v3 библиотека. <offtopic> Кстати, C++20 format тоже сосёт, по сравнению с {fmt}.</offtopic>
В Ncurses нет виджетов, чтобы начать сразу программировать TUI, т.е. все эти окошечки с бордюрами, прокрутки, всё это самому придётся отрисосывать и события обрабатывать.
Да, это конкретный API фреймворка DPDK, вот конкретно [ring buffer])https://doc.dpdk.org/guides/prog_guide/ring_lib.html) Там вся соль в том, чтобы без ioctl(), чтобы всё в user-space отрабатывать и не ходить в ядро.
Хотите ещё быстрее, чем на io_uring? Можно всё прямо в user-space делать на Storage Performance Development Kit SPDK. В режиме poll, драйвер NVMe вам через неблокирующиеся ring buffer будет отдавать в user-space блоки, где можно sched_setaffinity() треды прибить гвоздями к CPU конкретным, и вообще всё будет хорошо с процессорными кэшами.
Крутые дядьки объединяют Data Plane Development Kit DPDK с SPDK для быстрых сетевых хранилищ данных.
В DPDK также сетевая карточка не видна ядру, а через ring buffer пробрасывается в user space, где у вас свой "быстрый" сетевой стек. Одна только структура sk_buff чего стоит, ни в какие кеши не лезет, не то что FreeBSD'шный mbuf простой.
Если на C++ написать constexpr функцию, то даже перебор циклом должен посчитаться во время компиляции. Компилятор просто подставит готовый результат в итоговый print().
Тема trait не раскрыта. Это сильно похоже на interface в Golang. Только в Go это будет единственный способ полиморфизма, и там это похоже на C++ vtable чем-то, т.е. просто вызвать функцию не получится, надо прыгать ещё через один указатель (cache и branch prediction пострдают). Тема не раскрыта, потому что в расте trait - это толи C++20 concepts, которые в шаблонах нам дают ту самую утиную типизацию (а значит компилятор может напрямую вызывать функции), или тупо базовый интерфейсный класс, с виртуальными функциями (и виртуальным деструктором). Я бы прогулил быстрее, чем писал, но друг ещё кому-то интересно тоже.
Я был слегка удивлён, когда просто import мне добавил несколько опций в сommand-line options, и мой --help стал выбавать ещё какую-то хрень, о которой я не ожидал.
И, главное, я просто хочу подключить внешнюю библиотеку, и не затащить ещё себе опций в комманд-лайн дополнительных.
Отучаемся говорить за всех. Если бы это была педовикия, то вам бы уже накидали в тачанку, за отсутствие референсов - кто сказал, какой менеджемент?
Я за менеджмент отвечу. Например, есть у вас легаси код, и библиотек сишных (плюсовых) разныз, и что вы будите делать в ресте, писать unsafe? В чём тогда безопасный код? А где вы будите нанимать людей? Прям на рынке такие люди есть? Так то на Golang можно за две недели переделать любого, Гуглом проверено, а ты попробуй на Раст переделать? ;-)
Вот вы здесь хихи да хаха, а я, между прочим, в ~98-99ом линуксовую кваку (первую тогда ещё), которая под svga библиотекой, под aalib переиначил, и там даже как-то играть можно было в консоле, только не комильфо конечно, но распознать что куда можно было.
разработчики стандарта затолкали его в язык, а необходимые ему для работы значения вынесли наружу.
Ровно также они поступили с C++20 Coroutines. Как бы поддержка в языке есть, а из-коробки не работает, потому что в либси++ не поддерживается.
Вообще, было бы круто, чтобы stdio было такое всё async, но для этого надо поддержку io_uring или в Windows OVERLAPPED использовать. Но было бы вообще здорово, чтобы я писал на C++ не задумываясь, что там, как на std::thread, и где-то пул io-воркеров, где-то нативные вызовы в ОС, даже boost::asio так не умеет!
Time to market (TTM) у Go получается короче, чем на C++, проверено сотнями компаний по всему миру. Плюс на С++ программистов надо брать опытных, а то в ноги себе постреляют, а на Go можно бывших PHP'шников конвертировать за две недели. А в C++ вы за две недели PHP'шников не сконвертируете ;-)
Предлагаю тему. Написать какой-то абстрактный REST сервис на PHP и на Go. Внутри что-то там повычислять, хотя все эти эти сервисы обычно просто в другие сервисы ходят или в БД запросы делают.
Но мы будем сравнивать PHP скомпилированный, т.е. kphp и скомпилированный код на Go. Кто быстрее? Кто меньше памяти потребляет?
В чём соль? Что PHP+kphp, что Golang, оба решения нацелены на привлечение бакенд-программистов "средней" ценовой категории, с максимально быстрым time-to-market, чтобы сразу в продакшен.
Статью надо было озаглавить: "Всегда делайте getters/setters inline".
Или, что, когда у вас есть указатель на класс, который final, то vtable не нужон. Но тогда вы тему CRTP ни разу не раскрыли.
<offtopic>
В Расте вообще это просто traits, которые бывают двух типов, а в С++ это превращается в виртуал, или в CRTP.</offtopic>
Что-то про ranges было, но ни разу не упомянули, что они ни в libstdc++, ни в libc++, они не оптимизированы, а делают код, который медленнее, чем старые аналоги, если только это не Range-v3 библиотека.
<offtopic>
Кстати, C++20 format тоже сосёт, по сравнению с {fmt}.</offtopic>
Ромбовидное наследование? Если приходится так делать, то это сигнал к тому, что надо пересмотреть дизайн.
Статья не полная без std::pmr::...
Kalculator?
Owwrite?
Hello word?
В Ncurses нет виджетов, чтобы начать сразу программировать TUI, т.е. все эти окошечки с бордюрами, прокрутки, всё это самому придётся отрисосывать и события обрабатывать.
Толи дело был Turbo Vision. Сегодня есть современный клон https://github.com/magiblot/tvision
На современном C++ я бы попробовал писать TUI на чём-то, типа https://github.com/ArthurSonzogni/FTXUI
Да, это конкретный API фреймворка DPDK, вот конкретно [ring buffer])https://doc.dpdk.org/guides/prog_guide/ring_lib.html)
Там вся соль в том, чтобы без ioctl(), чтобы всё в user-space отрабатывать и не ходить в ядро.
Хотите ещё быстрее, чем на io_uring? Можно всё прямо в user-space делать на Storage Performance Development Kit SPDK. В режиме poll, драйвер NVMe вам через неблокирующиеся ring buffer будет отдавать в user-space блоки, где можно sched_setaffinity() треды прибить гвоздями к CPU конкретным, и вообще всё будет хорошо с процессорными кэшами.
Крутые дядьки объединяют Data Plane Development Kit DPDK с SPDK для быстрых сетевых хранилищ данных.
В DPDK также сетевая карточка не видна ядру, а через ring buffer пробрасывается в user space, где у вас свой "быстрый" сетевой стек. Одна только структура sk_buff чего стоит, ни в какие кеши не лезет, не то что FreeBSD'шный mbuf простой.
Если на C++ написать constexpr функцию, то даже перебор циклом должен посчитаться во время компиляции. Компилятор просто подставит готовый результат в итоговый print().
C++98 --> C++11--> вот здесь вы не раскрыли тему C++17 std::pmr::... --> C++23
Считайте, что тогда уже появился а-ля std::flat_list ;-)
Вот здесь даже посчитали на сколько какой способ быстрее https://en.cppreference.com/w/cpp/memory/monotonic_buffer_resource
Тема trait не раскрыта. Это сильно похоже на interface в Golang. Только в Go это будет единственный способ полиморфизма, и там это похоже на C++ vtable чем-то, т.е. просто вызвать функцию не получится, надо прыгать ещё через один указатель (cache и branch prediction пострдают).
Тема не раскрыта, потому что в расте trait - это толи C++20 concepts, которые в шаблонах нам дают ту самую утиную типизацию (а значит компилятор может напрямую вызывать функции), или тупо базовый интерфейсный класс, с виртуальными функциями (и виртуальным деструктором). Я бы прогулил быстрее, чем писал, но друг ещё кому-то интересно тоже.
Я был слегка удивлён, когда просто import мне добавил несколько опций в сommand-line options, и мой --help стал выбавать ещё какую-то хрень, о которой я не ожидал.
И, главное, я просто хочу подключить внешнюю библиотеку, и не затащить ещё себе опций в комманд-лайн дополнительных.
Отучаемся говорить за всех. Если бы это была педовикия, то вам бы уже накидали в тачанку, за отсутствие референсов - кто сказал, какой менеджемент?
Я за менеджмент отвечу. Например, есть у вас легаси код, и библиотек сишных (плюсовых) разныз, и что вы будите делать в ресте, писать unsafe? В чём тогда безопасный код? А где вы будите нанимать людей? Прям на рынке такие люди есть? Так то на Golang можно за две недели переделать любого, Гуглом проверено, а ты попробуй на Раст переделать? ;-)
Вот вы здесь хихи да хаха, а я, между прочим, в ~98-99ом линуксовую кваку (первую тогда ещё), которая под svga библиотекой, под aalib переиначил, и там даже как-то играть можно было в консоле, только не комильфо конечно, но распознать что куда можно было.
Заголовок должен быть "Aalib на коленке".
Зачем писать на русском по-английски, если не нейтив? На русском нет артиклей.
Ровно также они поступили с C++20 Coroutines. Как бы поддержка в языке есть, а из-коробки не работает, потому что в либси++ не поддерживается.
Вообще, было бы круто, чтобы stdio было такое всё async, но для этого надо поддержку io_uring или в Windows OVERLAPPED использовать. Но было бы вообще здорово, чтобы я писал на C++ не задумываясь, что там, как на std::thread, и где-то пул io-воркеров, где-то нативные вызовы в ОС, даже boost::asio так не умеет!
Сейчас Гугл пилит ещё один язык Carbon- убийца C++ (очередной).
Time to market (TTM) у Go получается короче, чем на C++, проверено сотнями компаний по всему миру. Плюс на С++ программистов надо брать опытных, а то в ноги себе постреляют, а на Go можно бывших PHP'шников конвертировать за две недели. А в C++ вы за две недели PHP'шников не сконвертируете ;-)
Для этого есть Hub Go, а тут сранение ЯП А и Б.
Предлагаю тему. Написать какой-то абстрактный REST сервис на PHP и на Go. Внутри что-то там повычислять, хотя все эти эти сервисы обычно просто в другие сервисы ходят или в БД запросы делают.
Но мы будем сравнивать PHP скомпилированный, т.е. kphp и скомпилированный код на Go. Кто быстрее? Кто меньше памяти потребляет?
В чём соль? Что PHP+kphp, что Golang, оба решения нацелены на привлечение бакенд-программистов "средней" ценовой категории, с максимально быстрым time-to-market, чтобы сразу в продакшен.