Krautkanal.com

Veröffentlicht am 2015-10-29 15:50:1 in /prog/

/prog/ 8015: Funktionale Programmierung

iamsteffen Avatar
iamsteffen:#8015

Programmiert Bernd eigentlich auch in Funktionalen Sprachen? Wenn ja welche?

anhskohbo Avatar
anhskohbo:#8018

Haskell, aber halt nur in der Uni. Habe heute versucht Haskell in einem anderen Projekt zu benutzen, aber sobald es um Stringverarbeitung ging, bin ich dann doch eingeknickt und zu Java gewechselt.

Schande über mein Haupt.

armcivor Avatar
armcivor:#8021

>>8018

Hat Bernd Data.Text probiert?

splashing75 Avatar
splashing75:#8023

Ist funktionale Programmierung in der Realität relevant? Bernd hat die Möglichkeit, ein entsprechendes Modul im Studium zu belegen, möchte dies aber eigentlich nur tun, wenn es auch in irgendeiner Art und Weise nützlich ist. Das theoretische Kreiswichsen tut mittlerweile nur noch weh.

keyuri85 Avatar
keyuri85:#8024

>>8023
>Ist funktionale Programmierung in der Realität relevant?
Nein.

oanacr Avatar
oanacr:#8025

>>8023
Im Moment hält sich das ganze noch in Grenzen. Dennoch bieten Sprachen wie Haskell enorme Vorteile, die in der Zukunft noch von großer Bedeutung sein könnten (Stichwort: Nebenläufigkeit).

raquelwilson Avatar
raquelwilson:#8026

>>8025
Die Zukunft ist jetzt. Klar musst du in Spark zustandslose Funktionen herumschicken, trotzdem geht das genausogut in Java. Scala oder Clojure haben vlt. Chancen, aber Haskell wird einfach für die meisten Programmierer immer mehr oder weniger zu kompliziert sein, daher ist das Risiko für Nutzung in Projeggden zu hoch.

krdesigndotit Avatar
krdesigndotit:#8027

>>8023
> Ist funktionale Programmierung in der Realität relevant?
Klar.

> Das theoretische Kreiswichsen tut mittlerweile nur noch weh.
So kann man es auch nennen…

Allerdings ermöglicht dir das wirklich coole Sachen, die du wirklich haben willst.

>>8026
Ja, Clojure und Scala haben große Chancen (aktuell ist ja wohl Clojure erfolgreicher).

Die Bedeutung von Haskell lässt sich aber auf keinen Fall bestreiten.

mrzero158 Avatar
mrzero158:#8037

Ja, Formeln in Excel

meisso_jarno Avatar
meisso_jarno:#8039

Elixir, etwas Common Lisp und Scala, falls letzteres zählt. Haskell steht seit Jahren auch noch auf der TODO-Liste. Vielleicht irgendwann mal.

>>8023
>Ist funktionale Programmierung in der Realität relevant?
In gewisser Weise schon. Python hat z.B. eine marginale funktionale Unterstützung, Appels Swift hat funktionale Aspekte und, wie bereits genannt, ist wirkliche nebenläufige Programmierung in funktionalen Sprachen einfach schön zu realisieren. Und nein, mit Java kommt man dort nicht ansatzweise dran.

rahmeen Avatar
rahmeen:#8042

>>8025
> Stichwort: Nebenläufigkeit
Ja, das dachte ich auch. Aber leider hinkt bei Haskell die Realität da dem, was theoretisch möglich wäre und immer wieder versprochen wird, weit hinterher.

Ich habe es in Haskell einfach nicht geschafft, meinen Kot zu parallelisieren. Es wurden zwar alle Kerne ausgelastet, aber es lief effektiv langsamer als mit einem Kern. Irgendwo in den Innereien von Haskell muss eine Synchronisation stattgefunden haben. Leider war es auch nach mehreren Tagen unmöglich, die Ursache zu finden, weil man einfach nicht nachvollziehen kann, was intern abgeht.

In C++ wäre die Parallelisierung ein Klacks und in einer halben Stunde erledigt gewesen. In Haskell musste ich dagegen komplett aufgeben.

Es ist eigentlich schade. Haskell hat wirklich einige sehr interessante Ideen und ist bisher die einzige funktionale Programmiersprache gewesen, die mich tatsächlich begeistert hat, wo ich nicht nur das Gefühl hatte, es ist alter Wein in neuen Schläuchen. Lohnt sich auf jeden Fall, sich mal damit auseinanderzusetzen.

