На днях в Праге комитет по стандартизации С++ провел ряд опросов по вопросу изменения ABI, и в конечном счете было решено ничего в нем не менять. Аплодисментов в зале слышно не было.
Я думаю, мы не осознавали полностью те последствия, которое повлечет за собой данное решение, и я не верю, что оно в принципе может положительно сказаться на развитии языка.
Рубрика «abi»
День смерти стандартной библиотеки
2020-02-27 в 11:34, admin, рубрики: abi, c++, C++20, WG21, ПрограммированиеC++20 утверждён! Чего ждать и к чему готовиться разработчикам в C++23
2020-02-19 в 6:56, admin, рубрики: abi, abi c++, c++, c++ библиотеки, C++20, c++23, concepts, contracts, coroutine, coroutines, IT-стандарты, malloc, modules, ranges, Блог компании Яндекс, Компиляторы, Программирование, стандарт, стандартизацияНа днях в Праге прошла встреча международного комитета по стандартизации C++. И-и-и-и…
C++20 готов! Осталось поставить штампик от ISO, но это чисто формальный шаг, с которым не должно быть проблем.
Поздравляю всех с этим замечательным событием! Concepts, Coroutines, Modules, Ranges, std::format, constexpr new и constexpr алгоритмы+vector+string, datetime, jthread, span, bit_cast и многие другие мелкие и большие нововведения.
Что успели добавить и поправить в последний момент, что предложили разломать и что все хотят видеть в C++23 — обо всём этом под катом.
Читать полностью »
Бинарная совместимость: сейчас или никогда
2019-11-02 в 16:33, admin, рубрики: abi, бинарная совместимость, Программирование, С++, стандартизацияПеревод публикации Тита Винтерса в рабочей группе 21 (WG21) — комитета по стандартизации языка C++. Автор обсуждает важный вопрос: поддержку обратной бинарной совместимости или ABI (application binary interface).
В течение последних лет в WG21 я активно пропагандировал то, что прогресс важнее обратной совместимости. Но я сам перестаю в это верить, особенно в отношении поддержания бинарной совместимости (ABI). Читать полностью »
Как размеры массивов C стали частью двоичного интерфейса библиотеки
2019-05-10 в 6:46, admin, рубрики: abi, array, C, двоичный интерфейс, размер массиваБольшинство компиляторов C позволяют получить доступ к массиву extern
с неопределёнными границами, например:
extern int external_array[];
int
array_get (long int index)
{
return external_array[index];
}
Определение external_array может находиться в другой единице трансляции и выглядеть так:
int external_array[3] = { 1, 2, 3 };
Вопрос в том, что произойдет, если это отдельное определение изменится так:
int external_array[4] = { 1, 2, 3, 4 };
Или так:
int external_array[2] = { 1, 2 };
Особенности вызова функций в С++
2018-06-18 в 10:46, admin, рубрики: abi, c++, clang, optional, system v, xeon, виртуальные функции, вызов функции, инициализация, массивы, ненормальное программирование, оптимизация, Программирование, производительность, хвостовая рекурсияНе так давно у меня произошёл очередной разговор с коллегой на извечную тему: "по ссылке, или по значению". В результате возникла данная статья. В ней я хочу изложить результаты моего исследования по этой и смежным темам. Далее будут рассмотрены:
- Регистры и их назначение при вызове функций.
- Передача и возврат простых типов и структур.
- Как передача по ссылке и по значению влияют на оптимизации тела функции компилятором.
- Как используется место при многочисленных вызовах функций.
- Механизм виртуальных вызовов.
- Оптимизация хвостовых вызовов и рекурсии.
- Инициализация структур, массивов и векторов.
Осторожно! Статья содержит большое количество кода на C++ и ассемблере (с комментариями), а также множество таблиц с оценками производительности.
Тернистый путь Hello World
2017-10-12 в 9:55, admin, рубрики: abi, C, c++, glibc, startup, Разработка под LinuxВдохновение на написание данной статьи было получено после прочтения похожей публикации для архитектуры x86 [1].
Данный материал поможет тем, кто хочет понять, как устроены программы изнутри, что происходит до входа в main и для чего всё это делается. Также я покажу как можно использовать некоторые особенности библиотеки glibc. И в конце, как и в оригинальной статье [1] будет визуально представлен пройденный путь. В большинстве своём статья представляет собой разбор библиотеки glibc.
Итак, начнём наш поход. Будем использовать Linux x86-64, а в качестве инструмента отладки — lldb. Также иногда будем дизассемблировать программу при помощи objdump.
Исходным текстом будет обычный Hello, world (hello.cpp):
#include <iostream>
int main()
{
std::cout << "Hello, world!" << std::endl;
}