Lohnt sich Clojure? Eure Meinungen zur Sprache.

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
ctwx
Beiträge: 321
Registriert: 04.04.2010 23:06:55
Lizenz eigener Beiträge: MIT Lizenz

Re: Lohnt sich Clojure? Eure Meinungen zur Sprache.

Beitrag von ctwx » 19.06.2014 17:32:42

wanne hat geschrieben:Und als C-Programmierer sehe ich schon wieder wo die massenweise unnötigen Speicherzugriffe stecken.
Kannst du das eventuell etwas genauer ausführen? Clojure verwendet ja die JVM und irgendwie hat sich die Meinung verbreitet, dass man heutzutage eh genug Ressourcen hat und lieber verschwenderisch sein soll, damit der Code "besser" aussieht -- mein Professor in Programmierung ist Java-Programmierer und meint, man könne lieber mehr Hardware kaufen anstatt sich mit solchen Sachen aufzuhalten.
Liffi hat geschrieben:Imho bringt es einen immer weiter, eine Sprache zu lernen, mit deren Paradigma man noch nicht wirklich vertraut ist. Wenn du noch keine funktionale Programmiersprache kennst, lerne Clojure! (oder Haskell, Erlang, Scala,....).
All diese Sprachen sollten sich, aufgrund ihrer funktionalen Programmierweise, brauchbar parallelisieren lassen.

Deine Anforderungen werden vermutlich am besten durch Haskell:
- Entwicklung wird nicht durch eine Firma
- Hohe Parallelisierbarkeit
- Funktional
- GHC (eine Implementierung) kann sowohl interpretieren als auch in native Maschinensprache übersetzen. Falls letzteres nicht direkt geht, kann auch C Code erzeugt werden (keine Ahnung, wie gut der ist :-))
- kein Python ;-)
Noch ein weiterer Kandidat? :D Das Entscheiden wird immer schwieriger. Google Go finde ich zwar so auch sehr interessant, aber ziehe ich mittlerweile nicht mehr in Betracht, da ich lieber etwas rein funktionales will. OK, Clojure ist da auch nicht 100% konsequent, aber das ist in Ordnung.

Haskell klingt interessant, mich würde hier aber interessieren, inwiefern es "parallel" besser beherrscht als Clojure -- denn da habe ich in letzter Zeit sehr häufig gelesen und gehört, dass Clojure hier einfach Spitzenreiter ist, obwohl ich mich natürlich frage, wieso, denn letztlich wird es ja auf Java Bytecode wieder abgebildet.

ctwx
Beiträge: 321
Registriert: 04.04.2010 23:06:55
Lizenz eigener Beiträge: MIT Lizenz

Re: Lohnt sich Clojure? Eure Meinungen zur Sprache.

Beitrag von ctwx » 23.06.2014 21:22:29

Ich habe mich noch mal anderweitig weiter informiert und bin zu dem Entschluss gekommen, erst einmal mir Haskell anzuschauen, vor allem den Teil der parallelen Programmierung und anschließend mal Clojure um zu vergleichen, welche Sprache mir da eher zusagt. Grundsätzlich neige ich nun eher zu Haskell, weil sie nicht von der JVM abhängig, nativ kompiliert werden kann und nicht zuletzt, weil sie stark typisiert ist. Abgesehen davon habe ich einen Kollegen der auch Haskell gemacht hat, und er meint, die Syntax ist so grotten schlecht, dass ich lieber Haskell nehmen soll. :) Also will ich herausfinden was daran wahr ist.

Aber abgesehen von Haskell/Clojure werde ich mir auch weiterhin C++11 anschauen, was ich wirklich jedem empfehlen kann, der C++ bisher programmiert hat. :)

Vielen Dank für die bisherigen Antworten. Über weitere Kommentare würde ich mich freuen.

wanne
Moderator
Beiträge: 7462
Registriert: 24.05.2010 12:39:42

Re: Lohnt sich Clojure? Eure Meinungen zur Sprache.

Beitrag von wanne » 23.06.2014 22:50:26

