Question

Dire que j'ai un programme Haskell ou d'une bibliothèque que je voudrais rendre accessible aux non-Haskellers, potentiellement programmeurs C. Puis-je compiler à C en utilisant GHC et distribuer comme une source de C?

Si cela est possible, quelqu'un peut-il fournir un exemple minimal? (Par exemple un Makefile)

Est-il possible d'utiliser GHC pour déterminer automatiquement les drapeaux compilateur et les en-têtes et nécessaire, puis bundle peut-être cela dans un seul dossier?

En fait, je suis intéressé à être capable d'écrire des parties de programmes en C et Haskell, puis de le distribuer comme tarball, mais sans nécessiter l'objectif d'avoir GHC et Cabal installés.

Était-ce utile?

La solution

  

Je suis intéressé à être capable d'écrire des parties de programmes en C et Haskell, puis de le distribuer comme tarball, mais sans nécessiter l'objectif d'avoir GHC et Cabal installés.

Vous demandez un très grand nombre d'infrastructures que vous avez peu de chances de trouver. Rappelez-vous que tout programme Haskell, même si elle va être compilé à C, est presque certain de dépendre d'un grand système d'exécution complexe pour son bon fonctionnement. Au strict minimum, ce système d'exécution doit prendre en charge la collecte des ordures et l'évaluation paresseuse. Vous avez donc plus qu'un simple problème de traduction.

Je vous suggère de résoudre ce problème comme un problème de distribution de logiciels. Au lieu d'un tarball, fournir un package pour votre plate-forme de distribution favorisée (Debian, Red Hat, InstallShield, peu importe). Personnellement, afin de réutiliser les autres efforts des gens, je chercherai quelque chose qui vérifie Cabal, installe Cabal si nécessaire, puis utilise Cabal pour installer le reste de ce que vos utilisateurs auront besoin.

Autres conseils

Vous pouvez le faire avec JHC . Il est un compilateur optimisation du programme complet qui compile jusqu'à C. Il ne possède pas toutes les extensions de fantaisie qui GHC soutient cependant.

Même si vous pouviez, je ne l'appellerais pas « source C ». GHC peut utiliser C dans le cadre de son système de compilation, mais le code C généré est pas même un peu lisible. Même si elle pouvait être lu et compris, il ne serait pas logique de le modifier parce qu'il n'y a aucun moyen (en dehors de l'arrière-portage des changements dans Haskell) pour incorporer toutes les modifications apportées par les pirates C dans les futures versions de votre programme.

Le terme « source » désigne le code qui est écrit par un être humain et utilisé pour générer le programme. Dans ce cas, qui est le Haskell. C généré par un compilateur est pas « code source », il est une représentation intermédiaire.

Vous ne pouvez pas y arriver avec GHC. Même quand il compile via C, GHC repose sur la manipulation de l'ensemble résultant de mélanger des segments autour, un énorme système d'exécution et beaucoup de bagages.

Par contre, vous pourriez avoir plus de chance si ce que vous voulez est pris en charge par jeu de fonctionnalités un peu plus limitée du compilateur JHC de John Meacham, cependant, ce qui génère une sortie C assez compact.

Je sais que c'est un ancien poste, mais je voulais encore parler aussi ajhc . Ajhc JHC fourchue avec les plans d'ajouter de nouvelles fonctionnalités et pousser plus tard, les mises à jour au JHC.

  

Dire que j'ai un programme Haskell ou d'une bibliothèque que je voudrais rendre accessible aux non-Haskellers, potentiellement programmeurs C. Puis-je compiler à C en utilisant GHC et distribuer comme une source de C

Vous pouvez compilez à C, mais le résultat C est pas lisible par l'homme. Vous êtes mieux d'écrire des fichiers d'en-tête et d'utiliser l'excellent C IFF à côté. Dans tous les cas, la distribution du C produit semble que la course d'un fou.

  

En fait, je suis intéressé à être capable d'écrire des parties de programmes en C et Haskell, puis de le distribuer comme tarball, mais sans nécessiter l'objectif d'avoir GHC et Cabal installés.

Je ne connais pas de solutions qui ne nécessitent pas GHC. Il faudrait distribuer à tout le moins le Haskell RTS.

  

Puis-je compiler à C en utilisant GHC et distribuer comme une source de C?

Non, il est impossible, mais vous pouvez facilement créer une interface entre haskell et c en utilisant l'interface Fonction étrangère (IFF) de Haskell.

Vous pouvez avoir plus par exemple ici .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top