Mischen von Haskell und C ++
Wenn Sie die Möglichkeit hatten, dass eine Anwendung, der sowohl in Haskell und C++.
Welche Ebenen ließ Sie Haskell-verwaltet und welche Schichten lassen, wenn man doch C++verwaltete ?
Hat jemals getan, eine solche Vereinigung, (sicherlich) ?
(der Haskell-Website sagt, es ist wirklich einfach, weil Haskell hat einen Modus, in dem es kompiliert werden kann in C mit gcc)
Auf den ersten ich glaube, ich würde halten alle I/O-Operationen in C++ - Schichten. Sowie GUI-management.
Es ist ziemlich vage Frage, aber wie ich Plane zu lernen, Haskell, dachte ich über das delegieren von Arbeit Haskell-code (Lerne ich in der eigentlich Kodierung), und ich will zu wählen, etwas Teil, wo ich sehen Haskell Vorteile.
InformationsquelleAutor der Frage Stephane Rolland | 2010-08-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Vorteil von Haskell ist die kraftvolle Abstraktionen, die es erlaubt, Sie zu verwenden. Sie denken nicht im Sinne von Einsen und Nullen und Adressen registriert, sondern Berechnungen und geben Sie Eigenschaften und Fortsetzungen.
Den Vorteil von C++ ist, wie fest Sie optimieren es wenn nötig. Sie denken nicht über high-minded Monaden, arrows, teilweise Anwendung, und Komponieren reinen Funktionen: mit C++ kann man gleich bis auf das blanke Metall!
Es ist die Spannung zwischen diesen beiden Aussagen. In seinem Papier "Strukturierte Programmierung mit
- Anweisungen," Donald Knuth schrieb
Wissen, wie man Haskell und C++, aber auch wie und Wann kombinieren Sie auch knock down alle möglichen Probleme.
Das Letzte große Projekt, an dem ich schrieb, dass verwendet FFI beteiligten mit einem in-house-radar modeling library geschrieben in C. Reimplementing es wäre dumm, und drückst die high-level Logik der rest der Anwendung gewesen wäre, den Schmerz. Ich hielt die "Gehirne" der es in Haskell und rief die C-Bibliothek, wenn ich Sie brauchte.
Sie wollen, sind zu tun, dies als eine übung, also würde ich empfehlen die gleiche Vorgehensweise: schreiben Sie die smarts in Haskell. Einhängen Haskell als slave zu C++ wird wahrscheinlich am Ende frustrierend, oder Sie machen Sie fühlen, als ob Sie Ihre Zeit verschwendet. Verwenden Sie jede Sprache dort, wo seine stärken liegen.
InformationsquelleAutor der Antwort Greg Bacon
Hier ist, wie ich die Dinge sehen:
Also, lassen Sie ' s sagen, ich bin fließend in Haskell, C, C++ und Python, ist hier, wie ich Bewerbungen schreiben:
InformationsquelleAutor der Antwort Alexandre C.
Diese Antwort ist mehr eine Geschichte als eine umfassende Antwort, aber ich benutzte eine Mischung von Haskell, Python und C++ für meine dissertation in der Computerlinguistik, sowie mehrere C-und Java-Werkzeuge, die ich nicht geschrieben habe. Ich fand es am einfachsten, alles als einen separaten Prozess, unter Verwendung Python als glue-code zu Beginn der Haskell, C++ und Java-Programme.
C++ war eine ziemlich einfache, enge Schleife, die gezählt feature vorkommen. Im Grunde alles, was Sie Tat, war Mathe und einfache I/O. ich tatsächlich kontrolliert Optionen, indem er die Python glue code schreiben, einen Kopf voller
#define
s und neu zu kompilieren. Art hacky, aber es funktionierte.Den Haskell war alle Zwischenstufen der Verarbeitung: der komplexe Ausgaben von verschiedenen C-und Java-Parser, die ich verwendet, filtern überflüssige Daten, und verwandelt es das einfache format der C++ - code erwartet. Dann nahm ich die C++ - Ausgabe und verwandelt Sie in LaTeX-markup (neben anderen Formaten).
Dies ist ein Bereich, die Sie erwarten würden, Python, stark zu sein, aber ich fand, dass Haskell macht die Handhabung komplexer Strukturen erleichtert; Python ist wahrscheinlich besser für einfache Linie-zu-Linie-Transformationen, aber ich war slicing und dicing-parse-Bäumen, und ich fand, dass ich vergessen habe die input-und output-Typen, wenn ich schrieb code in Python.
Da war ich mit Haskell viel wie ein mehr-strukturierte Skriptsprache, landete ich schreiben ein paar Datei-I/O utilities, aber darüber hinaus, dass die eingebauten Bibliotheken für Baum-und Listen-manipulation reichte.
In Zusammenfassung, wenn Sie ein problem haben, wie meine, würde ich vorschlagen, C++ für die Arbeitsspeicher-eingeschränkte Geschwindigkeit-Kritischer Teil, Haskell, die für die high-level-Transformationen, und Python laufen Sie alle.
InformationsquelleAutor der Antwort Nathan Shively-Sanders
Habe ich nie vermischt die beiden Sprachen, aber Ihr Ansatz fühlt sich ein wenig zu mir umgedreht.
Haskell ist mehr apt zu high-level-Operationen, während C++ optimiert und können sehr vorteilhaft für enge loops und andere performance-kritischen code.
Einer der größten Vorteile von Haskell ist die Kapselung von IO in Monaden. Solange das IO ist nicht Zeit kritisch sehe ich keinen Grund, es zu tun in C++.
Für den GUI-Teil, den Sie wahrscheinlich Recht. Es gibt eine fülle von Haskell-GUI-Bibliotheken, aber C++ hat leistungsstarke Werkzeuge, wie QtCreator, die vereinfachen die mühsame Aufgaben viel.
InformationsquelleAutor der Antwort pmr