Frage

Was ist besser für die Entwicklung von GUI-Anwendungen mit Haskell ist, wxWidgets (via wxHaskell ) oder GTK (via < a href = "http://www.haskell.org/gtk2hs/" rel = "noreferrer"> Gtk2HS )?

Was sind die Vor- und Nachteile der einzelnen? Variiert es je nachdem, welche Plattform Sie zielen (würde ich in erster Linie auf OS X arbeiten, würde aber meine Programme wie unter Linux und Windows zu arbeiten)?

War es hilfreich?

Lösung

[Disclaimer: Ich bin ein wxHaskell Maintainer]

Beide sind stabil und ziemlich vollständige GUI-Bindungen, und Sie könnten entweder für die meisten Projekte mit Zuversicht wählen. Beide haben ein gewisses Maß an ‚höherer Ebene‘ Haskell Bindungen, aber in beiden Fällen werden Sie müssen in eher zwingend notwendig, ‚C‘ Stil Codierung fallen Dinge zu erledigen. Mein Eindruck ist, dass wxHaskell können Sie ein wenig mehr Zeit in den höheren Ebene Bindungen verbringen, aber ich habe nicht viel GTK2HS getan, und auf jeden Fall, Sie auf jeden Fall finden sich auf dem dünnen Ende der Verpackung arbeiten für beide Bibliotheken - und ich denke, die ‚Komplexität‘ Gesamt Programmierung in beiden Fällen ähnlich ist.

Daher wollen wir die grundlegenden Funktionen nehmen als auf die Unterschiede gegeben und konzentrieren. Bitte beachten Sie, dass ich wirklich glaube, dass GTK2HS ein ausgezeichnetes Stück Arbeit ist, und dass Sie glücklich sein werden, wenn Sie es wählen. Das meiste, was ich sage, ist eine persönliche Sicht auf die Unterschiede und warum ich wählen auf und mit wxHaskell mich zu arbeiten.

GTK2HS hat ein größeres Team daran zu arbeiten, und wird mehr regelmäßig veröffentlicht. wxHaskell wird nicht so häufig aktualisiert, aber das Kernteam aktiv ist, und es gibt regelmäßige Fehlerbehebungen, aber mit wichtigen neuen Funktionen eher langsamer hinzugefügt werden, als wir möchten (wir den ganzen Tag Arbeit haben).

wxHaskell gibt echten native Anwendung Auftritt auf allen unterstützten Plattformen aus dem Kasten heraus. GTK2HS ist natürlich, nativ auf Linux und hat ein ziemlich gutes nativer Thema auf Windows (das heißt gut genug, um alle, aber Pedanten zu befriedigen ...), aber hat GTK auf OSX aussehen und sich anfühlen, und hängt davon ab, nachdem X11 installiert. Ich glaube, dass ein OSX ‚native‘ GTK-Bibliothek in der Entwicklung befindet, ist aber relativ unreif betrachtet. Sobald dies stabil ist, sollte GTK2HS der Lage sein, leicht aus dem gleichen Look ‚teilweise einheimischen‘ profitieren und fühlt (zB GTK OSX Screenshot ).

wxHaskell ist wahrscheinlich ein wenig leichter zu bauen, wenn Sie nicht auf Linux sind (GTK2HS ist wahrscheinlich einfacher, wenn Sie Linux gehostet sind), aber beide sind ziemlich komplex zu bauen, um ehrlich zu sein, da es eine erhebliche Anzahl von Abhängigkeiten ist in beiden Fälle.

Es ist etwas einfacher (IMHO) Anwendungen auf wxHaskell Basis zu verteilen, nur weil es weniger Bibliotheksabhängigkeiten hat. Ich verteile Anwendungen mit hauptsächlich InnoSetup unter Windows und als App auf OSX bündelt. Ich würde zugeben, dass mit nur einer geringen Menge an zusätzlicher Arbeit, könnte das gleiche mit GTK2HS getan werden, so ist dies wahrscheinlich das schwächste Argument für wxHaskell.

