API vs ABI
От: Hоmunculus  
Дата: 07.12.25 07:59
Оценка: -1 :)
А в чем отличие? Это типа если пишешь библиотеку в стиле С — то есть без всяких классов — это АБИ? То есть будет цепляться к любому языку и платформе? А если классы чисто для конкретного языка, то АПИ?
Re: API vs ABI
От: Doom100500 Израиль  
Дата: 07.12.25 08:46
Оценка: 80 (2) +1
Здравствуйте, Hоmunculus, Вы писали:

H>А в чем отличие? Это типа если пишешь библиотеку в стиле С — то есть без всяких классов — это АБИ? То есть будет цепляться к любому языку и платформе? А если классы чисто для конкретного языка, то АПИ?


АБИ — это бинарный интерфейс. Речь о совместимости модулей. Грубо говоря — о возможности слинковаться с модулем, скомпилированным другим компилятором. Это не выражается в пользовательском коде. Это про внутренний формат бинарных файлов.

педовика

Двоичный (бинарный) интерфейс приложений (англ. application binary interface, ABI) — набор соглашений для доступа приложения к операционной системе и другим низкоуровневым сервисам, спроектированный для переносимости исполняемого кода между машинами, имеющими совместимые ABI[1]. В отличие от API, который регламентирует совместимость на уровне исходного текста, ABI можно рассматривать как набор правил, позволяющих компоновщику объединять откомпилированные модули компонента без перекомпиляции всего исходного текста, в то же время определяя двоичный интерфейс[2].

Спасибо за внимание
Re: API vs ABI
От: kov_serg Россия  
Дата: 07.12.25 11:33
Оценка: +1
Здравствуйте, Hоmunculus, Вы писали:

H>А в чем отличие? Это типа если пишешь библиотеку в стиле С — то есть без всяких классов — это АБИ? То есть будет цепляться к любому языку и платформе? А если классы чисто для конкретного языка, то АПИ?

Апи это програмный интерфейс
interface A {
  handle open(name);
  void close(handle);
}

А ABI это как передавать параметры (stdcall,pascal,fastcall,...), в стеке в регистрах, как выравнивать, какие регистры нельзя трогать, в какие можно менять, не сохраняя т.п. или как формировать xml или json для выполнения запроса open/close.
Re: API vs ABI
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 07.12.25 11:53
Оценка: +1
Здравствуйте, Hоmunculus, Вы писали:

H>А в чем отличие? Это типа если пишешь библиотеку в стиле С — то есть без всяких классов — это АБИ? То есть будет цепляться к любому языку и платформе? А если классы чисто для конкретного языка, то АПИ?


Это всё API. ABI — это то, как реализуются различные механизмы на низком уровне. Как параметры передаются, как исключения обрабатываются, и тп. ABI на одной программно-аппаратной платформе (x86-Linux, x64-Windows, и тп) обычно одно. Хотя, GCC вроде между мажорными версиями иногда ломает совместимость ABI, и glibc разных мажорных версий бывают несовместимы.
Маньяк Робокряк колесит по городу
Re: API vs ABI
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 07.12.25 12:41
Оценка: 2 (1) -2
Здравствуйте, Hоmunculus, Вы писали:

H>А в чем отличие?


Очень наглядный пример — это debug и release сборки. Есть у тебя dll, которой ты передаешь, например, std::string или std:: vector. API не меняется, а ABI у debug будет другой, потому что stl контейнеры по-умолчанию будут иметь другой размер и вести себя соответственно. Программа упадёт, если собрать exe в release, а dll в debug. Но API же не изменился!
Re: API vs ABI
От: Pzz Россия https://github.com/alexpevzner
Дата: 07.12.25 15:00
Оценка: 84 (2) +1
Здравствуйте, Hоmunculus, Вы писали:

H>А в чем отличие? Это типа если пишешь библиотеку в стиле С — то есть без всяких классов — это АБИ? То есть будет цепляться к любому языку и платформе? А если классы чисто для конкретного языка, то АПИ?


API — это совместимость на уровне исходников.

ABI — это когда для совместимости исходники не требуются.

Даже и в случаи C на некоторых платформах соглашения о вызовах, например, менялись. Т.е., ломалась совместимость на уровне ABI.

В случае C++ совместимость на уровне ABI обеспечить можно, но придётся специально поднапрячься. А в случае Go, например, совместимость на уровне ABI никто не обещал и никто не отгружал.
Re[2]: API vs ABI
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 07.12.25 15:09
Оценка: +1 -2
Здравствуйте, Nuzhny, Вы писали:

N>Очень наглядный пример — это debug и release сборки.


Это как раз наглядный пример того, что не является ABI.

N>ABI у debug будет другой


Не будет, если явно не менять то, что относится к ABI (например, stdcall на fastcall).

N>потому что stl контейнеры по-умолчанию будут иметь другой размер


Это не относится к ABI.

N>Программа упадёт, если собрать exe в release, а dll в debug. Но API же не изменился!


И ABI не изменился. Изменились ожидаемые неявные параметры.
Отредактировано 07.12.2025 15:11 Евгений Музыченко . Предыдущая версия .
Re[3]: API vs ABI
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 07.12.25 17:26
Оценка: +1
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>И ABI не изменился. Изменились ожидаемые неявные параметры.


Что это такое? Никогда не слышал термина, он существует? Можно ссылочку на документ с разъяснениями?
Re[4]: API vs ABI
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 07.12.25 17:43
Оценка:
Здравствуйте, Nuzhny, Вы писали:

ЕМ>>Изменились ожидаемые неявные параметры.


N>Что это такое?


Э-э-э... Например, когда функции передается указатель на массив, и она неявно ожидает, что в нем будет не меньше, скажем, трех элементов.

N>Никогда не слышал термина, он существует?


