2009-05-31 3 views
10

Bien que je comprenne plus ou moins ce qu'est une liaison de langage, j'ai du mal à comprendre comment ils fonctionnent. Quelqu'un pourrait-il expliquer comment faire une liaison Java pour WinAPI, par exemple?Comment faites-vous une liaison de langue?

Répondre

8

Vous trouverez de bien meilleurs résultats si vous recherchez Foreign Function Interface ou FFI. Le FFI est ce qui vous permet d'appeler des fonctions qui ont été écrites dans une langue différente, c'est-à-dire étrangères. Différentes langues et runtimes ont des FFI très différents et vous devrez apprendre chacun individuellement. L'apprentissage d'un FFI vous oblige également à en savoir un peu plus sur les éléments internes de votre langue et son temps d'exécution que d'habitude. Certaines FFI vous obligent à écrire du code dans la langue cible, comme Haskell (où le code FFI doit être écrit dans Haskell), et d'autres vous font écrire du code dans la langue source, comme Python (où le code FFI doit être écrit en C).

Certaines langues n'utilisent pas le terme FFI (bien que ce serait bien si elles l'ont fait). Pour Java, il s'appelle Java Native Interface, ou JNI.

+0

Merci. J'étais au courant de JNI, en fait. Mais je ne savais pas où je devrais creuser pour plus d'informations. – qeek

1

Les langues (généralement) ont une syntaxe définie pour appeler le code "natif". Donc, si vous avez une bibliothèque qui exporte la méthode foo(), faire une fusion signifierait que vous créerez, dans votre exemple, une classe Java avec la méthode foo(). De cette façon, vous pouvez appeler MyBinding.foo() à partir du reste d'un code, cela ne fera aucune différence s'il s'agissait d'une méthode Java pure ou d'un code C compilé.

Encore une fois pour Java, vous souhaitez probablement consulter la documentation JNI. D'autres langues ont des mécanismes similaires. Il existe des outils comme SIP qui vont prendre beaucoup de fichiers d'en-tête C (++), et produire des liaisons Python pour cela. Je suppose que d'autres langues pourraient avoir des outils similaires.