Size: a a a

2020 May 16

I

Igor in pro.cxx
В рамках с++17 комитет обсуждал вопрос ломать или не ломать текущий ABI языка c++. Какие сейчас есть ABI гарантии? На сколько понимаю интерфейс например как void fn(std::string) нельзя считать переносимым ведь детали имплементации строки могут меняться.
источник

AM

Alexander Malkov in pro.cxx
Igor
В рамках с++17 комитет обсуждал вопрос ломать или не ломать текущий ABI языка c++. Какие сейчас есть ABI гарантии? На сколько понимаю интерфейс например как void fn(std::string) нельзя считать переносимым ведь детали имплементации строки могут меняться.
источник

AM

Alexander Malkov in pro.cxx
а вообще, я недавно узнал, что ABI разные у GCC и CLang
источник

IL

Ignat Loskutov in pro.cxx
Igor
В рамках с++17 комитет обсуждал вопрос ломать или не ломать текущий ABI языка c++. Какие сейчас есть ABI гарантии? На сколько понимаю интерфейс например как void fn(std::string) нельзя считать переносимым ведь детали имплементации строки могут меняться.
Собственно стандарт про ABI не говорит ничего, но при сборке вы так или иначе завязываетесь на имплементацию стандартной библиотеки, и распространённые имплементации стараются его без серьёзных причин не ломать — в libstdc++, например, ABI в последний раз менялся из-за новых требований C++11 про std::basic_string и std::list. Это многим не понравилось, поэтому теперь стараются не вносить изменений, которые вынуждают имплементации обновлять ABI.
источник

AM

Alexander Malkov in pro.cxx
И как я понимаю, у CLang посовременнее будет ABI, так как GCC стремиться сохранить в основном компабилити со старыми системами
источник

AM

Alexander Malkov in pro.cxx
стоп, туплю я.. abi зависит от libstdc++
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
В libcxx аби можно переключать флажком, насколько я помню
источник

AM

Alexander Malkov in pro.cxx
меня больше интересует сейчас, на какой стадии Networking TS, будут ли его включать в 23 году?
источник

I

Igor in pro.cxx
Ignat Loskutov
Собственно стандарт про ABI не говорит ничего, но при сборке вы так или иначе завязываетесь на имплементацию стандартной библиотеки, и распространённые имплементации стараются его без серьёзных причин не ломать — в libstdc++, например, ABI в последний раз менялся из-за новых требований C++11 про std::basic_string и std::list. Это многим не понравилось, поэтому теперь стараются не вносить изменений, которые вынуждают имплементации обновлять ABI.
возьмём линукс, я правильно понимаю что сейчас перенос бинарей , собранных разными (версиями) компиляторов работает просто потому что все придерживаются негласного стандарта?
источник

A

Alex in pro.cxx
Igor
возьмём линукс, я правильно понимаю что сейчас перенос бинарей , собранных разными (версиями) компиляторов работает просто потому что все придерживаются негласного стандарта?
там тоже вопросы с версией библиотеки libc (насчёт libс++ не знаю)
источник

AM

Alexander Malkov in pro.cxx
ну вот, на днях, выкатывал один проект на прод и там была необходима линковка к одной библиотеке, уже скомпилированной, для начала скомпилировал все через GCC, компиляция прошла без ошибок и варингов, а вот на стадии линковки пошли ошибки.. пробовал разные ключи, последовательность линковки - никак, причем, что на моей машине, все норм работает, в итоге просто взял и скомпилировал через CLang, запустилось с первого раза, без единой проблемы..
источник

AM

Alexander Malkov in pro.cxx
как мне потом "подсказали", что это возможно из-за разницы в ABI
источник

AM

Alexander Malkov in pro.cxx
поэтому, ABI - это достаточно болезненная тема..
источник

AM

Alexander Malkov in pro.cxx
так же была недавно проблема с Boost.Regex, когда использовал пакет libboost-dev то, на CLang были ошибки линковки.. Хотя все библиотеки были доступные и openssl и icu и regex был готовый.. так вот, пока ручками Boost.Regex не пересобрал тем же компилятором, что и собирал проект, ничего не взлетело...
источник

AM

Alexander Malkov in pro.cxx
Поэтому, проблема совместимости она и сейчас актуальна..!
источник

I

Igor in pro.cxx
собственно мой вопрос был о том существует ли штука,  которую так боятся сломать в  комитете
источник

AM

Alexander Malkov in pro.cxx
Да и в статье, указанной выше, @antoshkka, указывает, что это решение GCC, видимо поэтому так сильно и отличается GCC от CLang, что приходиться выбирать один компилятор под все..
источник

IL

Ignat Loskutov in pro.cxx
Igor
возьмём линукс, я правильно понимаю что сейчас перенос бинарей , собранных разными (версиями) компиляторов работает просто потому что все придерживаются негласного стандарта?
источник

CD

Constantine Drozdov in pro.cxx
Ignat Loskutov
Собственно стандарт про ABI не говорит ничего, но при сборке вы так или иначе завязываетесь на имплементацию стандартной библиотеки, и распространённые имплементации стараются его без серьёзных причин не ломать — в libstdc++, например, ABI в последний раз менялся из-за новых требований C++11 про std::basic_string и std::list. Это многим не понравилось, поэтому теперь стараются не вносить изменений, которые вынуждают имплементации обновлять ABI.
Да, а можете объяснить, в чем вообще проблема со сменой ABI
источник

IL

Ignat Loskutov in pro.cxx
Сложнее линковаться со старыми библиотеками, которые по каким-то причинам не пересобрать ¯\_(ツ)_/¯
источник