6
votes

Création d'applications de bureau GUI qui appellent dans OCAML ou HASKELLL - est-ce une tâche d'un imbécile?

Dans Haskell et OCAML, il est possible d'appeler dans la langue des programmes C. Dans quelle mesure une réalisabilité serait-elle de créer des applications natales pour Windows, Mac ou Linux, qui utilisent une utilisation intensive de cette technique?

(Je sais qu'il existe des bibliothèques d'interface graphique comme Wxhakell, mais supposons que l'on souhaitait simplement avoir une partie de votre logique d'application dans la langue étrangère.)

ou est-ce une idée terrible?


3 commentaires

MLDONKEY.SOURCEFORGE.net/Main_Page


COHERENTPDF.COM/BLOG/?TAG=OCAML


Mise en garde ( www-list.cea.fr/labos/gb/ Lsl / caveat / index.html ) est un outil de vérification pour Critical incorporé C écrit principalement en C ++, mais qui utilise OCAML comme langue de script (une revue CAML générée pendant une session interactive peut être compilée et liée à la mise en garde à être rejoué à tout moment).


5 Réponses :


5
votes

Eh bien, le principal risque est que, même si des installations existent, elles ne sont pas bien testées - pas beaucoup d'applications le font. Vous ne devriez pas avoir beaucoup de difficulté à appeler Haskell de C, semble assez facile:

http://www.hakell.org/hakellwiki/calling_hakell_from_c

Je dirais que s'il y a une raison impérieuse d'utiliser C pour le front-end (par exemple, vous avez une application héritée) et vous avez vraiment besoin d'une bibliothèque HASKELLL, ou souhaitez utiliser HASKELL pour une autre raison, alors, oui, Allez-y. Le principal risque est que peu de gens ne font pas cela, donc moins de documentation et d'exemples que d'avoir appelé l'autre sens.


0 commentaires


2
votes

ou est-ce une idée terrible?

Ce n'est pas une idée terrible du tout. Mais comme Notes Don Stewart, c'est probablement un chemin moins troden. Vous pouvez certainement lancer votre programme comme HASKELLL ou OCAML, puis faire un appel de fonctions étrangers dès la sortie de la porte de départ - et je vous recommande de structurer votre code de cette façon - mais cela ne change pas le fait que beaucoup plus de personnes appellent de Haskell en C que de C dans Haskell. De même pour OCAML.


0 commentaires

3
votes

Je fais une utilisation intensive de cela en compilant HASKELLL partagé des libs partagées appelées Haskell à l'extérieur.

généralement les tâches impliquées seraient à

  1. créer les déclarations d'exportation étrangères appropriées
  2. Créez des instances stockables pour tous les types de données dont vous avez besoin pour maréchal
  3. Créez les structures C (ou structures dans la langue que vous utilisez) pour lire ces informations
  4. Depuis que je ne veux pas initialiser manuellement le Haskell RTS, j'ajoutons un code d'initialisation / de terminaison à la liberme elle-même. (DLLMain dans Windows __attribute__ ((constructeur)) sur UNIX)
  5. Depuis que je n'ai plus besoin d'aucun d'entre eux, je crée un fichier .def pour masquer toutes les fonctions de fermeture et RTS d'être dans la table d'exportation (Windows)
  6. Utilisez GHC pour compiler tout ensemble

    Ces tâches sont plutôt robotiques et structurées, à un point que vous pourriez écrire quelque chose pour les automatiser. Enfait de ce que je m'utilise pour faire ceci est un outil que j'ai créé qui dépend de la dépendance sur les fonctions que vous avez marquées pour être exportée et que cela enroulera et compilera la libère partagée pour vous avec vous de vous donner les déclarations en C / C ++.

    (Malheureusement, cet outil n'est pas encore sur Hackage, car il y a quelque chose que j'ai encore besoin de réparer et de tester beaucoup plus avant que je sois à l'aise de le faire)

    outil est disponible ici http://hackage.hakell.org/package/hs2lib -0.4.8


0 commentaires

4
votes

Je crois que la meilleure approche, même si l'interface graphique et la logique sont écrites dans la même langue, consiste à exécuter deux processus qui communiquent via un protocole texte lisible par l'homme (une DSL de quelque sorte). Cette architecture s'applique également à votre cas.

Les avantages sont évidents: l'interface graphique est détachable et remplaçable, les tests automatisés sont plus faciles, la journalisation et le débogage sont beaucoup plus faciles.


0 commentaires