Pull to refresh
-4

Разработчик С++, Qt

0,1
Rating
Send message

Linux ядро буквально живет на том же с++ но в синтаксие С. Те же абстракции, тот же rtti и vtable, обработка исключений. В ядро с++ не пустил фанатизм и то что с++ был сильно позже стандартизирован чем С

Так код с auto_ptr не скомпилируется с включенным С++17 ( как и throw() в конце объявлении функции)

Поэтому в модулях без экспортирования макросов. Ломают все

раз было 8 редакций то скорее всего не все так просто и проблем было много под капотом ( а не просто вид функции)

это только один из плюсов, есть и другие два - контроль над экспортом ( что не дают инклуды, благодаря чему есть namespace detail) и просто другая организация кода. что по скорости то gcc сейчас в 3 раза медленее билдит модули чем кланг

ну Антон один из основных майнтейнеров буста, так что как минимум ему можно написать

С gcc да согласен несколько сложнее жить. gcc в некоторых аспектах строже clang и сильно фанатичнее следует стандарту ( разработчики LLVM можно сказать оставили допущения на переходный период), плюс clangd сейчас умеет работать только clang модулями ( за то оч хорошо сейчас работает, проверял на macos и linux)

у буста немного другой подход к модуляризаци своих либ, не через такую прослойку. Посмотрите доклад антона полухина с С++ZeroCostConf 2025 ну или посмотрите на уже модулязирование либы буста. И пропробуйте модуляризировать в их стиле ( часть либ уже модулязирована)

Можно скомпилировать код с использованием с++26 и уже в коде будет меньше UB.

Поздравляю команду PVS-Studio с этим достижением, это очень значимое событие

clangd 21 уже хорошо справляется с этим, а поддержка включена с 19 c использованием опции --experimental-modules-support

Вывод таков. Что переходим на модули, так как они сильно сокращают размер бинарей, за счет того что к нам не тащится из include вся стандартная бибиблотека. Плюс системы сборки уже в достаточной мере стали поддерживать модули

Если include iosream заменить на import std;

import std;

int main(){

std::cout << "Hello World" << std::endl;

return 0;

}

g++16 -std=c++23 -fmodules --compile-std-module main.cpp

Сгенерированый бинарник весит всего 16,5 кб

Показываю пример на gcc16 так как только с этой версии появилась удобная опция

для подключения import std; ( До этого делается чуть сложнее но резлуьтта должен быть таким же)

Если заменить на std::println то размер бинарника составляет ~241КБ

Но это и логично так как тащится уже и std::format и к нему еще сверху

неа модельки лучше работу не сделают, просто пыль в глаза пускают

ага при этом буст в псоледних версиях прекратил поддержку С++03

Надеюсь мне не доведется пользоваться ваши продуктом, написаным с помощью ии

Information

Rating
4,481-st
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity

Specialization

Десктоп разработчик
Старший
ООП
Linux