Bringt C# zusätzlich zu Java etwas?
-
"Du hast nicht verstanden" und es folgt eine konstruktive Erklärung.
Die Reihenfolge musst du mir ueberlassen. Erklaerungen werden manchmal vorangestellt manchmal nachgezogen, aber ich werde deiner Bitte entsprechen, weniger konfrontativ zu sein. Vielleicht finde ich noch ein Zen Gedicht, dass dieses Thema behandelt.
-
Ich mag folgende Definition:
Joel Moses credits Landin with introducing the term closure to refer to a lambda expression whose open bindings (free variables) have been closed by (or bound in) the lexical environment, resulting in a closed expression, or closure
-
knivil schrieb:
aber ich werde deiner Bitte entsprechen, weniger konfrontativ zu sein.
-
Saxo schrieb:
Zeus schrieb:
Btw
Saxo liegt mit seine Aussage daneben, es geht nicht um Closure sondern um First-class-Function/Higher-order Function.Aus meiner Sicht ist eine Closure eine First-class-Function. Was ist mit "Higher-order Function" gemeint? So wie ich das verstanden habe geht es darum, ob von innerhalb einer Funtkion auf freie Variablen zugegriffen werden können (aka Variablen, die außerhalb des Contexts der Funktion liegen):
"When a function refers to a variable defined outside it, it's called a free variable. A function that refers to a free lexical variable is called a closure. (...) The name "closure" is a left over from earlier Lisp dialects. It derives from the way closures have to be implemented under dynamic scope." Paul Graham, ANSI Common Lisp, Prentice Hall, 1996, p.107.
Stammt aus einem berühmten Lisp-Buch...
-- Saxo
Weil Closure eine syntaktisches Pattern nahe kommt während First-class-Function konzeptionelle Fähigkeit ist. Closure impliziert First-class-Function, aber nicht umgekehrt.
Oder wie es im deutschen Wiki steht:
http://de.wikipedia.org/wiki/First-Class-Funktion schrieb:
Erst damit wird es möglich, Closures zu erzeugen, Anonyme Funktionen zu definieren oder Currying durchzuführen.
Es ist aber keine Garantie.
Kurz gesagt beschreibt Higher-order function die Fähigkeiten Funktion als Parameter und Rückgabewert zu verwenden.
-
Hatte eigentlich dieselbe Frage und finde, dass Java zusätzlich zu lernen doch ein beachtlicher Aufwand ist. Hat das wirklich nen Sinn?
-
Kurz gesagt beschreibt Higher-order function die Fähigkeiten Funktion als Parameter und Rückgabewert zu verwenden.
Okay, hier (http://confluence.jetbrains.com/display/Kotlin/Functions#Functions-Higherorderfunctions) wird das Gleiche gessagt: "A higher-order function is a function that takes functions as parameters, or returns a function.". Und JetBrains muss es wohl wissen ;-).
http://de.wikipedia.org/wiki/First-Class-Funktion schrieb:
Erst damit wird es möglich, Closures zu erzeugen, Anonyme Funktionen zu definieren oder Currying durchzuführen.Dann ist eine First-Class-Funktion auch ein Funktions-Literal, siehe http://confluence.jetbrains.com/display/Kotlin/Function+literals. Ich dachte First-Class-Funktion klingt wie First-Class-Object, aber eine Higher-Order-Function entspricht einem First-Class-Object und nicht einer First-Class-Funktion. Oh je, hoffentlich ist das jetzt richtig ...
Nebenbei, hier ist noch ein Link zu einer Diskussion, wo jemand mit Java-Methoden versucht hat Closures zu implementieren: http://www.theserverside.com/discussions/thread.tss?thread_id=57148 Sogar Neil Gafter, der bei Sun am Java-Compiler gearbeitet hat, versucht ihm zu erklären, dass er damit keine Closures implementieren kann. Dieser Typ redet einfach bis zum Umfallen dagegen. Oh Mann ...
Go werde ich mir auf jeden Fall noch ansehen. Steht recht weit oben auf meiner Liste.
Ich habe jetzt über mehrere Wochen mich mit Go beschäftigt und kleine Progrämmchen damit geschrieben. Ich komme für mich selbst zum Schluss, dass Go für mich nichts ist. Es ist ein modernisiertes C und geht eigentlich in den grundlegenden Eigenschaften nicht über C hinaus. Natürlich ist vieles besser gemacht als in C, aber es bleibt C in moderneren Schläuchen. Als Go-Entwickler wird man von den Java- oder C++-Entwicklern immer als Entwickler 2.Klasse angesehen. Beruflich wird es Go wohl nicht bringen. Vielleicht irgendwo wo Go zusätzlich zu Java/C++/C# verwendet wird.
-- Saxo
-
Saxo schrieb:
Go werde ich mir auf jeden Fall noch ansehen. Steht recht weit oben auf meiner Liste.
Ich habe jetzt über mehrere Wochen mich mit Go beschäftigt und kleine Progrämmchen damit geschrieben. Ich komme für mich selbst zum Schluss, dass Go für mich nichts ist. Es ist ein modernisiertes C und geht eigentlich in den grundlegenden Eigenschaften nicht über C hinaus.
Es soll bzgl. Parallelisierung interessante Ideen mitbringen. Das interessiert mich.
Saxo schrieb:
Natürlich ist vieles besser gemacht als in C, aber es bleibt C in moderneren Schläuchen.
Ich bin gerade an den modernen Schläuchen interessiert, da ich selbst eine Programmiersprache entwickle und mich auch gerne inspirieren lasse - wobei Inspiration nicht unbedingt nachprogrammieren bedeutet, aber auch nicht ausschließt. Wenn da sinnvolle Konzepte drin sind, auf die ich noch nicht selbst gekommen bin, möchte ich darauf natürlich nicht verzichten.
Dafür muss ich die Sprache halt mal kennenlernen.
Saxo schrieb:
Als Go-Entwickler wird man von den Java- oder C++-Entwicklern immer als Entwickler 2.Klasse angesehen. Beruflich wird es Go wohl nicht bringen. Vielleicht irgendwo wo Go zusätzlich zu Java/C++/C# verwendet wird.
Mir ist sowas von egal, wie andere Entwickler mich sehen - würde ich danach gehen, wäre ich jetzt Pascal, Delphi und Java-Experte - auf jeden Fall kein C++, weil das sowas von veraltet ist...
Bis auf Java ist das alles tot und Java müffelt schon deutlich.Beruflich bin ich eh schon auf C++ only unterwegs, also muss ich mir um meine Klasse auch keine Sorgen mehr machen.
Aber Konzepte zu kennen, die andere vielleicht nicht kennen, bringt mich auch in C++ immer wieder auf Ideen, die andere auch nicht kennen. Man kann in C++ erstaunlich viel tricksen...
-
Es soll bzgl. Parallelisierung interessante Ideen mitbringen. Das interessiert mich.
Nun, die meisten Go Ideen diesbezueglich sind zusammengeklaut und gibt es in anderen Sprachen ausgereifter. Nun, klauen ist nicht immer schlecht.
-
Es soll bzgl. Parallelisierung interessante Ideen mitbringen. Das interessiert mich.
Die Goroutines kann man auch in anderen Sprachen nachbauen, wenn man sein eigenes Thread Multiplexing macht. Ist z.B. in Java schon gemacht worden:
oder:
http://objectscape.blogspot.de/2013/06/go-style-goroutines-in-java-using.html
Die selects auf channels in Go sind schwieriger nachzubauen, weil dazu CSP (siehe Communicationg Sequential Processes von Tony Hoare) benötigt wird. Gibt es aber auch schon in Java:
http://www.cs.kent.ac.uk/projects/ofa/jcsp/
Aber die Goroutines/Channels sind nett gemacht in Go. Schon wahr.
-- Saxo
-
Aber die Goroutines/Channels sind nett gemacht in Go. Schon wahr.
Siehe Erlang, Haskell, ... Ist nicht schlimm, wenn sie in anderen Sprachen auch angeboten werden, jedoch sollte man seine Abneigung gegenueber der Ursprungssprache ueberdenken.
-
Saxo schrieb:
Kurz gesagt beschreibt Higher-order function die Fähigkeiten Funktion als Parameter und Rückgabewert zu verwenden.
Okay, hier (http://confluence.jetbrains.com/display/Kotlin/Functions#Functions-Higherorderfunctions) wird das Gleiche gessagt: "A higher-order function is a function that takes functions as parameters, or returns a function.". Und JetBrains muss es wohl wissen ;-).
Ach woher haben Sie ihre Expertise? Solange ist Jetbrains nicht als LanguageDesigner/Compilerbauer unterwegs, um alles was sie schreiben wie Relegion aufzusaugen.
-
Ich bin zu faul, den Thread nach On/Off-Topic aufzusplitten, also bitte unterlasst diese Diskussion über Closures/Higher-Order-Functions. Sie wird zu nichts führen. Danke