2009-12-27 2 views

Répondre

3

Chaque implémentation Common Lisp a une manière différente de l'étendre à partir de divers langages . Quelle implémentation avez-vous l'intention d'utiliser? Le GNU CLISP implementation permet de définir external modules écrit en C qui expose les objets, les symboles et les fonctions à Lisp. Le documentation for writing an external module est terminé, mais vous aurez probablement du mal à l'intégrer dans le reste de votre processus de construction, sauf si vous utilisez déjà make ou des scripts shell pour automatiser certaines parties de celui-ci.

Alternativement, vous pouvez retourner la question et demander comment accéder aux bibliothèques C depuis Common Lisp. Encore une fois, la plupart des implémentations ont une interface de fonction étrangère , ou FFI qui leur permet d'atteindre d'autres langues. CLISP a an FFI, mais vous pouvez également utiliser un package comme CFFI pour la portabilité parmi les implémentations Common Lisp. La documentation CLISP describes the trades in these two approaches.

ECL peut être un autre bon choix pour vous si vous avez l'intention d'intégrer Common Lisp dans votre programme C.

1

(..i'm pas à 100% sûr de ce que vous voulez dire, mais je vais juste jeter quelques morceaux là-bas et voir ce qui se passe ..)

La plupart Lisps peut faire le C < -> Lisp tapez chose par des moyens de FFI, et il y a des couches de compatibilité/bibliothèques pour faire FFI comme le déjà mentionné CFFI.

Vous pouvez donc à peu près toujours avoir des fonctions Lisp appel C et ont C call Lisp functions, et plus le faire par le chargement des fichiers .dll/.so dans le déjà en cours d'exécution processus Lisp. Notez que cela a tendance à être ce que font d'autres environnements comme Python (PyGTK etc.). C'est souvent exactement ce que vous voulez, donc vous pourriez vouloir ignorer la plupart de ce que je dis ci-dessous. Le seul Lisp auquel je puisse penser permet de faire les choses de "l'autre côté", c'est-à-dire de charger un .dll/.so qui est "Lisp" ou est produit par Lisp dans un processus C déjà en cours, est ECL.

Dans de nombreux cas, il vraiment Peu importe où vous mettez le point d'entrée ou la « fonction main() » d'utiliser des termes C, donc si vous souhaitez utiliser une autre Lisp en plus ECL, mais sont penser que vous "ne pouvez pas parce que .." c'est quelque chose à reconsidérer depuis, oui, vous pouvez dans de nombreux cas juste mélanger quelque chose autour d'un peu.

Cependant, c'est toujours une bien meilleure idée d'utiliser d'autres mécanismes IPC et d'éviter tout type de FFI quand vous le pouvez.

Questions connexes