Aber in der Praxis fährt man wohl bis auf weiteres mit anderen Sprachen besser. Vielleicht ist der Compiler in 10 Jahren ja weiter und beherrscht dann Parallelisierung besser. Allerdings ist zu bedenken, dass auch die anderen Sprachen sich bis dahin weiterentwickelt haben werden.

alek_djuric Avatar
alek_djuric:#8043

>>8042
>Allerdings ist zu bedenken, dass auch die anderen Sprachen sich bis dahin weiterentwickelt haben werden.


Huiuiui, Bernd kann gar nicht abwarten, welche bahnbrechenden Innovationen Perl, PHP und C hervorbringen werden.

*hysterisch quiiitsch*

jonkspr Avatar
jonkspr:#8044

>>8015
>>8042
Bernd benutze forkIO. Bernd freue sich.

judzhin_miles Avatar
judzhin_miles:#8047

Clojure, Racket und ein wenig Haskell. Eher akademische Anwendung, aber FP überlegen. Wird gerade in Wolken-Umgebung relevant. /faden

raquelwilson Avatar
raquelwilson:#8050

>>8044
Bernd hatte es zunächst mit Control.Parallel versucht, er ist sich nicht mehr sicher, ob er es mit forkIO auch noch probiert hatte. Auf jeden Fall zeigt forkIO aber ein problematisches Muster in Haskell-Programmen: Sobald man etwas machen möchte, was über einfachste Beispiele hinausgeht, ist man eigentlich nur noch damit beschäftigt, prozedurale Konzepte in einer funktionalen Sprache nachzubauen.

Haskell wäre sehr interessant, wenn der Compiler irgendwann so intelligent wird, dass er automatisch parallelen Code erzeugen kann.

Auch automatische Memoisation wäre auch sehr schön. Irgendwie scheint es das ja zumindest manchmal bei unendlichen Listen zu geben, aber manchmal irgendwie auch wieder nicht. Bernd konnte nicht nachvollziehen nach welchen Kriterien. In seinem Fall geschah es jedenfalls nicht, und er musste mit Hashtabellen manuell memoisieren und deshalb alles auf IO-Monaden umschreiben. Am Ende sah das Programm, das eigentlich sehr elegant angefangen hatte, fast genau so aus wie die C++-Version, nur mit dem Unterschied, dass Bernd 100x so lange dafür gebraucht hat und es nicht leicht zu parallelisieren war.

katiemdaly Avatar
katiemdaly:#8096

Bernd nutzt gerne die funktionalen Fähigkeiten von C#, es fühlt sich sehr natürlich an, ist teils schneller und auch im Codebild gut anzusehen.

ultragex Avatar
ultragex:#8124

>>8015
Bernd liebäugelt mit http://elm-lang.org/, da es scheinbar die guten Teile Haskells mit sehr guten Fehlermeldungen und ziemlich guter Performance des generierten JS verbindet.

layerssss Avatar
layerssss:#8126

Bernd Programmiert in Python und Java, aber versucht sich absichtlich von Funktionalen Herangehensweise fern zu halten, des Laufzeitverhalten wegens. Ist bei der Arbeit mit Bäumen nicht immer ganz einfach.

iamglimy Avatar
iamglimy:#8199

>>8015>>8050

forkIO ist natürlich sehr imperativ und macht natürlich nur Sinn, wenn du eh schon einen IO-Kontext hast, für andere Kontexte gibt es großartige Lösungen.


> Haskell wäre sehr interessant, wenn der Compiler irgendwann so intelligent wird, dass er automatisch parallelen Code erzeugen kann.
Das geht tatsächlich mit Data Parallel Haskell wohl https://wiki.haskell.org/GHC/Data_Parallel_Haskell

Siehe auch: https://wiki.haskell.org/Parallel

> prozedurale Konzepte in einer funktionalen Sprache nachzubauen.
Glaube ich nicht, aber manchmal ist der FP-Weg nicht so offensichtlich, glaube ich.

> In seinem Fall geschah es jedenfalls nicht, und er musste mit Hashtabellen manuell memoisieren und deshalb alles auf IO-Monaden umschreiben.

Bernd muss, um das Problem pur zu lösen, die State-Monade verwenden, deren Zustand ein HashTable ist. Die State-Monade ist ja pur, da sie einfach durch Funktionsaufrüfe ersetzt werden könnte, bei denen der State Manuell durchgereicht wird.

Eine Monade ist ja nicht inpur oder ein Nachbau von imperativen Konzepten, sondern ein ganz eigenes, mächtiges Konzept: http://dev.stephendiehl.com/hask/#monads