45 votes

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

Il y a le Gambit Scheme, le MIT Scheme, le PLT Scheme, le Chicken Scheme, le Bigloo, le Larceny, ... ; puis il y a tous les lisps.

Pourtant, il n'y a pas (à ma connaissance) un seul schéma/lisp populaire sur LLVM, même si LLVM fournit beaucoup de choses intéressantes comme :

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

Alors pourquoi n'y a-t-il pas de bon schéma/lisp sur LLVM ?

19 votes

Cette question demande-t-elle de vraies réponses - comme des problèmes avec LLVM et/ou Scheme, soit techniques soit sociaux, qui empêchent cette implémentation d'être faite ? Ou s'agit-il simplement d'une plainte rhétorique, comme "Pourquoi personne n'a fait la vaisselle ?" ou "Pourquoi ce bus est-il si en retard ?".

97voto

Il n'y a pas de Lisp ou de Scheme ciblé par LLVM parce que vous n'en avez pas encore écrit.

Oui.

Vous.

La personne qui lit cette réponse.

C'est de votre faute.

25voto

Pascal Cuoq Points 39606

LLVM apporte beaucoup, mais ce n'est encore qu'une petite partie du temps d'exécution dont un langage fonctionnel a besoin. Et les appels FFI en C ne sont pas compliqués parce que LLVM laisse la gestion de la mémoire à quelqu'un d'autre. L'interaction avec le Garbage Collector est ce qui rend les appels FFI difficiles dans des langages tels que Scheme.

Vous pourriez être intéressé par HLVM mais cela reste plus qu'expérimental à ce stade.

1 votes

Pour autant que je sache, HLVM est mort.

2 votes

Je ne suis pas sûr, mais êtes-vous en train de dire qu'un ramasse-miettes [en général] est la raison pour laquelle LLVM est difficile, ou simplement qu'un [ramasse-miettes pour LISP] est trop difficile ? Parce que je suis presque sûr qu'il y a des langages dans LLVM avec des garbage collectors. La documentation de LLVM mentionne même mentionnent spécifiquement le régime. llvm.org/docs/GarbageCollection.html

1 votes

@KatasticVoyage Je veux dire qu'un garbage collector efficace est difficile, parce que c'est quelque chose qui ne peut pas être simplement ajouté à un framework de génération de code comme LLVM. Ce n'est pas impossible, et bien que cela n'ait pas été fait en 2010, cela a été fait plusieurs fois à ce jour. Je ne sais pas trop quoi faire de cette réponse maintenant.

13voto

Evan P. Points 556

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

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

Je prends votre question au pied de la lettre,

  • Il est difficile d'écrire des compilateurs.
  • Une mauvaise mise en œuvre comme celle citée ci-dessus peut bloquer de nouvelles mises en œuvre. Les gens qui vont sur la page LLVM voient qu'il y a déjà un Scheme, et ne se donnent pas la peine d'en écrire un.
  • Il y a un nombre limité de personnes qui écrivent et utilisent Scheme (j'en fais partie, je ne déteste pas).
  • Il existe de nombreux interprètes et compilateurs Scheme et il n'est pas nécessaire d'en créer un nouveau.
  • Il n'y a pas d'avantage immédiat et clair à écrire un nouvel interprète en utilisant LLVM. Serait-il plus rapide, plus facile, plus flexible, meilleur d'une manière ou d'une autre que les autres dizaines d'implémentations de Scheme ?
  • Le projet LLVM a choisi un autre langage (C) pour faire la démonstration de sa technologie, et n'a pas jugé nécessaire d'en mettre beaucoup d'autres en œuvre.

Je pense qu'il serait très amusant pour quelqu'un de construire un compilateur Scheme basé sur LLVM. Les compilateurs Scheme de SICP et PAIP sont de bons exemples.

3 votes

Le lien est mort, mais voici le lien Archives les plus récentes que j'ai pu trouver à partir de février 2011.

8voto

Pillsy Points 7094

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

8voto

andrew Points 945

Peut-être ai-je mal compris la question ou le contexte, mais je pense que vous pourriez utiliser ECL qui est un Common Lisp qui se compile en C, et utiliser l'option Clang pour cibler LLVM (au lieu de GCC).

Je ne suis pas sûr des avantages que cela vous apporterait, mais cela vous donnerait un Lisp fonctionnant avec LLVM =].

1 votes

Tout à fait d'accord. Je pense que c'est le principal avantage d'ECL par rapport au compilateur Lisp.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X