Es ist meine persönliche Meinung, dass wxHaskell freundlicher zu Closed Source ist (zum Beispiel kommerziell) Entwicklungen. Dies ist natürlich das Thema endlosen flame wars, also werde ich nur sagen, dass wxHaskell unter ist wxWidgets Lizenz die für Closed-Source-Entwicklung eindeutig erlaubt. GTK2HS ist LGPL, so dass Sie Ihren Anwalt fragen müssen - obwohl ich es klar, dass viele Menschen und Unternehmen machen müssen zu dem Schluss gekommen, dass LGPL mit kommerzieller Entwicklung vereinbar ist; die Anwälte bei der Firma für die ich arbeite zu dem Schluss gekommen, dass es für unsere Projekte ungeeignet ist.

Ich glaube, wenn Linux meine wichtigste Entwicklung und Delivery-Plattform ist, habe ich wahrscheinlich GTK2HS verwenden würde. Es ist jedoch nicht:. Ich liefere hauptsächlich auf Windows mit gelegentlichen OSX, und ich denke, wxHaskell eine bessere Übereinstimmung zu diesen Plattformen ist, obwohl beide Optionen alle drei Plattformen unterstützen

Ich hoffe, dies wird Ihnen bei der Auswahl helfen.

Andere Tipps

Eine Überlegung ist, dass zur Zeit etwas einfacher ist, wxHaskell zu bekommen nativ auf Mac OS X. GTK2HS zu arbeiten, hängt von GTK, die eine Implementierung hat mit nativen Widgets auf Mac OS X, aber, dass die Umsetzung nicht so leicht gebaut als die wxWidgets-Implementierung für Mac OS X ist.

Wenn Sie also Code entwickeln möchten, ohne X11.app zu laufen, zur Zeit sind Sie etwas besser mit wxHaskell.

Beachten Sie jedoch, dass dies schnell zu ändern: http://www.haskell.org/haskellwiki/Gtk2Hs#Using_the_GTK.2B_OS_X_Framework zeigt, wie GTK2HS mit nativen GTK + auf Mac OS X verwenden.

Ein Vorteil GTK2HS ist die Glade-Unterstützung, die Entwicklung von einfacher Benutzeroberfläche sehr schnell zu machen. Die höheren Ebene combinators in wxHaskell mildern die meisten dieser Vorteil, aber sie erfordern ein tieferes Verständnis davon, wie Sie möchten, dass Ihre Schnittstelle aussehen und sich verhalten, und deshalb sind härter in einer explorativen Mode zu verwenden.

Ich habe ziemlich unvollständige Informationen, aber da Sie noch keine Antworten haben, vielleicht unvollständige Informationen sind besser als keine.

Die Frage ist diese: ist das Toolkit nur ein Wrapper um C-ähnliche Funktionalität, oder gibt es eine zusätzliche Schicht, die das Toolkit eine „native Haskell-like“ API gibt? Wenn wxHaskell erstmals auf dem Haskell-Workshop bekannt gegeben wurde, sah die Entwicklung des einheimischen Haskell API äußerst vielversprechend, aber noch unvollständig war. Es sieht aus, als ob die „Haskellized“ API für wxHaskell noch gearbeitet wird, während das Gtk2Hs Projekt nicht um dieses Problem überhaupt nicht erwähnt. Aus diesem Grund würde ich wxHaskell empfehlen.

Persönlich würde ich in eine Art aussehen Reactive Paket / Verlängerung. Es scheint mit dem Paradigma viel viel näher zu sitzen. Statt imperativ Ihre grafischen Sachen angeben, können Sie es deklarativ tun. Beispiel (nicht repräsentativ für eine bestimmte Sprache oder Umsetzung):

x, y, z              :: Int
click, buttonclicked :: Bool
x = <X coordinate of mouse>
y = <Y coordinate of mouse>
click = <Whether mouse button is currently being pressed>
z = x + y
buttonclicked = (x == 10 && y == 10 && click)

ButtonClicked und z wird automatisch jedes Mal, x und y Änderung aktualisiert werden.

Sie könnten dann eine gewisse Logik haben irgendwo, dass so etwas wie folgt aussieht:

if buttonclicked then <do something> else <do something else>

Das ist alles, aber sehr unscharf. Schauen Sie einfach in einige echte reaktive Schnittstellen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top