Интерфейс C и C ++ - PullRequest
       19

Интерфейс C и C ++

0 голосов
/ 15 октября 2011

почему гораздо труднее предоставлять оболочки на других языках для кода C ++, чем для кода C?

Ответы [ 3 ]

2 голосов
/ 15 октября 2011

Каждый язык сталкивается со своими уникальными проблемами при взаимодействии с другими языками.

Вы можете считать C ++ «более сложным» в некотором смысле из-за его особенностей, которых нет в других языках. Возьмите, например, множественное наследование. Это очень сложная функция, и многие люди просто говорят, что ее вообще нельзя использовать. Но если он используется, как бы вы перевели это на другой язык?

Ключевым моментом, однако, является то, что сам язык не более сложен для переноса - проблема в том, что сопоставление функций, которых нет в других языках, почти невозможно. Однако, если эта функция не существует на этом языке, вы должны спросить себя, почему ее там нет и вообще стоит ли вообще ее использовать.

1 голос
/ 16 октября 2011

В некоторой степени распространяясь на ответы, данные другими, следует рассмотреть еще одну неприятную проблему - исключения. Существует несколько способов реализации исключений в операционной системе, языке или библиотеке времени выполнения. То, как C ++ реализует их, в некоторых отношениях уникально. Если подпрограмма C ++ вызывается из другого языка и выдает исключение, не совсем понятно, как это следует обрабатывать. Одним из подходов было бы просто объявить все такие исключения фатальными. Не лишено смысла, но оно не позволяет использовать другие языки для выполнения полезных задач. Например, рассмотрим процедуру, которая будет перечислять список элементов и вычислять сумму; если при оценке одного из элементов возникает исключение, то исключение должно просачиваться до вызывающей программы для перечисления списка. Однако если бы процедура перечисления списка была написана на другом языке, организация исключения для правильной фильтрации через слои может быть проблематичной.

1 голос
/ 15 октября 2011

Это сильно зависит от самой библиотеки и ее дизайна.

Говоря в общих чертах, C ++ более сложен в том смысле, что в нем есть объекты, классы и интерфейсы, где C - это прежде всего функции. Функции-члены класса именуются и называются по-разному, поэтому их упаковка требует немного больше работы для обеспечения эквивалентных имен.

Как только библиотека обернута для обеспечения эквивалентного интерфейса и обработки соглашений о вызовах, следующим отличием является C ++, позволяющий передавать объекты в виде параметров функции, что может потребовать глубокого копирования и тому подобного. В библиотеке, использующей только указатели, например, COM, это не проблема (что является частью того, почему COM взаимодействует с таким количеством языков и других систем), но обработка необходимого кода копирования очень зависит от компилятора даже в C ++.

...