Интегрировать библиотеку C с Java, Ruby, Node, Python, Go, .NET
Статус кво
Для моего проекта мне нужна клиентская библиотека, которая взаимодействует с моим API для каждой основной платформы программирования. В настоящее время я реализовал только один (Java) и думал: "Я не хочу делать это 8 раз (или надеюсь, что это сделает кто-то другой)".
Клиент относительно маленький, но не банальный; в основном выполняет чтение / запись JSON и отправку данных TCP/UDP через SSL. Каждый звонок клиенту запускается и забывается, поэтому он работает полностью асинхронно в своем собственном потоке.
проблема
Я спрашивал себя, имеет ли смысл написать одну библиотеку C и интегрировать ее с другими платформами.
Я провел небольшое исследование, и кажется, что каждая платформа имеет дело с этим по-разному (очевидно) с различными необходимыми усилиями. Я также понял, что никогда не видел ничего подобного - например, драйверы баз данных всегда пишутся с нуля, а не используют библиотеку C в ядре. Слишком большие накладные расходы?
Я также читал о Thrift, Protocol Buffers и т. Д. - но это, кажется, нацелено на совместимость сети?
Вопрос
Итак, последний вопрос:
Возможно ли использовать одну библиотеку C в ядре клиента каждой платформы? Если да, то как это сделать?
1 ответ
Использование библиотеки C имеет смысл, если вы хотите объединить все реализации одной и той же функциональности в один фрагмент кода - это, вероятно, единственный язык, который может универсально использоваться языками более высокого уровня.
Ваша работа была бы значительно проще, если бы вы могли до некоторой степени автоматизировать процесс. Возможно, вы захотите взглянуть на SWIG. Это генератор привязки, который позволяет использовать код C/C++ с большим количеством других языков программирования, включая большинство, если не все, языки, которые вы упомянули.
Для моего довольно поверхностного опыта с этим SWIG делает довольно приличную работу, хотя сгенерированный код иногда нуждается в некоторой настройке...