Достаточно было добавить в стандарт с++ раздел по бинарной совместимости.
Вот так просто. :)
И почему не добавили, как думаешь?
Это как это перестают? Они бросаются, а дальше ось за тобой подчистит после приложения и мирно его упокоит.
Бросить-то ты можешь. «плюсовый» компилятор такое не запретит.
Но бросок этот из шаред библиотеки — не закончится ничем хорошим. :)
Статические библиотеки не распространены по совсем другим причинам, вообще-то.
По этим. Если бы не эти причины, распространяли бы код в них — это удобнее, чем шаред-библиотеки.
В сишке с большего все в этом плане хорошо, если не смотрять на какие-то уж совсем маргинальные компиляторы.
С разными компиляторами тоже всё плохо. Скомпилированная под gcc статическая библиотека — будет неюсабельна в силанге или в вижуалс.
ну расскажи, как же я использую тот же кьют, где остался только си, или стд либы или сотни других библиотек типа буста и тд
Qt распространяется в исходниках. Буст тоже.
А по «qt static libraries» — находится, к примеру, такое: doc.qt.io/...t-5/linux-deployment.html
«Building Qt Statically»...
Так и используешь...
Чувак, ABI есть всегда.
Ок, уговорил. Переформулирую: в мире «плюсов» АБИ-совместимость ограничивается одной конкретной версией конкретного компилятора — которым был скомпилирован код. :)
Собственно, поэтому ты не увидишь «плюсового» кода, распространяемого в виде статических библиотек. Для распространения «плюсового» — существуют либо шаред библиотеки (из которых выкинуто всё плюсовое, а интерфейс полностью сведен к С), либо исходники.
ABI есть
Лишь в виде недоделанных спецификаций.
есть четкие правила нейм манглинга для плюсов, не надо пороть чушь
Различный нэйм-манглинг при экспорте — есть и для сишного кода. Я вообще не об этом.
А вот здесь ты полностью ошибаешься.
Регулярно встречаю адские корчи мобильщиков, пытающихся топором и напильником запихнуть к себе в мобайл какую-нибудь реализацию стл, чтобы попользоваться оттуда херью типа стринга или мэпа.
А в эмбедде, редко где вообще «плюсовый» компилятор встретишь. Или если yж встретишь — это будут совсем иные «плюсы» чем те, к которым ты привык.
Itanium ABI — это дефакто стандарт на невиндовых системах
Так нет его. Он существует лишь в виде драфтов недоделанных спецификаций.
Получается, что этот сишник незрелый )
Скорее, аудитория собраласъ недозрелая, ни в «сях», ни в «плюсах.» Я ведь пишу элементарные общеизвестные вещи — а это для людей откровения и вызывает полыхания. :)
Ок, разжую совсем мелко. Что предусматривает АБИ-стандарт? Компилируешь код в бинарный вид — и используешь его везде, где этот стандарт поддерживается. И тут оказывается, что с «сишным» кодом такое неплохо работает даже в виде статических библиотек (херь, скомпилированная на древнем gcc под тот же Линукс
Такая вот разница в АБИ.
Зачем глупости писать продолжаешь?
„Specific software implementations like the C library may impose additional limitations to form more concrete ABIs; one example is the GNU OABI and EABI for ARM, both of which are subsets of the ARM EABI .”
Найди здеь упоминание „плюсов”.
Впрочем, в статье есть ссылка на попытку формализации „плюсового” АБИ для Итаниума — так и оставшаяся в виде драфтов...
Так все таки, что такое ABI?
en.wikipedia.org/...lication_binary_interface
В мире «си» подобное существует, в том же линукс-кернеле.
В мире «плюсов» существование, подозреваю, нереально в принципе. Т.к. нет совместимости «плюсовых» бинарников, даже одного кода — после обработки разными версиями одного «плюсового» компилятора.
Плюсовых в библиотек в жизни не видел, не слышал, не знаешь?
Видел. Говнецо, в бинарном виде не совместимое ни с чем — кроме самой себя.
А для того, чтобы хоть как-то экспортировать «плюснутое» из шаред библиотеки — приходится пользовать extern «C». При этом, полностью кастрировав все «плюсовые» фичи.
Такая вот «бинарная совместимость». :)
Linux Kernel
Хороший пример, кстати. И в смысле наличия АБИ тоже.
Cross-platform + embedded
В кросс-платформе — портабельностъ «плюсов» невелика. В эмбеде — отстутствует.
Наслідування інтерфейсів, як traits в Scala, досить кошерне.
Ромбовидное наследование в «плюсах» (т.н. «виртуальный базовый класс») — это не об интерфейсах.
libc? Ні, не чув.
msvcrt? Ні, не чув.Які сішники, така і зрілість.
extern «C» ? Не, не слыхал.
А между тем, чтобы обеспечитъ хоть какую-то возможность экспортировать функции из шаред библиотек — «плюсовикам» приходится прибегать к старым-добрым сишным конвенциям, со всеми ихними ограничениям. Т.е. прощайте вируальные вызовы, исключения, RAII, темплиты, итп «плюснутая» хрень — которую даже не смогли экспортировать за пределы библиотек (о какой уж там «бинарной совместимости» этого кода говорить).
И это я ещё не касался вопросов выхода статической «плюсовой» библиотеки (в бинарном виде), за пределы сделавшего библиотеку компилятора/линкера и тулсета.
Пфф, с какой стати они вообще имеют отношение к уволенным?
Отличие от работающих в том, что работающие платят налоги — а сидящие на курцарбайте (как и собственно безработные) из налогов жрут.
Потому, когда в европейских статистиках по безработице рисуют цифры только из безработных — это фикция.
extern «C» это больше, чем просто манглинг или очерёдность параметров. Но жабаскриптерам то неведомо. :)