Bringt C# zusätzlich zu Java etwas?



  • Deine haltlosen Behauptungen sind konstruktiv? Was du sagst, ist einfach falsch. Was soll ich denn anderes schreiben? Selbst meine Argumentation hast du voellig ignoriert. Und dann willst du ueber etwas diskutieren, dass du erst ergooglen musst? lol.

    Neues wirst du wohl nur schwer lernen, da du voll von Vorurteilen, Halbwissen und Hoerensagen bist. Viel Spass bei LINQ in C# ...

    Trotzdem kann man auf der JVM Closures implementieren

    Du hast einfach nicht verstanden, was Closures sind und wie sie ausgedrueckt werden koennen.



  • Mein Kung Fu ist besser als Deins!

    Programmieren ist ein Job wie jeder andere auch, nur dass 'wir' uns mehr
    mit dem Job identifizieren als andere Berufszweige und viele eine stetige
    Verbesserung nur in der Wahl der Sprache suchen. Das ist m.E. völliger Quatsch.
    Es gibt weder die beste Sprache noch den goldenen Weg um zukunftssicher zu sein.
    Lebenslanges Lernen heisst das Motto, dazu gehört auch sich mal C#, I@ oder O*!^2
    anzuschauen. Man lernt stets dazu, egal was in 20 Jahren ist, dümmer wird man
    jedenfalls nicht. Der besten Sprache hinterherzulaufen ist jedenfalls der falsche Weg.
    Unterhaltet euch mal mit Cobol oder Delphi Programmierern. Ja die überleben auch heute noch sehr gut. Und vor allem ist der Programmierer 'Dienstleister' des Kunden. Dem
    ist es mehr als egal, in welcher Sprache sein Anwendungsprogramm ist und wie elitär der Quellcode strukturiert ist. Das Ergebnis zählt.

    just my 2 cents 🙂



  • knivil schrieb:

    Trotzdem kann man auf der JVM Closures implementieren

    Du hast einfach nicht verstanden, was Closures sind und wie sie ausgedrueckt werden koennen.

    Mal abgesehen davon, dass "Du hast einfach nicht verstanden" eine wertende Aussage ist, die die Behauptung in den Raum stellt, dass Du etwas besser wüsstest, als der minderwertige Rest der Welt.... da Du offenbar Experte bist, Du mit Saxo das Thema inzwischen soweit ins Off-Topic gebracht hast, dass es eigentlich auch egal ist, bring doch bitte mal mehr konstruktive Information, denn ehrlich gesagt, habe ich mir den Wikipedia-Artikel zu Closures schon mehrfach durchgelesen und am Schluss komme ich immer wieder dazu, dass es nichts anderes ist als ein Funktionsobjekt.
    Wenn das hinkommt, dann sehe ich kein Problem, Funktionsobjekte auf einer JVM zu implementieren.

    Aber Da Du die Sache offenbar besser verstehst als Saxo und ich, wäre zumindest ich Dir dankbar, wenn Du eine leichtverständliche Erklärung für Closures liefern könntest, damit ich Dir danach sagen kann, ob ich Closures verstanden habe oder nicht.

    Vielen Dank.



  • Kannst du mir mal bitte die konkreten Punkte nennen, was meine Aussage nicht rechtfertigt!

    Mal abgesehen davon, dass "Du hast einfach nicht verstanden" eine wertende Aussage ist, die die Behauptung in den Raum stellt, dass Du etwas besser wüsstest, als der minderwertige Rest der Welt

    Das ist eine reine Unterstellung. Ich habe direkt Saxo angesprochen. Der Rest der Welt war auch nicht zugegen und alle Beitraege waren konstruktiv. Mir ist auch der logische Schluss von 'Du hast nicht verstanden' zu 'minderwertige Rest der Welt' voellig unverstaendlich.

    Wenn das hinkommt, dann sehe ich kein Problem, Funktionsobjekte auf einer JVM zu implementieren.

    Meine Rede, Closures sind was triviales. Ganz leicht mit Objekten beschrieben mit beispielsweise class umzusetzen. Das Lesen und Verstehen meiner Beitraege kann ich dir leider nicht abnehmen. Java hat Closures, jede Objektorientierte Sprache hat Closures, bei C waere mir der Aufwand zu gross. Und dennoch programmiere ich in C funktional, nein nicht im gesammten Programm, aber dort wo es sich anbietet.

    Hier mal fuer dich die Argumentationskette von Saxo:

    Ohne Closures lässt sich etwa FP nicht umsetzen

    Behauptung ohne Argument, aber egal

    Viele Sprachen haben gar keine Closures

    Ja nehme ich Funktoren. Funktoren sind Funktionsobjekte. Hier mein Zitat dazu:

    Nimmt man Funktoren ... Object poor man's cloure blahblahblah

    D.h. Voraussetzung nach Saxo erfuellt.

    Closures allein sind aber auch nicht ausreichend für FP

    Ja sehr konkret.

    1.) Aussage schlichte Behauptung. Ich brauche keine Closures fuer FP, wobei das von der Definition FP abhaengt.
    2.) Aussage falsch, da es beisielsweise in C++ wie auch in Java leicht umzusetzen ist. Ein No-Brainer sozusagen.
    3.) Was braucht man denn noch? Disziplin beim Programmieren um auf Zuweisung zu verzichten.

    Warum soll das meine Aussage nicht rechtfertigen?

    Off-Topic gebracht

    Wieso? Meine Rat: Willste besserer Programmierer werden, nichts sprich gegen C# oder mache etwas FP. Willste mehr Geld, investiere in Aktien und verschwende nicht deine Zeit mit Programmieren.

    bring doch bitte mal mehr konstruktive Information

    Stelle doch konkrete Fragen und nimm auf bereits genannte Informationen zu Closures Bezug.



  • I can't go to bed yet. Somebody is wrong on the Internet. 🙂



  • knivil schrieb:

    Kannst du mir mal bitte die konkreten Punkte nennen, was meine Aussage nicht rechtfertigt!

    Eine Aussage "Du hast nicht verstanden" verstopft eine Diskussion. Du stehst da und fühlst Dich im Recht, jemand anderer steht da und erklärt Deine Meinung(!) für irrelevant.
    Ob der jenige nicht verstanden hat, oder ob ihr einfach aneinender vorbei redet, werdet ihr so nicht rausfinden. "Du hast nicht verstanden - Punkt" ist nie gerechtfertigt.

    Wenn Du der Meinung bist, dass Saxo etwas nicht verstanden hast, formuliere halt mal eine Frage: "Kann es sein dass Du das so und so verstanden hast - in dem Fall entsteht doch das und das Problem... ich verstehe das so und so, deswegen geht auch das und das."

    knivil schrieb:

    Mal abgesehen davon, dass "Du hast einfach nicht verstanden" eine wertende Aussage ist, die die Behauptung in den Raum stellt, dass Du etwas besser wüsstest, als der minderwertige Rest der Welt

    Das ist eine reine Unterstellung. Ich habe direkt Saxo angesprochen. Der Rest der Welt war auch nicht zugegen und alle Beitraege waren konstruktiv.

    Ich zähle mich zum Rest der Welt und sehe gerade das Konstruktive anders.

    "Du hast nicht verstanden" ist die Aussage, dass ihr auf unterschiedlichen Leveln seid - und Du auf dem Wissenden, die andere auf dem Unwissenden. Das ist erstmal auch eine Herabstufung.
    Konstruktiv ist, wenn man etwas weiß und dem anderen eine Treppe baut, statt nur ein Schild hinzustellen auf dem "Bitte draußen bleiben".

    Die Aussage "Lern was" (...dann darfst Du irgendwann mitreden) schlägt in die gleiche Kerbe.

    Ein "Du hast nicht verstanden" kann die Beschreibung einer Tatsache sein, aber es ist immer auch ein Armutszeugnis, wenn danach nicht versucht wird, auf ein gemeinsames Verständnis zu kommen. Versuchst Du demjenigen ein größeres Verständnis näher zu bringen (!= aufzwängen), dann ist das konstruktiv.

    Und Sprüche wie "Neues wirst du wohl nur schwer lernen, da du voll von Vorurteilen, Halbwissen und Hoerensagen bist." erachte ich ebenfalls als nicht konstruktiv, sondern als konfrontativ.
    Konfrontation ist an dieser Stelle in meinen Augen nicht erforderlich, daher möchte ich Dich bitten, Deine Wortwahl kooperativer und damit auch konstruktiver zu gestalten, okay?



  • wenn man etwas weiß und dem anderen eine Treppe baut

    Die Treppe ist da. Man muss nur mehr als 3 Worter lesen. Zum Rest der Welt habe ich genug gesagt.

    Eine Aussage "Du hast nicht verstanden" verstopft eine Diskussion.

    Welche Diskussion? Ueber Fakten laesst sich schwer diskutieren. Auch gabs genug Begruendung warum Dinge falsch sind.

    Und Sprüche wie "Neues wirst du wohl nur schwer lernen, da du voll von Vorurteilen, Halbwissen und Hoerensagen bist." erachte ich ebenfalls als nicht konstruktiv, sondern als konfrontativ

    Selbstverstaendlich ist das konfrontativ. Sogar eine Aufforderung besagte Einstellung abzulegen und Closures nicht als Voraussetzung fuer FP unabdingbar darzustellen. In C wuerde ich keine Closures nachbauen und dort anders FP betreiben als in C++ oder Java und wieder anders in Lisp/Scheme.

    Konfrontation ist an dieser Stelle in meinen Augen nicht erforderlich

    Ja, vielleicht war mehr Nachsicht angebracht. Die Methoden von uns beiden unterscheiden sich. Manchmal habe ich auch gute Tage.



  • Üblicher Krieg, ob ein Merkmal der Sprache oder dem Code zugesprochen wird.

    Btw
    Saxo liegt mit seine Aussage daneben, es geht nicht um Closure sondern um First-class-Function/Higher-order Function.



  • knivil schrieb:

    Eine Aussage "Du hast nicht verstanden" verstopft eine Diskussion.

    Welche Diskussion? Ueber Fakten laesst sich schwer diskutieren. Auch gabs genug Begruendung warum Dinge falsch sind.

    Das siehst Du so, erlaube anderen das anders zu sehen. Und wenn Du zum Rest der Welt genug gesagt hast, dann schweige einfach, wenn Dir nicht mehr als "Du hast nicht verstanden" einfällt.

    knivil schrieb:

    Und Sprüche wie "Neues wirst du wohl nur schwer lernen, da du voll von Vorurteilen, Halbwissen und Hoerensagen bist." erachte ich ebenfalls als nicht konstruktiv, sondern als konfrontativ

    Selbstverstaendlich ist das konfrontativ.

    Konfrontation ist hier bitte nicht selbstverständlich und in meiner Rolle als Moderator möchte ich Dich bitten, Konfrontation zu vermeiden oder wenigstens sofort danach erkenntbar eine Tür zu öffenen: Heißt: "Du hast nicht verstanden" und es folgt eine konstruktive Erklärung.
    Wenn Du für eine konstruktive Erklärung keine Lust oder Zeit hast, dann zieh Dich einfach aus der Geschichte raus, ohne nachzutreten. Ein "So ein Bullshit. Du hast keine Ahnung." kann inhaltlich richtig sein, ist aber einfach keine Art.

    Wer nicht auf Dich hören will, muss halt eigene Erfahrungen machen. Und da hat jeder auch sein Recht drauf.

    Die Behauptung, dass jemand voll von Vorurteilen ist, ist jedenfalls nicht konstruktiv und spricht definitiv nicht dafür, dass Du konstruktiv antworten kannst. Du setzt damit also auch herab, was Du ansonsten so äußerst.

    Stell Dir bitte vor dem Absenden die Frage, wem die Konfrontation nutzt und wenn sich niemand findet, lass sie bitte weg.

    Zeus schrieb:

    Üblicher Krieg

    Wenn der "übliche Krieg" in diesem Board Usus wird, dann ziehen sich auch hier die Leute zurück, die darauf keinen Bock haben. Darauf habe ich keinen Bock.



  • Xin schrieb:

    Zeus schrieb:

    Üblicher Krieg

    Wenn der "übliche Krieg" in diesem Board Usus wird, dann ziehen sich auch hier die Leute zurück, die darauf keinen Bock haben. Darauf habe ich keinen Bock.

    Ich würde mich freuen, wenn Moderatoren meine Sätze nicht verstümmeln würden.



  • 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



  • "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

    http://en.wikipedia.org/wiki/Closure_(computer_science)



  • 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:

    http://blog.springsource.org/2013/05/13/reactor-a-foundation-for-asynchronous-applications-on-the-jvm/

    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


Anmelden zum Antworten