2015-09-11 3 views
-4

J'ai besoin de mettre en œuvre une bibliothèque qui sera appelée à partir de plusieurs langages - Java, Python, Perl et peut-être plus dans le futur. Je détesterais mettre en œuvre (et maintenir) la même chose encore et encore dans plusieurs langues.Comment créer et gérer une bibliothèque pour plusieurs langues?

Une option que je peux penser est d'écrire la fonctionnalité de base en C/C++ et utiliser SWIG pour générer des liaisons pour les langues cibles; ou peut-être écrire les liaisons moi-même.

Voici quelques raisons pour lesquelles ce service ne peut pas être indépendant.

Y a-t-il d'autres solutions de rechange à maturité? Je cherche des options pour comparer avant de m'en contenter.

Idéalement, je voudrais le faire en utilisant un compilateur source à source ou un générateur de code source. Mais je ne peux pas en trouver un qui supporte toutes les langues ci-dessus - avec un potentiel pour les ajouts futurs.

Je peux envisager d'autres générateurs de liaison s'ils offrent des avantages par rapport à SWIG.

Merci d'avance pour les pointeurs!

+2

Cette question, bien que raisonnable en général, est inappropriée sur Stack Overflow. Nous ne faisons pas vraiment de conversation ici et votre question recherche une conversation stratégique plutôt qu'une solution tactique. – mah

+0

En général, vous devez déterminer ce que vous devez tester et corriger les bogues, la plupart du temps. Si vous passez le plus clair de votre temps à écrire du code non-stop, vous êtes dans une situation très inhabituelle. –

+1

@PeterLawrey: Non, je n'écris pas de code non stop. La raison pour laquelle je ne veux pas le réimplémenter en plusieurs langues est d'éviter la duplication de code. Le code dupliqué signifie souvent que le comportement de la bibliothèque diffère de manière subtile ou qu'il comporte des bogues subtils. –

Répondre

-1

Selon la façon dont vous envisagez d'accéder à la bibliothèque, est-il possible d'exposer l'API publique via les services Web? De cette façon, vous pouvez écrire le module partagé dans n'importe quelle langue et y accéder via un protocole commun tel qu'un service Web RESTfull.

Regardez l'architecture Microservices.

+0

Il existe certaines restrictions pour lesquelles il ne peut pas s'agir d'un service RESTful. –

1

La manière la plus simple est d'écrire la bibliothèque en C avec une API simple. Chaque langage non-obscur a un moyen de s'interfacer avec le code C. En fonction du style de l'API, SWIG peut gagner du temps en générant les liaisons; mais à moins que ce soit très grand et régulier, vous pourriez trouver plus facile d'écrire les fixations à la main. Certaines langues (au moins Python dans votre question) ont un mécanisme FFI, qui vous permet d'écrire toute la liaison dans la langue cible, ce qui la rend beaucoup plus facile à déployer et à maintenir. Notez que la plupart de ceux-ci sont axés sur les API C, pas C++.