Size: a a a

2020 June 19

MM

Mikhail Matrosov in pro.cxx
а если мы не хотим её экспортировать, хотим использовать только внутри модуля, но при этом у нас всё модно и нет хедеров. то куда её вообще положить?..
источник

AD

Andrey Davydov in pro.cxx
Ну скажем в module interface unit-е, но не экспортировать. Или создать module partition, экспортировать из него и использовать в тех местах модуля, где нам надо, но не переэкспортировать наружу.
источник

MM

Mikhail Matrosov in pro.cxx
Andrey Davydov
Ну скажем в module interface unit-е, но не экспортировать. Или создать module partition, экспортировать из него и использовать в тех местах модуля, где нам надо, но не переэкспортировать наружу.
"в module interface unit-е, но не экспортировать" - норм, хотя несколько странно, что клиент сможет её видеть. хотя и не сможет использовать
источник

MM

Mikhail Matrosov in pro.cxx
по поводу дистрибуции. я правильно понимаю, что если мы распространяем библиотеку как модуль, то мы высылаем бинарь и cppm? т.е. точно так же как раньше, только cppm вместо hpp?
источник

AD

Andrey Davydov in pro.cxx
Mikhail Matrosov
"в module interface unit-е, но не экспортировать" - норм, хотя несколько странно, что клиент сможет её видеть. хотя и не сможет использовать
Что значит "может видеть"? Глазками посмотрев исходники?
источник

AD

Andrey Davydov in pro.cxx
Mikhail Matrosov
по поводу дистрибуции. я правильно понимаю, что если мы распространяем библиотеку как модуль, то мы высылаем бинарь и cppm? т.е. точно так же как раньше, только cppm вместо hpp?
да
источник

MM

Mikhail Matrosov in pro.cxx
Andrey Davydov
Что значит "может видеть"? Глазками посмотрев исходники?
да. именно.
источник

MM

Mikhail Matrosov in pro.cxx
Andrey Davydov
Ну скажем в module interface unit-е, но не экспортировать. Или создать module partition, экспортировать из него и использовать в тех местах модуля, где нам надо, но не переэкспортировать наружу.
"создать module partition" - окей, это колдунство я пока не очень осознал, так что не могу прокомментировать ))
источник

MM

Mikhail Matrosov in pro.cxx
Andrey Davydov
да
отлично )
источник

AD

Andrey Davydov in pro.cxx
Смотрю ты плотно взялся за подготовку доклада, чего так рано ещё ж пару недель есть?
источник

MM

Mikhail Matrosov in pro.cxx
😁
источник

MM

Mikhail Matrosov in pro.cxx
всё остальное уже готово )
источник

MM

Mikhail Matrosov in pro.cxx
про модули у меня будет всего пара слайдов, осталось только понять, что туда написать ))
источник

AD

Andrey Davydov in pro.cxx
Mikhail Matrosov
меня вообще этот вопрос интересует в рамках подготовки доклада :) и я хочу понять, как правильно объявлять константы в модулях. если они экспортируются, то тут всё вроде понятно.
export constexpr T x = value;
Я где-то слышал, что Gabriel Dos Reis задумался о создании модулей, когда работал над constexpr functions, чтоб было где их писать.
источник

MM

Mikhail Matrosov in pro.cxx
Andrey Davydov
Я где-то слышал, что Gabriel Dos Reis задумался о создании модулей, когда работал над constexpr functions, чтоб было где их писать.
Ещё вопрос по модулям, если позволишь. Я вот тут экспериментирую и сделал такую демку https://wandbox.org/permlink/pSDgWCv4AO71wcpc Тут в module interface unit common.cpp объявлено две константы: export constexpr int ec = 18; и const std::string str = "abc";. С ес всё понятно, она экспортится, у неё external linkage. А вот с str не очень. Я её использую в других единицах трансляции этого модуля - в impl1 и impl2. Т.е. у неё явно module linkage. НО. Из стандарта вроде бы следует, что должен быть internal: http://eel.is/c++draft/basic.link#3 потому что она "a non-template variable of non-volatile const-qualified type". В следующем абзаце идут ещё правила, но только для "name having namespace scope that has not been given internal linkage above". А мы для неё уже получили internal linkage above. Собственно вопрос. Это просто кланг пока работает не по стандарту, или это я не умею его читать?
источник

AD

Andrey Davydov in pro.cxx
Mikhail Matrosov
Ещё вопрос по модулям, если позволишь. Я вот тут экспериментирую и сделал такую демку https://wandbox.org/permlink/pSDgWCv4AO71wcpc Тут в module interface unit common.cpp объявлено две константы: export constexpr int ec = 18; и const std::string str = "abc";. С ес всё понятно, она экспортится, у неё external linkage. А вот с str не очень. Я её использую в других единицах трансляции этого модуля - в impl1 и impl2. Т.е. у неё явно module linkage. НО. Из стандарта вроде бы следует, что должен быть internal: http://eel.is/c++draft/basic.link#3 потому что она "a non-template variable of non-volatile const-qualified type". В следующем абзаце идут ещё правила, но только для "name having namespace scope that has not been given internal linkage above". А мы для неё уже получили internal linkage above. Собственно вопрос. Это просто кланг пока работает не по стандарту, или это я не умею его читать?
Как я вижу в Clang-е сейчас беда: internal linkage переменные манглятся именем модуля (как module linkage) вместо имени .cpp
https://wandbox.org/permlink/7NEok0iJupUycGea
источник

AD

Andrey Davydov in pro.cxx
Отвечая на твой следующий вопрос, а как тогда сделать module linkage константу, видимо должно сработать const inline.
источник

MM

Mikhail Matrosov in pro.cxx
Andrey Davydov
Как я вижу в Clang-е сейчас беда: internal linkage переменные манглятся именем модуля (как module linkage) вместо имени .cpp
https://wandbox.org/permlink/7NEok0iJupUycGea
ага, то есть кланг не прав?
источник

MM

Mikhail Matrosov in pro.cxx
Andrey Davydov
Отвечая на твой следующий вопрос, а как тогда сделать module linkage константу, видимо должно сработать const inline.
да, я так и собирался
источник

AD

Andrey Davydov in pro.cxx
Mikhail Matrosov
ага, то есть кланг не прав?
Не прав. И он еще не реализует эту логику http://eel.is/c++draft/basic.link#18, но она появилась в стандарте совсем недавно, видимо после пражского заседания в феврале, еще полгода назад не было понятия TU-local.
источник