W jaki sposób zamknięcia w Javie wpłyną na społeczność Java?


11

Jest to jedna z najczęściej omawianych funkcji planowanych w Javie: Zamknięcia. Wielu z nas tęskni za nimi. Niektórzy z nas (w tym ja) stali się trochę niecierpliwi i wybrali języki skryptowe, aby wypełnić pustkę.

Ale po zamknięciu wreszcie oprogramowania Java: jak wpłyną na społeczność Java? Czy zaawansowanie języków skryptowych ukierunkowanych na maszyny wirtualne spowolni indeksowanie, pozostanie takie samo lub przyspieszy? Czy ludzie będą gromadzić się w nowej składni zamykania, zmieniając w ten sposób podstawy kodu Java w bardziej funkcjonalne struktury? Czy przez cały czas będziemy widzieć tylko zamknięcia zamknięte w Javie? Jaki będzie wpływ na obsługę narzędzia / IDE? Co powiesz na wydajność? I w końcu, co to będzie oznaczać dalsze przyjmowanie Javy jako języka w porównaniu z innymi językami, które zyskują na popularności?

Aby podać przykład jednej z najnowszych proponowanych specyfikacji składni Java Closure:

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

// ...

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

stanie się ...

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

[źródło: http://tronicek.blogspot.com/2007/12/closures-closure-is-form-of-anonymous_28.html]


Przykład, który publikujesz pochodzi sprzed wielu lat - czy jesteś pewien, że reprezentuje on obecne propozycje?
Daniel Earwicker

Może nie być: nie

3
Ostatnio mniej więcej przestałem używać Java. Nadal nie mogę się doczekać zamknięcia.
Anto

@Daniel - to nie jest bieżąca propozycja, wydaje się, że jest tu bardziej aktualna (i bardzo inna) tutaj: baptiste-wicht.com/2010/05/…
Nicole

czy to jest jak wyrażenie C # lambda?
Louis Rhys,

Odpowiedzi:


4

Myślę, że wielu „zwykłym” programistom Java zajmie trochę czasu, aby zapoznać się z tą koncepcją, jeśli jeszcze jej nie znają, ale stopniowo zacznie ona normalnie korzystać z Java, z całą naszą korzyścią. Byłoby wspaniale, gdyby został przyjęty tak szybko, jak generyczne, gdy pojawiła się Java 5.

Wyobrażam sobie, że nie wpłynie to tak bardzo na języki skryptowe ukierunkowane na VM, ponieważ jest to tylko jedna zaleta korzystania z tych, które go mają.


3

Jest zwykły cykl, który przebiega z każdym nowym błyszczącym narzędziem:

  • Masowe podekscytowanie, z mnóstwem nadużywających go nowych użytkowników. Jest to normalne i zdrowe, ponieważ pomaga nam zrozumieć ograniczenia nowego narzędzia i sposób jego użycia.
  • Bardziej powściągliwi ludzie powiedzą i uznają pierwszych adoptowanych za głupców
  • W końcu emocje słabną, a pierwsi użytkownicy korzystają z nowych sposobów korzystania z nowego narzędzia
  • Bardziej powściągliwi ludzie zaczną zazdrościć produktywności ludzi korzystających z nowego narzędzia i zaczną je stosować - wykorzystując teraz zdrowe wzorce.

To wszystko trwa kilka lat. Było tak zarówno w przypadku adnotacji, jak i rodzajów, i dotyczy to również zamknięć.

Wpływ na ludzi skryptowych:

  • W przypadku języków, które obsługują zamknięcia, pomoże to pisarzom skryptów w bardziej wydajnym wykonywaniu ich zadań. Ponieważ wiedzą już, jak używać zamknięć, niekoniecznie robią szalone rzeczy.
  • W przypadku języków, które nie obsługują zamknięć, zostanie to w dużej mierze zignorowane.

1

Ci, którzy lubią programowanie wielowątkowe, będą mogli osadzać niezmienne struktury danych w Javie i obsługiwać je w bardziej podobny do seplenienie sposób, bez potrzeby uciekania się do niesekwencjonowania z powodu niedopasowania impedancji językowej między Javą a Lispem.

Ci, którzy nie używają (lub nie rozumieją) żadnego z powyższych, będą mogli robić rzeczy tak, jak wcześniej.


1
To nie ma sensu. Zamknięcia nie mają nic wspólnego z gwintowaniem lub zmiennością.
davidk01

Oni robią. Prawidłowe zamknięcia wymagają niezmienności do pracy bez eksplozji mózgu.
permeakra

Nie, nie robią tego. Zamknięcie to fragment kodu, który wie o środowisku, w którym został utworzony. To wszystko.
davidk01

1
@ davidk01 definicja jest OK, ale kiedy zamknięcie zawiera link do zmiennej, jej wynik zmienia się wraz ze zmienną. Zwykle nie tego się chce, ale jeśli kompilator nie wyrazi sprzeciwu, błąd jest prawie niewykrywalny.
permeakra

1
@ davidk01 Nie, nie wiem. Chodzi mi o to, że zamknięcia / lambda działają dobrze, jeśli są powiązane z niezmiennością złapanych zmiennych. W przeciwnym razie jesteś zdany na łaskę Tzeentcha i tylko oddani czciciele mają tu szanse.
permeakra

1

Podejrzewam, że ludzie znający zamknięcia zaczną ich używać w kodzie aplikacji. Przez pewien czas będą ich unikać w bibliotekach, aby zachować zgodność wsteczną ze starszymi wersjami Javy.

Programiści, którzy nie znają zamknięć z innych języków, będą powoli przyjmować je w Javie.

Generyczne zostały szybko przyjęte, gdy zostały częściowo wprowadzone w Javie, ze względu na wszystkie ostrzeżenia, które pojawiły się podczas aktualizacji i ze względu na ich włączenie do zestawu SDK. Nie będzie to prawdą w przypadku zamknięć. Trudniej będzie znaleźć dowody na ich istnienie, więc tylko ci, którzy chcą ich użyć, będą z nich korzystać.

Nie sądzę, że rozwój innych języków skryptowych JVM się zatrzyma. Te języki mają rozpęd i wiele funkcji oprócz zamknięć. Możemy jednak zobaczyć mniej nowych języków JVM, ponieważ zamknięcia były głównym impulsem do tworzenia nowych języków JVM.


Powinieneś rzucić okiem na mseifed.blogspot.se/2012/09/ ... Myślę, że to jest niesamowite!
mmm,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.