¿Cómo afectarán los cierres en Java a la Comunidad Java?

11

Es una de las características más comentadas planeadas para Java: cierres. Muchos de nosotros los hemos estado anhelando. Algunos de nosotros (incluido yo) nos hemos impacientado un poco y hemos recurrido a los lenguajes de secuencias de comandos para llenar el vacío.

Pero, una vez que los cierres hayan llegado finalmente a Java: ¿cómo afectarán a la Comunidad Java? ¿El avance de los lenguajes de script dirigidos a VM se ralentizará, se mantendrá igual o se acelerará? ¿La gente acudirá en masa a la nueva sintaxis de cierre, convirtiendo así las bases de código Java en implementaciones más estructuradas funcionalmente? ¿Solo veremos cierres salpicados en Java en todo momento? ¿Cuál será el efecto en el soporte de herramientas / IDE? ¿Qué tal el rendimiento? Y finalmente, ¿qué significará para la adopción continua de Java, como lenguaje, en comparación con otros lenguajes que están aumentando en popularidad?

Para proporcionar un ejemplo de una de las últimas especificaciones de sintaxis de Java Closure propuestas:

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

// ...

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

se convertiría ...

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

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

Ryan Delucchi
fuente
El ejemplo que publica es de hace muchos años: ¿está seguro de que es representativo de las propuestas actuales?
Daniel Earwicker
Puede que no sea así: siéntase libre de revisar mi ejemplo
3
Últimamente he dejado de usar Java más o menos. Sin embargo, todavía espero los cierres.
Anto
@Daniel: esta no es la propuesta actual, parece que hay una más actual (y muy diferente) aquí: baptiste-wicht.com/2010/05/…
Nicole
¿Es como la expresión C # lambda?
Louis Rhys

Respuestas:

4

Creo que a muchos desarrolladores de Java 'comunes' les tomará algún tiempo entender este concepto si aún no están familiarizados con él, pero gradualmente facilitará el uso regular de Java, para nuestro beneficio. Sería genial si se adoptara tan rápido como los genéricos cuando llegó Java 5.

Me imagino que no afectará tanto a los lenguajes de scripting dirigidos a VM, ya que es solo una ventaja de usar aquellos que lo tienen.

Alba
fuente
3

Hay un ciclo habitual que acompaña a cualquier herramienta nueva y brillante:

  • Emoción masiva, con una oleada de nuevos usuarios abusando de ella. Esto es normal y saludable, ya que nos ayuda a comprender las limitaciones de la nueva herramienta y cómo se puede usar.
  • Las personas más reservadas dirán y despreciarán a los primeros usuarios como tontos
  • Eventualmente, la emoción desaparece y los primeros usuarios adoptan formas saludables de usar la nueva herramienta.
  • Las personas más reservadas comenzarán a envidiar la productividad de las personas que usan la nueva herramienta y comenzarán a adoptarla, utilizando los patrones ahora saludables.

Todo esto lleva un par de años para completar el ciclo. Era cierto para las anotaciones y genéricos, y también será cierto para los cierres.

Impacto en la gente del lenguaje de script:

  • Para los idiomas que admiten cierres, esto ayudará a los escritores de lenguaje de secuencias de comandos a hacer su trabajo de manera más eficiente. Como ya saben cómo usar cierres, no necesariamente harán locuras.
  • Para los idiomas que no admiten cierres, esto se ignorará en gran medida.
Berin Loritsch
fuente
1

Aquellos que disfrutan de la programación de subprocesos múltiples podrán incorporar estructuras de datos inmutables en Java y manejarlas de una manera más parecida a la lisp sin la necesidad de recurrir a no secuestradores debido a la falta de coincidencia de impedancia del lenguaje entre Java y Lisp.

Aquellos que no usen (o comprendan) ninguno de los anteriores podrán hacer cosas como lo hicieron antes.

Edwin Buck
fuente
1
Esto no tiene sentido. Los cierres no tienen nada que ver con el enhebrado o la mutabilidad.
davidk01
Ellas hacen. Los cierres adecuados requieren inmutabilidad para trabajar sin explosiones cerebrales.
permeakra
No, no lo hacen. Un cierre es un código que conoce el entorno en el que se creó. Eso es todo.
davidk01
1
@ davidk01 la definición está bien, pero cuando el cierre tiene un enlace a una variable mutable, su resultado cambia con la variable modificada. Por lo general, esto no es lo que uno quiere, pero si el compilador no se opone, el error es casi indetectable.
permeakra
1
@ davidk01 No, no lo hago. Mi punto es que los cierres / lambdas funcionan bien si se vinculan con la inmutabilidad de las variables atrapadas. De lo contrario, estás a merced de Tzeentch, y solo los fieles dedicados tienen posibilidades aquí.
permeakra
1

Sospecho que las personas que están familiarizadas con los cierres comenzarán a usarlos en el código de la aplicación. Los evitarán en las bibliotecas por un tiempo para mantener la compatibilidad con versiones anteriores de Java.

Los programadores que no estén familiarizados con los cierres de otros lenguajes tardarán en adoptarlos en Java.

Los genéricos se adoptaron rápidamente cuando se introdujeron en Java parcialmente debido a todas las advertencias que aparecieron cuando actualizó y debido a su incorporación al SDK. Esto no será cierto con los cierres. Será más difícil encontrar evidencia de su existencia, por lo que solo aquellos que quieran usarlos los usarán.

No creo que se detenga el desarrollo de otros lenguajes de script JVM. Esos lenguajes tienen impulso y muchas características además de los cierres. Sin embargo, podemos ver menos nuevos lenguajes JVM ya que los cierres fueron el ímpetu principal para crear nuevos lenguajes JVM.

Adán
fuente
Deberías echar un vistazo a mseifed.blogspot.se/2012/09/… ¡Creo que es bastante increíble!
mmm