Liffi hat geschrieben:All diese Sprachen sollten sich, aufgrund ihrer funktionalen Programmierweise, brauchbar parallelisieren lassen.
Dem muss ich massiv wiedersprechen. Außer Haskell ist mir keine funktionale Sprache bekannt, für die es effiziente parallele implementierungen gibt. Es gibt vielleicht ganz nette spielereien aber es reicht eben nicht das Programm wild in irgend welche teile zu zerreißen und dann die auf möglichst vielen kernen auszuführen. Das sorgt dir nur dafür, dass deine CPU die ganze Zeit auf den RAM wartet weil man sich damit das Caching kaputt macht.
Parallelisierung auf Compilerebene funktioniert leider eben praktisch nicht. Defakto werden die programme durch die kleineren Chache-hit raten eher langsamer als eine singlethreated wariante. Insbesondere wenn man's dann mit C++ oder ähnlichem vergleicht.
ctwx hat geschrieben:C++11 anschauen
Tolles sprache zum produktiv arbeiten. Aber um neue konzepte kennen zu lernen würde ich das nicht unbedingt empfehlen. C++ kann eben alles. Führt dazu dass man das benutzt, was man eh schon kennt.
ctwx hat geschrieben:
wanne hat geschrieben:Und als C-Programmierer sehe ich schon wieder wo die massenweise unnötigen Speicherzugriffe stecken.
Kannst du das eventuell etwas genauer ausführen?
Nja du läufst das erste mal über die Liste und prüfst auf größer und dann läufst du nochmal drüber und prüfst auf kleiner gelich. Das kannst du auch in einem durchlauf haben.
Das nächste ist nicht mehr ganz so einfach. Dank der lazy-evaluation kann man da einiges optimieren. (Und ich kann mir durchaus vorstellen, dass der compiler das auch macht. Könnte mir aber auch vorstellen das nicht.) Aber so wie's da steht wird machst du dir da für jeden durchlauf eine neue liste mit anfangs unbekannter länge (variable längen sind ganz und gar nicht effizient) du hast am ende also wenn's dumm läuft log(n) listen im speicher statt einer.
ctwx hat geschrieben: irgendwie hat sich die Meinung verbreitet, dass man heutzutage eh genug Ressourcen hat und lieber verschwenderisch sein soll, damit der Code "besser" aussieht -- mein Professor in Programmierung ist Java-Programmierer und meint, man könne lieber mehr Hardware kaufen anstatt sich mit solchen Sachen aufzuhalten.
Jaja das sagen sie am anfang alle. Aber Zeit ist Geld. Und sachen dann auf mehr Hardware zu verteilen ist dann eher komplizierter als am anfang effizenten Code zu schreiben. Guck dir einfach mal an was Facebook da jetzt für nen Ärger hat.
Aber im Prinzip macht's Java schon richtig. da gibt's dann Array.sort und fertig. Sortieralorithmen u.ä. primitiva sind schön performant implementiert – teilweise sogar in C. Das ist wenig Code der oft ausgeführt wird. Für das eigentliche Projekt programmiert man dann in Java und guckt zuerstmal dass der schnell und lesbar geschrieben ist. Die reduzierte ausführzeit, die man da gewinnen kann kommt nie an das ran, was man an programmierzeit verliert.
ctwx hat geschrieben:Haskell klingt interessant, mich würde hier aber interessieren, inwiefern es "parallel" besser beherrscht als Clojure.
Nja: Guck dir einfach mal die benchmarks an. fannkuck-redux lässt sich wunderpar parallelisieren. Beide sprachen haben bei 4 CPUs etwa den Faktor 3.9 (Haskell sogar 3.92) Aber Haskell ist halt einfach mal über doppelt so schnell. Ist natürlich nicht representativ. Aber ich denke das das meiste etwa in die Richtung zeigt.
http://benchmarksgame.alioth.debian.org ... &data=u32q
rot: Moderator wanne spricht, default: User wanne spricht.

Liffi
Beiträge: 2306
Registriert: 02.10.2004 01:33:05

Re: Lohnt sich Clojure? Eure Meinungen zur Sprache.

Beitrag von Liffi » 24.06.2014 08:16:27

wanne hat geschrieben:
Liffi hat geschrieben:All diese Sprachen sollten sich, aufgrund ihrer funktionalen Programmierweise, brauchbar parallelisieren lassen.
Dem muss ich massiv wiedersprechen. Außer Haskell ist mir keine funktionale Sprache bekannt, für die es effiziente parallele implementierungen gibt.
Zumindest schon mal noch Erlang. Bei Scala habe ich mit Akka schon ein paar beeindruckende parallele Geschichten gesehen, aber sonst bin ich mir nicht sicher, wie die JVM die Parallelisierung bremst.

EDIT::
Nachdem ich mir auch ein paar Benchmarks angeschaut habe, muss ich sagen: Erlang scheint langsam zu sein 0_o?! Das widerspricht ein wenig dem, was ich glaubte verstanden zu haben :-).

EDIT2::
Ich denke das größte Problem ist, dass Parallelprogrammierung hart ist. Einige Sprachen nehmen einem einen großen Teil des Aufwands ab. Lowlevelsprachen eher nicht. Dort ist es dann erheblich einfacher, schöne Deadlocks zu produzieren.

Benutzeravatar
peschmae
Beiträge: 4844
Registriert: 07.01.2003 12:50:33
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: nirgendwo im irgendwo

Re: Lohnt sich Clojure? Eure Meinungen zur Sprache.

Beitrag von peschmae » 24.06.2014 09:06:45

Liffi hat geschrieben: Nachdem ich mir auch ein paar Benchmarks angeschaut habe, muss ich sagen: Erlang scheint langsam zu sein 0_o?! Das widerspricht ein wenig dem, was ich glaubte verstanden zu haben :-).
Kommt sicher wie immer nur darauf an was du genau benchmarkst...

MfG Peschmä
"er hätte nicht in die usa ziehen dürfen - die versauen alles" -- Snoopy

Antworten