Как замыкания в Java повлияют на сообщество Java?


11

Это одна из самых обсуждаемых функций, запланированных для Java: замыкания. Многие из нас жаждали их. Некоторые из нас (включая меня) стали немного нетерпеливы и обратились к языкам сценариев, чтобы заполнить пустоту.

Но как только в Java наконец появятся замыкания: как они повлияют на сообщество Java? Будет ли продвижение языков сценариев, предназначенных для ВМ, замедляться до ползания, оставаться неизменным или ускоряться? Будут ли люди переходить к новому синтаксису замыкания, превращая таким образом базовые коды Java в более функционально структурированные реализации? Мы увидим только замыкания в Java? Как это повлияет на поддержку инструмента / IDE? Как насчет производительности? И, наконец, что это будет означать для дальнейшего принятия Java как языка по сравнению с другими языками, популярность которых растет?

Чтобы предоставить пример одной из последних предлагаемых синтаксических спецификаций Java Closure:

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

// ...

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

станет ...

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

[источник: http://tronicek.blogspot.com/2007/12/closures-closure-is-form-of-anonymous_28.html]


Пример, который вы публикуете много лет назад - вы уверены, что он отражает текущие предложения?
Даниэль Уорвикер

Это может быть не так: не стесняйтесь пересмотреть мой пример

3
Я более или менее прекратил использовать Java в последнее время. Я все еще с нетерпением жду закрытия, хотя.
Anto

@Daniel - это не текущее предложение, здесь, кажется, есть более актуальное (и совсем другое) предложение: baptiste-wicht.com/2010/05/…
Николь,

это как C # лямбда-выражение?
Луи Рис

Ответы:


4

Я думаю, что многим «обычным» Java-разработчикам потребуется время, чтобы разобраться с этой концепцией, если они еще не знакомы с ней, но постепенно она упростит регулярное использование Java, что нам всем выгодно. Было бы замечательно, если бы оно охватывалось так же быстро, как и дженерики, когда появилась Java 5.

Я полагаю, что это не повлияет на языки сценариев, ориентированные на виртуальные машины, так как это лишь одно преимущество использования тех, у кого они есть.


3

Есть обычный цикл, который идет с любым новым блестящим инструментом:

  • Массовое волнение, с потоком новых пользователей, злоупотребляющих этим. Это нормально и полезно, так как помогает нам понять ограничения нового инструмента и то, как его можно использовать.
  • Более сдержанные люди будут ржать и подавлять ранних усыновителей как глупых
  • В конце концов, волнение проходит, и ранние последователи выбирают здоровые способы использования нового инструмента.
  • Более сдержанные люди начнут завидовать продуктивности людей, использующих новый инструмент, и начнут применять его - используя теперь здоровые модели.

Все это занимает пару лет, чтобы перебрать. Это было верно для аннотаций и обобщений, и это будет верно и для замыканий.

Влияние на язык сценариев:

  • Для языков, которые поддерживают замыкания, это поможет авторам сценариев более эффективно выполнять свою работу. Так как они уже знают, как использовать замыкания, они не обязательно будут делать сумасшедшие вещи.
  • Для языков, которые не поддерживают замыкания, это будет в значительной степени игнорироваться.

1

Те, кому нравится многопоточное программирование, смогут встраивать неизменяемые структуры данных в Java и обрабатывать их более похожим на шутку образом без необходимости прибегать к несеквестерам из-за несоответствия языкового импеданса между Java и Lisp.

Те, кто не использует (или не понимает) ничего из вышеперечисленного, смогут делать то же, что и раньше.


1
Это не имеет никакого смысла. Замыкания не имеют ничего общего с многопоточностью или изменчивостью.
davidk01

Они делают. Правильное закрытие требует неизменности для работы без взрывов мозга.
Permeakra

Нет, они не Закрытие - это фрагмент кода, который знает о среде, в которой он был создан. Вот и все.
davidk01

1
@ davidk01 определение в порядке, но когда замыкание имеет ссылку на изменяемую переменную, его результат изменяется вместе с измененной переменной. Обычно это не то, что нужно, но если компилятор не возражает, ошибка почти не обнаруживается.
Permeakra

1
@ davidk01 Нет, не знаю. Я хочу сказать, что замыкания / лямбды работают хорошо, если они связаны с неизменяемостью отслеживаемых переменных. В противном случае вы находитесь в милости Tzeentch, и только преданные поклонники имеют шансы здесь.
Permeakra

1

Я подозреваю, что люди, знакомые с замыканиями, начнут использовать их в коде приложения. Некоторое время они будут избегать их в библиотеках, чтобы поддерживать обратную совместимость со старыми версиями Java.

Программисты, которые не знакомы с замыканиями из других языков, будут медленнее внедрять их в Java.

Обобщения были приняты быстро, когда они были введены в Java частично из-за всех предупреждений, которые появлялись при обновлении, и из-за их включения в SDK. Это не будет верно с замыканиями. Будет сложнее найти доказательства их существования, поэтому использовать их будут только те, кто хочет их использовать.

Я не думаю, что разработка других языков сценариев JVM остановится. Эти языки имеют импульс и много функций, кроме замыканий. Однако мы можем видеть менее новые языки JVM, поскольку замыкания были основным стимулом для создания новых языков JVM.


Вы должны взглянуть на mseifed.blogspot.se/2012/09/… Я думаю, что это довольно здорово!
ммм
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.