Это не термин, а обычное описательное выражение. В англоязычной литературе часто обозначается словами "assumptions", "expectations" и т.п.
Re[5]: API vs ABI
От: Hоmunculus  
Дата: 07.12.25 17:49
Оценка: -1 :))
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Э-э-э... Например, когда функции передается указатель на массив, и она неявно ожидает, что в нем будет не меньше, скажем, трех элементов.


Что это за АПИ такой? Всегда когда передают указатель на массив, то передают и количество.
Re[6]: API vs ABI
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 07.12.25 17:53
Оценка:
Здравствуйте, Hоmunculus, Вы писали:

ЕМ>>Э-э-э... Например, когда функции передается указатель на массив, и она неявно ожидает, что в нем будет не меньше, скажем, трех элементов.


H>Что это за АПИ такой?


Допустим, он его только что придумал


H>Всегда когда передают указатель на массив, то передают и количество.


Совсем не обязательно
Маньяк Робокряк колесит по городу
Re[7]: API vs ABI
От: Hоmunculus  
Дата: 07.12.25 17:57
Оценка:
Здравствуйте, Marty, Вы писали:


M>Совсем не обязательно


Ну ясно что необязательно. В лабораторных либах. А в реальных не видел чтоб не было. Я не про указатель на участок памяти, а именно на какой-то массив. Ну хотя… если ожидается матрица 4 на 4 или типа того… то да, наверное реальный случай
Re[5]: API vs ABI
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 07.12.25 17:59
Оценка: +1
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>>>Изменились ожидаемые неявные параметры.

N>>Что это такое?
ЕМ>Э-э-э... Например, когда функции передается указатель на массив, и она неявно ожидает, что в нем будет не меньше, скажем, трех элементов.

Не, это фигня какая-то. Давай, с std::string.
Например, применение SSO в std::string ломает ABI, но не API:

This is disallowed by ABI3 constraints. Additional research on optimization and SSO-tuning for std::string is also assumed to be worth a non-trivial performance boost (1% macrobenchmark/fleet performance) — this has no API impact, but is disallowed by ABI constraints.

Это по мнению члена комитета по С++, если что.

Далее можно почитать большую статью Саттера на тему ABI, там будут аналогичные примеры с std::string, которая где-то реализует, например, copy-on-write, а где-то и нет. И по его мнению, это ломает ABI.

То есть я использую термин ABI для обозначения изменения поведения и/или размера стандартных сущностей из С++ также, как чоены комитета по С++. Разве нет?

N>>Никогда не слышал термина, он существует?

ЕМ>Это не термин, а обычное описательное выражение. В англоязычной литературе часто обозначается словами "assumptions", "expectations" и т.п.

Ну, так у нас разговор сейчас именно про термины. Я ошибаюсь с границами термина ABI? Мне кажется, что нет. Есть ли какой-то другой термин? Видимо нет, просто описательное выражение.
Re[6]: API vs ABI
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 07.12.25 18:04
Оценка:
Здравствуйте, Hоmunculus, Вы писали:

H>Что это за АПИ такой? Всегда когда передают указатель на массив, то передают и количество.


Вы за свою жизнь сколько API видели — два, три, четыре?
Re[7]: API vs ABI
От: Hоmunculus  
Дата: 07.12.25 18:06
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Здравствуйте, Hоmunculus, Вы писали:


H>>Что это за АПИ такой? Всегда когда передают указатель на массив, то передают и количество.


ЕМ>Вы за свою жизнь сколько API видели — два, три, четыре?


Ну да, да. Не сразу вспомнились. В опенгл и в опенсв есть такие функции
Re[6]: API vs ABI
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 07.12.25 18:36
Оценка:
Здравствуйте, Nuzhny, Вы писали:

N>Я ошибаюсь с границами термина ABI?


Об ABI уместно говорить там, где есть спецификация интерфейса. Если для std::string документировано, что/где/как должно лежать в двоичном виде в отладочных/релизных сборках, то это ABI. Если же все упирается в неявные зависимости от параметров, которые по-разному определяются в разных сборках, то это те самые assumptions.
Re[8]: API vs ABI
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 07.12.25 18:37
Оценка:
Здравствуйте, Hоmunculus, Вы писали:

H>В опенгл и в опенсв есть такие функции


Да их тьма повсюду. Даже в хорошо проработанных API встречаются.
Re[8]: API vs ABI
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 07.12.25 18:44
Оценка:
Здравствуйте, Hоmunculus, Вы писали:

M>>Совсем не обязательно


H>Ну хотя… если ожидается матрица 4 на 4 или типа того… то да, наверное реальный случай


Вот ты и начинаешь понимать, что бывает по-разному
Маньяк Робокряк колесит по городу
Re[7]: API vs ABI
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 07.12.25 18:53
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Об ABI уместно говорить там, где есть спецификация интерфейса.


Это не общеупотребительное определение. Обычно как раз разделяют низкоуровневое ABI типа cdecl/stdcall и другой штуки. А также выделяю C++ABI, которое как раз про реализацию исключений, стандартной библиотеки и т.д.
Очевидно, мы говорим просто о разных уровнях.
Re[8]: API vs ABI
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 07.12.25 18:59
Оценка: +1
Здравствуйте, Nuzhny, Вы писали:

ЕМ>>Об ABI уместно говорить там, где есть спецификация интерфейса.


N>Это не общеупотребительное определение. Обычно как раз разделяют низкоуровневое ABI типа cdecl/stdcall и другой штуки. А также выделяю C++ABI, которое как раз про реализацию исключений, стандартной библиотеки и т.д.

N>Очевидно, мы говорим просто о разных уровнях.

Очевидно. C++ ABI — оно только для C++.
Маньяк Робокряк колесит по городу
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.