Sugestie dotyczące biblioteki GUI w Haskell [zamknięte]

14

Jak sama Wiki Haskell :

W Haskell istnieje duża liczba bibliotek GUI. Niestety nie ma jednego standardowego i wszystkie są mniej lub bardziej niekompletne. Zasadniczo forniry niskiego poziomu idą dobrze, ale są na niskim poziomie. Abstrakcje na wysokim poziomie są dość eksperymentalne. Potrzebna jest obsługiwana biblioteka GUI średniego poziomu.

Profesor z mojej uczelni poprosił mnie i trzy inne kierunki informatyki o rozważenie pracy nad biblioteką GUI dla Haskell. Jego początkowym pomysłem dla projektu było napisanie warstwy na OpenGL, która naśladuje morficzną bibliotekę znalezioną w Smalltalk ; jest to jednak tylko sugestia i na pewno warto rozważyć inny system.

To prowadzi nas do faktycznego pytania złożonego z wielu części.

  1. O jaki poziom abstrakcji powinna dążyć nasza biblioteka? Wiki Haskell wydaje się zdecydowanie wskazywać, że preferowana byłaby biblioteka GUI średniego poziomu; jednak biblioteka wysokiego poziomu nadal byłaby mile widziana.
  2. Na czym powinna być budowana nasza biblioteka? (Np. OpenGL)
  3. Jaką istniejącą bibliotekę GUI chciałbyś zobaczyć naśladując naszą bibliotekę (jeśli w ogóle) i dlaczego? (Np. PyGame, Morphic, Swing itp.)
  4. Jakich funkcji chciałbyś, aby nasza biblioteka implementowała lub których unikała? Na przykład dobrzy ludzie w Gnome mogą argumentować, że przycisk minimalizacji jest niepotrzebny.
  5. Czy masz jakieś ogólne sugestie?
  6. Jak byś nazwał tę wymyśloną bibliotekę? (Np. HOT - Haskell Opengl Toolkit; HAWT - Haskell Advanced Windowing Toolkit)
Bface
źródło
2
Naśladuj Qt lub GTK, te są wspaniałe
Anto
Czy widziałeś już haskell.org/haskellwiki/Reactive ?
SK-logika

Odpowiedzi:

7

Chciałbym zobaczyć bibliotekę, która jest elegancka i prosta w obsłudze z Haskell. Reszta to szczegóły techniczne, które powinny służyć temu celowi, a nie przedefiniowywać go. Tak więc moje 0,02 $.

Nie opieraj go na istniejącym zestawie narzędzi , takim jak Qt lub GTK lub FLTK lub ... - to poważnie cię ograniczy i prawdopodobnie spowoduje więcej bólu niż zysku. PyQt jest, erm, zabawny i wystarczająco zaprojektowany, a zarówno Python, jak i C ++ są niezwykle elastycznymi imperatywnymi językami OO. Podejrzewam, że w przypadku Haskell byłoby znacznie trudniej.

Zależy tylko od najbardziej podstawowych prymitywów graficznych , a następnie buduj na tym. OpenGL jest fajny, ale nawet coś prostszego (tylko 2D, np. SDL) też by się przydało. Zapewni to maksymalną elastyczność i maksymalną przenośność. Zobacz Smalltalk / Morphic, Java / Swing, TCL / Tk.

Zrób to koncepcyjnie mały. GUI są trudne, nie trzeba dodawać kolejnego Everestu, aby się wspinać. Mam nadzieję, że Haskell może sprawić, że będzie kompaktowy i modułowy.

Aby uzyskać punkty bonusowe, spraw, aby było to możliwe. Jako minimum, umieć stosować kolory systemowe (i tylko kolory systemowe), aby pomalować cały repertuar elementów sterujących, aby aplikacja zbudowana za pomocą tego zestawu narzędzi nie była odrażająca. Jako maksimum, wiedz jak ustawić Win32 / Gtk / Qt / Cocoa tak, aby rysował twoje elementy sterujące, aby wyglądały w pełni natywnie. Podstawowa skórka jest prosta i logiczna; osiągnięcie pełnego natywnego wyglądu jest dość trudne.

Ponadto uruchom bez rootowania i pozostaw zarządzanie oknami systemowi graficznemu - X, Windows, cokolwiek. Niezastosowanie się do tego będzie stanowić zagrożenie dla zdrowia psychicznego i drastycznie utrudni przyjęcie.

Jak zwykle, „spraw, aby proste rzeczy stały się proste, a złożone rzeczy możliwe” + „unikaj tarasu Turinga, w którym wszystko jest możliwe, ale nic interesującego nie jest proste” + „uczyń tak prostym, jak to możliwe, ale nie prostszym”.

Nazwa jest najmniej ważna. Ze wszystkich popularnych zestawów narzędzi GUI tylko Qt ma jakoś sprytną nazwę. Wiele popularnych projektów zmieniło nazwy, nawet w locie (Firefox, z domu Firebird). Miej coś do nazwania, a ty to nazwiesz.

Powodzenia!

9000
źródło
1

Po rozmowie między wszystkimi zaangażowanymi studentami i daniu temu pytaniu wystarczającej ilości czasu na wzbudzenie zainteresowania, wierzę, że doszliśmy do konsensusu w sprawie kilku kluczowych pytań w moim pierwotnym poście.

O jaki poziom abstrakcji powinna dążyć nasza biblioteka? Wiki Haskell wydaje się zdecydowanie wskazywać, że preferowana byłaby biblioteka GUI średniego poziomu; jednak biblioteka wysokiego poziomu nadal byłaby mile widziana.

Zdecydowaliśmy się na bibliotekę średniego poziomu zgodnie z sugestią Wiki Haskell.

Na czym powinna być budowana nasza biblioteka? (Np. OpenGL)

Wybraliśmy OpenGL ze względu na jego popularność i wsparcie. Jako bazę będziemy wykorzystywać projekty owijania GLUT lub GLFW Haskell.

Jaką istniejącą bibliotekę GUI chciałbyś zobaczyć naśladując naszą bibliotekę (jeśli w ogóle) i dlaczego? (Np. PyGame, Morphic, Swing itp.)

Wybraliśmy Morphic po długiej debacie między nim a PyGame. Nie rozważaliśmy QT ani GTK, ponieważ oba mają już jeden lub więcej projektów bibliotek Haskell w aktywnym rozwoju .

Jak byś nazwał tę wymyśloną bibliotekę? (Np. HOT - Haskell Opengl Toolkit; HAWT - Haskell Advanced Windowing Toolkit)

To wciąż jest przedmiotem debaty. Zdecydowaliśmy się nie brać pod uwagę HAWT i zamiast tego patrzymy na:

  • HOT - zestaw narzędzi Haskell Opengl
  • HOG - Haskell Opengl Graphics (Spraw, aby Twój projekt był zasilany HOG!)
  • Schön
Bface
źródło