web-dev-qa-db-fra.com

Pourquoi n'y a-t-il pas un bon schéma/LISP sur llvm?

Il existe un programme Gambit, MIT Programme, Programme PLT, Programme Poulet, Bigloo, Larcin, ...; alors il y a tous les lisps.

Pourtant, à ma connaissance, il n’ya pas un seul schéma/LISP populaire sur LLVM, même si LLVM fournit beaucoup de jolies choses comme:

  • plus facile à générer du code que x86
  • facile à faire des appels C FFI ...

Alors pourquoi n’y at-il pas un bon schéma/LISP sur LLVM?

38
anon

LLVM en fournit beaucoup, mais il ne reste qu'une petite partie du temps d'exécution dont un langage fonctionnel a besoin. Et les appels C FFI ne sont pas compliqués, car LLVM laisse la gestion de la mémoire à une autre personne. Interagir avec Garbage Collector est ce qui rend les appels FFI difficiles dans des langages tels que Scheme.

Vous pourriez être intéressé par HLVM , mais c'est encore plus qu'expérimental à ce stade.

22
Pascal Cuoq

Il y a un très petit compilateur Scheme apparemment non optimisé ici:

http://www.ida.liu.se/~tobnu/scheme2llvm/

Prenant votre question à la lettre,

  • Ecrire des compilateurs est difficile.
  • Une implémentation médiocre comme celle ci-dessus peut bloquer de nouvelles implémentations. Les personnes qui se rendent sur la page LLVM s’aperçoivent qu’il existe déjà un schéma et ne s’en soucient pas.
  • Il y a un nombre limité de personnes qui écrivent et utilisent Scheme (j'en suis un, pas un haineux, d'ailleurs).
  • Il y a beaucoup d'intégrateurs et de compilateurs Scheme existants et il n'y a aucun besoin criant d'en avoir un nouveau.
  • L'écriture d'un nouvel interprète utilisant LLVM ne présente aucun avantage clair et immédiat. Serait-il plus rapide, plus facile, plus flexible, mieux en quelque sorte que les autres dizaines d'implémentations de Scheme?
  • Le projet LLVM est allé avec une autre langue (C) pour faire la démonstration de sa technologie et n'a pas vu le besoin d'en implémenter beaucoup d'autres.

Je pense que construire un compilateur Scheme basé sur LLVM pourrait être très amusant. Les compilateurs Scheme dans SICP et PAIP en sont de bons exemples.

12
Evan P.

Pour CL: Clasp est une implémentation Common LISP sur LLVM et mocl implémente un sous-ensemble de Common LISP sur LLVM. 

Pour Scheme: il existe un Schéma auto-hébergé-> LLVM démo et un prototype de back-end LLVM pour Bigloo Scheme .

Pour Clojure: il y a Rhin , qui est un LISP inspiré de Clojure.

8
Wilfred Hughes

Une chose à garder à l'esprit est que beaucoup de ces implémentations ont des FFI en C et des compilateurs de code natif qui sont significativement antérieurs à LLVM. 

7
Pillsy

Je ne comprends peut-être pas tout à fait la question ou le contexte, mais je pense que vous pouvez utiliser ECL , qui est un LISP commun compilé en C, et utiliser le compilateur Clang pour cibler LLVM ( au lieu de GCC).

Je ne sais pas quel avantage (le cas échéant) cela vous apporterait, mais cela vous donnerait un LISP fonctionnant sur LLVM =].

6
andrew

CL-LLVM fournit des liaisons LISP communes pour LLVM. Il adopte l'approche FFI plutôt que d'essayer de générer directement l'assembly LLVM ou le code binaire.

Cette bibliothèque est disponible via Quicklisp.

3
masukomi

mocl est un compilateur pour un sous-ensemble relativement statique de Common LISP. Il compile via LLVM/Clang.

3
Rainer Joswig

GHC expérimente un système de base et obtient des résultats préliminaires vraiment intéressants sur son compilateur de code natif. Certes, c'est haskell. Mais ils ont récemment introduit de nouvelles modifications dans LLVM, facilitant ainsi les appels de queue IIRC. Cela pourrait être utile pour certaines implémentations de systèmes.

0
Golias