Выбор языка для переносимой библиотеки - PullRequest
4 голосов
/ 22 июня 2009

Я хочу написать библиотеку, которая будет динамически связана с другими программами, работающими в современных операционных системах, таких как Windows, Linux и OS / X (т.е. она будет развернута как модуль .dll или .so).

Какой язык наиболее подходит в этом случае? Должен ли я придерживаться простой C? Или C ++ тоже нормально?

Ответы [ 5 ]

14 голосов
/ 22 июня 2009

Вы можете использовать либо C, либо C ++ для реализации, но я бы порекомендовал определить интерфейс на чистом C. Интегрировать будет намного проще.

2 голосов
/ 22 июня 2009

Сложность создания библиотеки C ++, распространяемой в двоичном виде, заключается в том, что ваши клиенты - пользователи библиотеки - обычно вынуждены использовать тот же компилятор C ++, с которым вы создали библиотеку. Это может быть проблематично, если вы хотите идти в ногу со временем, а они нет, или если они хотят идти в ногу со временем, а вы нет. Если вы имеете дело с исходным кодом, это не проблема, если ваш C ++ достаточно переносим, ​​чтобы позволить его использовать всем компиляторам, которые используют ваши клиенты.

Если код можно использовать из C, я бы, вероятно, написал код для интерфейса C. Альтернативно, предоставьте два интерфейса - собственный интерфейс C ++ и интерфейс C. Но это больше, чем просто интерфейс на C. С другой стороны, могут быть преимущества интерфейса C ++ (возможно, с использованием итераторов STL и т. Д.), И это может повлиять на ваше решение.

1 голос
/ 22 июня 2009

Я бы также сказал, что C является наименьшим общим знаменателем.У вас всегда есть возможность записать оболочку C ++ в базовую библиотеку, если это лучше интегрируется с вызывающим приложением.

0 голосов
/ 22 июня 2009

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

0 голосов
/ 22 июня 2009

Я бы сказал, что C наиболее предсказуемо переносим, ​​но C ++ выполним.

...