2013-12-15 2 views
0

Фон: Я хочу разработать компонент, создающий библиотеку классов.Как разработать многоязычную/многоплатформенную библиотеку?

  1. Этот компонент должен быть использоваться со многими языками высокого порядка, таких как C, C#, C++, VB, Java, Haskell, Ruby, Erlang, ... Я не хочу, чтобы исключить любые пользователи, которые не используя мой язык разработки. Есть ли принципы или инструменты, которые поддерживают мой проект? Я искал немного и нашел Haxle для компиляции на разные языки, но он поддерживает очень немногие из них. Я бы даже разработал параллель на всех n языках, которые будут поддерживаться, но если я хочу что-то изменить или исправить, я должен поддерживать все остальные n-1, и код, возможно, распространяется ... Это не то, что я знаю о чистом дизайн кода и ремонтопригодность. Итак, как управлять редактированием кода для разных языков? Каков правильный способ решить эту проблему? Я, конечно, не первый, кто хочет создать библиотеку для нескольких языков.

  2. Я хочу развить эту библиотеку (в данном случае для уменьшения сложности) на одном целевом языке, но на этот раз для нескольких платформ (Unix, Win, Mac ...). Как справиться с этим? На самом деле будет оценено около 90% кода, который не зависит от платформы и 10%, который отличается для каждой ОС. Каков наилучший способ контроля изменений в зависимом от платформы коде? (Независимо легко ...) Что делать, если я изменяю такие вещи в части, которая использует код, зависящий от Unix, тогда мне нужно отслеживать все остальные платформы и, возможно, распространять код. Я думаю #IFDEF не вариант ...

Есть ли опыт или советы?
Я был бы рад, если бы существовали решения этих проблем, которые очень похожи.

+1

так что ждите ... что ваш конкретный вопрос? В чем проблема, с которой вы сталкиваетесь? Открытые вопросы не приветствуются в Stack Overlfow. – Doorknob

+0

Как это обычно делается, так это то, что вы разрабатываете фактическую библиотеку на одном языке, а затем используете * foreign-function-interface * других языков для разработки привязок к другим языкам. Тем не менее, этот подход в значительной степени ограничивает вас C или, возможно, C++ для основного языка, и не все языки одинаково хорошо взаимодействуют с C. (Java JNI - это мучительный.) Однако вы все равно должны ожидать много работы для поддержания привязок, просто надеюсь, что меньше, чем повторное выполнение библиотечной функции N раз. – millimoose

ответ

0

Для 1), я бы использовал интерфейс, который могут использовать все эти языки. Общим подходом является то, что основано на сети/TCP, например, protobuffer, REST, SOAP. Многие языки поддерживают их в своих стандартных библиотеках, а интерфейсы, разработанные с этим, обычно являются агностическими.

0

Существует в основном два варианта: вы можете создать сетевой сервер или создать JVM-библиотеку, которая может использоваться совместно с некоторыми JVM-языками, такими как JRuby или Jython.

Обновление от @millimoose: вы также можете создать свою библиотеку на C и создать привязки для всех других языков.

+1

Или вы можете создать библиотеку на C и создать привязки для обычных версий других языков, так же как ** всякая другая неродная библиотека, когда-либо ** (которой их много), которые используют Ruby и Python и т. Д. – millimoose

+0

+1, не думал, что это разработчик Java, ха-ха. –

1

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

Ознакомьтесь с веб-сервисами или промежуточным программным обеспечением orientart. В этом случае ваша заявка будет предоставлена ​​в специальном контейнере, который сам обеспечивает механизм интерфейса, например. SOAP, XML-RPC для вызова вашего приложения.

0
  1. Для нескольких языков: Я думал о TCP/промежуточного/WebServices/REST/который, кажется, рекомендуемое производство. Но я думаю, что это во многом зависит от использования библиотеки. Кроме того, функциональность немного критична по времени, поэтому прямые вызовы процедур более подходят (вместо того, чтобы работать даже на локальном хосте). И пользователь библиотеки не должен создавать компонент доступа только для использования функций библиотеки. Итак, я думаю, что путь к разработке, по-видимому, развивает библиотеку на основном языке, который широко поддерживается (C/C++, ...) и предоставляет интерфейсы обертки для разных целевых языков.

  2. Для многоплатформенного (одноязычного): Реального ответа не было и в моем сознании. Конечно, я мог бы просто использовать Java (что я знаю), но как насчет других языков?

Я, конечно, не первый с этим/этими проблемами (ы) ...

Смежные вопросы