Wie wirken sich Schließungen in Java auf die Java-Community aus?


11

Es ist eine der am meisten diskutierten Funktionen, die für Java geplant sind: Closures. Viele von uns haben sich nach ihnen gesehnt. Einige von uns (einschließlich ich) sind etwas ungeduldig geworden und haben sich Skriptsprachen zugewandt, um die Lücke zu füllen.

Aber sobald die Schließungen in Java angekommen sind: Wie werden sie sich auf die Java-Community auswirken? Wird die Weiterentwicklung von VM-zielgerichteten Skriptsprachen langsamer werden, gleich bleiben oder sich beschleunigen? Werden die Leute auf die neue Closure-Syntax umsteigen und so Java-Codebasen rundum in funktional strukturierte Implementierungen verwandeln? Werden wir nur Schließungen sehen, die überall in Java verteilt sind? Welche Auswirkungen hat dies auf die Tool- / IDE-Unterstützung? Wie wäre es mit Leistung? Und schließlich, was bedeutet es für Javas fortgesetzte Akzeptanz als Sprache im Vergleich zu anderen Sprachen, die immer beliebter werden?

So geben Sie ein Beispiel für eine der neuesten vorgeschlagenen Java Closure-Syntaxspezifikationen:

public interface StringOperation {
   String invoke(String s);
}

// ...

(new StringOperation() {
   public invoke(String s) {
       new StringBuilder(s).reverse().toString();    
   }
}).invoke("abcd");    

würde werden ...

String reversed = { 
    String s => 
    new StringBuilder(s).reverse().toString()
  }.invoke("abcd");

[Quelle: http://tronicek.blogspot.com/2007/12/closures-closure-is-form-of-anonymous_28.html]


Das Beispiel, das Sie veröffentlichen, stammt aus vielen Jahren - sind Sie sicher, dass es für aktuelle Vorschläge repräsentativ ist?
Daniel Earwicker

Es könnte nicht sein: zögern Sie nicht, mein Beispiel zu überarbeiten

3
Ich habe in letzter Zeit mehr oder weniger aufgehört, Java zu verwenden. Ich freue mich trotzdem auf Schließungen.
Anto

@ Daniel - dies ist nicht der aktuelle Vorschlag, es scheint einen aktuelleren (und sehr unterschiedlichen) hier zu geben: baptiste-wicht.com/2010/05/…
Nicole

ist es wie C # Lambda-Ausdruck?
Louis Rhys

Antworten:


4

Ich denke, es wird einige Zeit dauern, bis sich viele "normale" Java-Entwickler mit diesem Konzept vertraut gemacht haben, wenn sie noch nicht damit vertraut sind, aber nach und nach wird es zu unserem Vorteil zu einer regelmäßigen Verwendung von Java. Es wäre großartig, wenn es so schnell angenommen würde wie Generika, als Java 5 eintraf.

Ich kann mir vorstellen, dass dies keine Auswirkungen auf VM-gezielte Skriptsprachen hat, da dies nur ein Vorteil der Verwendung derjenigen ist, die über diese verfügen.


3

Es gibt einen üblichen Zyklus, der zu jedem glänzenden neuen Werkzeug passt:

  • Massenerregung, mit einer Flut neuer Benutzer, die es missbrauchen. Dies ist normal und gesund, da es uns hilft, die Einschränkungen des neuen Tools und seine Verwendung zu verstehen.
  • Zurückhaltendere Leute werden wiehern und die Early Adopters als dumm bezeichnen
  • Schließlich lässt die Aufregung nach und die Early Adopters entscheiden sich für eine gesunde Nutzung des neuen Tools
  • Zurückhaltendere Menschen werden anfangen, die Produktivität der Menschen, die das neue Tool verwenden, zu beneiden und es zu übernehmen - unter Verwendung der jetzt gesunden Muster.

Das alles dauert ein paar Jahre. Dies galt für Anmerkungen und Generika, und dies gilt auch für Schließungen.

Auswirkungen auf die Leute in der Skriptsprache:

  • Bei Sprachen, die Schließungen unterstützen, können die Skriptsprachenschreiber ihre Arbeit effizienter erledigen. Da sie bereits wissen, wie man Verschlüsse benutzt, werden sie nicht unbedingt verrückte Dinge tun.
  • Bei Sprachen, die keine Schließungen unterstützen, wird dies weitgehend ignoriert.

1

Diejenigen, die Multithread-Programmierung mögen, können unveränderliche Datenstrukturen in Java einbetten und sie lisp-ähnlicher behandeln, ohne auf Nicht-Sequiter zurückgreifen zu müssen, da die Sprachimpedanz zwischen Java und Lisp nicht übereinstimmt.

Diejenigen, die keine der oben genannten Methoden verwenden (oder verstehen), können die Dinge genauso tun wie zuvor.


1
Das macht keinen Sinn. Verschlüsse haben nichts mit Threading oder Veränderlichkeit zu tun.
Davidk01

Tun sie. Richtige Verschlüsse erfordern Unveränderlichkeit, um ohne Gehirnexplosionen arbeiten zu können.
Permeakra

Nein, das tun sie nicht. Ein Abschluss ist ein Code, der über die Umgebung Bescheid weiß, in der er erstellt wurde. Das war's.
Davidk01

1
@ davidk01 Die Definition ist in Ordnung, aber wenn der Abschluss eine Verknüpfung zu einer veränderlichen Variablen hat, ändert sich das Ergebnis mit der geänderten Variablen. Normalerweise ist dies nicht das, was man will, aber wenn der Compiler keine Einwände erhebt, ist der Fehler fast nicht erkennbar.
Permeakra

1
@ davidk01 Nein, ich nicht. Mein Punkt ist, dass Verschlüsse / Lambdas gut funktionieren, wenn sie mit der Unveränderlichkeit gefangener Variablen verbunden sind. Ansonsten sind Sie Tzeentch ausgeliefert, und nur engagierte Anbeter haben hier Chancen.
Permeakra

1

Ich vermute, dass Personen, die mit Schließungen vertraut sind, diese im Anwendungscode verwenden werden. Sie werden sie für eine Weile in Bibliotheken meiden, um die Abwärtskompatibilität mit älteren Java-Versionen aufrechtzuerhalten.

Programmierer, die mit Schließungen aus anderen Sprachen nicht vertraut sind, werden sie nur langsam in Java übernehmen.

Generika wurden schnell eingeführt, als sie in Java eingeführt wurden, teilweise aufgrund all der Warnungen, die beim Upgrade angezeigt wurden, und aufgrund ihrer Integration in das SDK. Dies gilt nicht für Verschlüsse. Es wird schwieriger sein, Beweise für ihre Existenz zu finden, daher werden sie nur von denen verwendet, die sie verwenden möchten.

Ich denke nicht, dass die Entwicklung anderer JVM-Skriptsprachen aufhören wird. Diese Sprachen haben neben Schließungen auch Schwung und viele Funktionen. Möglicherweise sehen wir jedoch weniger neue JVM-Sprachen, da Schließungen der Hauptimpuls für die Erstellung neuer JVM-Sprachen waren.


Sie sollten einen Blick auf mseifed.blogspot.se/2012/09/… werfen. Ich finde es ziemlich großartig!
Momomo
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.