2009-11-12 5 views
1

Je travaille actuellement sur une conception pour une collection de sous-systèmes, et j'aimerais pouvoir offrir les API exposées par un sous-système donné pour une utilisation par d'autres sous-systèmes.Génération d'API Agnostic de langage

Dans le passé, j'ai utilisé SWIG pour exposer C api à une variété d'autres langues. Cela a bien fonctionné pour moi, mais finalement l'API est définie en C. Donc, fondamentalement, un côté de l'API est agnostique, et l'autre ne l'est pas.

Ce que je voudrais vraiment, c'est avoir quelque chose de similaire à SWIG qui pourrait générer l'interface entre 2 langages arbitraires basés sur une description de l'API.

Je ne souhaite pas utiliser les services Web. Par exemple, je voudrais appeler une fonction de java, et implémenter la fonction dans Python. Par exemple, je voudrais appeler une fonction de Java. J'aimerais pouvoir générer le langage interop en utilisant un générateur de code.

Y a-t-il quelque chose qui existe qui puisse le faire aujourd'hui? Au moins pour les appels de fonction simples - en ignorant les cas plus complexes comme les rappels et les situations où vous devez conserver des références en dehors de l'appel de la fonction elle-même.

+0

Je doute qu'une telle chose existe, mais je suis impatient de voir ce que les gens disent. –

+0

Je suppose que vous ne voulez pas CORBA comme vous avez déclaré que vous ne voulez pas utiliser les services Web? Est-ce que les sous-systèmes doivent être dans un processus lorsque le système entier fonctionne? –

+0

Dans l'intérêt de l'interopérabilité des langues supposer qu'ils seraient dans le même processus. – sylvanaar

Répondre

1

J'ai trouvé ceci après avoir suivi le lien de gooli à Protocol Buffers.

Cela semble si irrésistible que je vais le proposer comme une réponse à ma propre question.

http://incubator.apache.org/thrift/

Thrift est un cadre logiciel pour le développement des services interlangage évolutifs. Il combine une pile logicielle avec un moteur de génération de code pour créer des services qui fonctionnent efficacement et de manière transparente entre C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk et OCaml.

De l'whitepaper:

... nous ont été présentés au défi de la construction d'un transparent, pont haute performance dans de nombreux langages de programmation . Nous avons constaté que plupart des solutions disponibles étaient soit trop limité, n'offraient pas suffisamment la liberté de type de données, ou ont souffert de subpar performances

également de la whitepaper:

A. Systèmes similaires Les systèmes logiciels suivants sont similaires à Thrift. Chacun est (très!) Décrit brièvement:

  • SOAP. Basé sur XML. Conçu pour les services Web via HTTP, surcharge de surcharge syntaxique XML .

  • CORBA. Relativement complet, démesurément surdimensionné et poids lourd. Installation de logiciel relativement lourde.

  • COM. Embrassé principalement dans le logiciel client Windows. Pas une solution entièrement ouverte .

  • Pilier. Léger et performant, mais manquant versionnement et abstraction.

  • Tampons de protocole. Closed-source, propriété de Google. Décrit dans le papier de Sawzall.

La dernière partie sur le protocole tampon de est hors de ce jour - son été ouvert le code source

1

COM (et dans une moindre mesure Firefox XPCOM) pourrait être ce que vous cherchez. Dans COM, vous définissez l'API en utilisant un langage appelé IDL qui peut ensuite être compilé dans différentes langues. Lorsque vous utilisez la même langue, les appels dégénèrent habituellement en appels de fonction efficaces.

Cependant, COM est une technologie très complexe et mourante que je n'utiliserais jamais pour un nouveau projet.

+0

Oui, COM fait le travail, même si ce n'est pas vraiment ce que je cherche - exactement pour les raisons que vous mentionnez. – sylvanaar

+1

Les tampons de protocole de Google pourraient être une autre option (http://en.wikipedia.org/wiki/Protocol_Buffers). – gooli

+0

Les tampons de protocole sont irrésistibles - merci pour ce lien +1 – sylvanaar