Ist Haskell für produktiven Einsatz geeignet oder eher nur eine Herausforderung für den Programmierer?
-
nachtfeuer schrieb:
Ah, ja, kenne ich, du meinst Integerzahlen größer als 4294967295, nicht?
Nicht. Aber sowas von nicht. http://de.wikipedia.org/wiki/Komplexe_Zahlen
-
Ich hab keine Ahnung von Haskell, aber mich würde es interessieren was man damit so machen kann.
Gibt es sowas wie GUI Frameworks für Haskel?
Wie sieht Haskellcode aus, um eine kleine Anwendung wie hier zu erstellen?
http://doc.qt.nokia.com/4.6/mainwindows-application.htmlOder wenns um Threads geht, wie würde man sowas in Haskell programmieren?
http://doc.qt.nokia.com/4.6/threads-mandelbrot.html
Kann jemand die RenderThread::run-Methode in Haskellcode schreiben und erklären, wie sie dann einfach parallelisiert werden kann?
-
-
nachtfeuer schrieb:
..
OMFG
-
KVLKNL
-
nachtfeuer schrieb:
KVLKNL
Ist das eine Abkürzung, die man kennen muss?
-
Zeus schrieb:
nachtfeuer schrieb:
KVLKNL
Ist das eine Abkürzung, die man kennen muss?
nein nein, keine Bange, ist ein Eigenentwurf
(das letzte L meint Lesen...)
-
nachtfeuer schrieb:
Zeus schrieb:
nachtfeuer schrieb:
KVLKNL
Ist das eine Abkürzung, die man kennen muss?
nein nein, keine Bange, ist ein Eigenentwurf
(das letzte L meint Lesen...)Sag mir als nächstes nur noch, dass das "KniViL Kann Nicht Lesen" heisst? Dann müsste ich nämlich nach deinen Altern zurückfragen. Wobei schon diese Abkürzung, welche wie bei kleinen Kinder als Schutz dient, damit nur der Verfasser weiss, was damit gemeint ist und er sich dadurch ins Fäustchen lachen kann, einem leichte Zweifel aufkommen lässt. Was soll der Unsinn?
Grüssli
-
Dravere schrieb:
Sag mir als nächstes nur noch, dass das "KniViL Kann Nicht Lesen" heisst?
Grüssli
nein nein, kein Bange, das erste K steht für Kann...
(das nächste mal schreibe ich wohl besser KBLKNVLLKNL)
-
werauchimmer.... schrieb:
Oder wenns um Threads geht, wie würde man sowas in Haskell programmieren?
http://doc.qt.nokia.com/4.6/threads-mandelbrot.html
Kann jemand die RenderThread::run-Methode in Haskellcode schreiben und erklären, wie sie dann einfach parallelisiert werden kann?Kann das keiner?
-
nachtfeuer schrieb:
nein nein, kein Bange, das erste K steht für Kann...
(das nächste mal schreibe ich wohl besser KBLKNVLLKNL)
KVLKNL: kann vor Lachen kaum noch lesen.
DHDAFG. HHDNK. (=> Das hast du aber fein gemacht. Hier hast du nen Keks.)
-
nix? schrieb:
werauchimmer.... schrieb:
Oder wenns um Threads geht, wie würde man sowas in Haskell programmieren?
http://doc.qt.nokia.com/4.6/threads-mandelbrot.html
Kann jemand die RenderThread::run-Methode in Haskellcode schreiben und erklären, wie sie dann einfach parallelisiert werden kann?Kann das keiner?
Die Frage ist eher: hat irgendjemand die Bemüßigung, extra für dich seitenlangen Quelltext zum Spaß nach Haskell zu übersetzen, anstatt seinem Tagwerk nachzugehen?
-
werauchimmer.... schrieb:
Oder wenns um Threads geht, wie würde man sowas in Haskell programmieren?
http://doc.qt.nokia.com/4.6/threads-mandelbrot.html
Kann jemand die RenderThread::run-Methode in Haskellcode schreiben und erklären, wie sie dann einfach parallelisiert werden kann?Ich muss sagen, schoen eingefaerbt und multi-threaded: http://hackage.haskell.org/package/hfractal
Andere Links zum Thema: http://gregheartsfield.com/fractal-hs/ oder http://web.cecs.pdx.edu/~mpj/pubs/composing-fractals.html
-
hmm - ich sehe beim Mandelbrotviewing jetzt aber nicht sofort den spezifischen Vorteil der Verwendung von Fun.Prog. - ?
meine mandelbrot-viewer in C/C++ ohne/mit X11 Ausgabe sind nicht so viel länger evtl sogar kürzer (228 Zeilen für 2D-Ausschnitte der 4D-Mandelbrotmenge (Quaternionen) mit Fileausgabe ohne X11), wahlweise parallelisiert mittels
#pragma omp parallel for schedule ... // openMP
-
ich seh' gerade, mein C/C++ Programm ist großzügig kommentiert
ohne Kommentare sind's nur 151 Zeilen, eine Funktion für die Berechnung von ganzen Bilderserien (Variation der quaternionischen j-Koordinate) schon mitgezählt.
-
Mr. N schrieb:
Es hat in Haskell viele Abstraktionen, die in C++ undenkbar wären. Ich versuche ja auch in C++ möglichst abstrakt zu programmieren, aber Haskell bietet da nochmal deutlich mächtigere Tools.
Es ist wahrscheinlich schwer, dafuer Beispiele anzugeben, aber faellt dir gerade was ein? Rein aus Neugier, nicht weil ich dagegen argumentieren wollen wuerde.
-
zum Beispiel schrieb:
ohne Kommentare sind's nur 151 Zeilen, eine Funktion für die Berechnung von ganzen Bilderserien (Variation der quaternionischen j-Koordinate) schon mitgezählt.
Dann messe dich mit http://www.bestinclass.dk/index.php/2009/10/brians-functional-brain/ oder http://blog.willdonnelly.net/2009/10/14/brians-purely-functional-brain/ .
asddd schrieb:
Es ist wahrscheinlich schwer, dafuer Beispiele anzugeben, aber faellt dir gerade was ein? Rein aus Neugier, nicht weil ich dagegen argumentieren wollen wuerde.
Z.B. Der ganze parallele Kram in Haskell.
-
knivil schrieb:
Dann messe dich mit http://www.bestinclass.dk/index.php/2009/10/brians-functional-brain/ oder http://blog.willdonnelly.net/2009/10/14/brians-purely-functional-brain/ .
kein problem - meine C/C++ Version ist 45 Zeilen lang, inklusive X11 Ausgabe im Fenster und Parallelisierung.
g++ foo.c -o foo -O3 -fopenmp -lX11 -lm
Starte ich meinen 45-Zeiler, kann ich im gnome-system-monitor schön sehen, wie die Lastkurven für alle 4 CPU cores auf 100% gehen, während die Zellularen Muster herumschwirren ...
hier das Wesentliche:
int main(int argc, char* argv[]){ d = XOpenDisplay(NULL); if(d == NULL) return(1); s = DefaultScreen(d); bp = BlackPixel(d, s); wp = WhitePixel(d, s); r = RootWindow(d, s); w = XCreateSimpleWindow(d, r, 0, 0, W, H, 1, bp, wp); [...] while(1){ #pragma omp parallel for schedule(dynamic, 1) private(r) for(y = 0; y < H; y++){ for(x = 0; x < W; x++){ n = ison(O[((y+1)*W+x) % (W*H)]) + ison(O[((y-1)*W+x) % (W*H)]) \ + ison(O[((y)*W+x-1) % (W*H)]) + ison(O[((y)*W+x+1) % (W*H)]) \ + ison(O[((y+1)*W+x-1) % (W*H)]) + ison(O[((y-1)*W+x-1) % (W*H)]) \ + ison(O[((y+1)*W+x+1) % (W*H)]) + ison(O[((y-1)*W+x+1) % (W*H)]); i = y*W+x; switch(O[i]){ case 1: N[i] = -1; case -1: N[i] = 0; case 0: N[i] = n == 2? 1:0; }}} [...] for(y = 0; y < H; y++){ for(x = 0; x < W; x++){ if(N[y*W+x]) XSetForeground(d, gc, wp); else XSetForeground(d, gc, bp); XDrawPoint(d, w, gc, x, y); }} XFlush (d); } XCloseDisplay(d); }
-
... die restlichen 17 Zeilen sind hauptsächlich Variablendeklarationen und Erzeugung eines zufälligen Musters als Anfangszustand.
-
und da die 4 Zeilen
n = ison(O[...]) + ison(...) + ...
eigentlich eine 3-mal fortgesetzte zeile darstellen, komme ich genau genommen auf 42 Zeilen