Java 폐쇄는 Java 커뮤니티에 어떤 영향을 미칩니 까?


11

Java를 위해 계획된 기능 중 가장 많이 언급 된 기능 중 하나입니다 : Closures. 우리 중 많은 사람들이 그들을 갈망하고 있습니다. 우리를 포함하여 우리 중 일부 (I 포함)는 약간 참을성이 없어졌으며 빈 공간을 채우기 위해 스크립팅 언어를 사용했습니다.

그러나 폐쇄가 마침내 Java에 도달하면 Java 커뮤니티에 어떤 영향을 미치나요? VM 대상 스크립팅 언어의 발전으로 인해 크롤링 속도가 느려지거나 동일하게 유지되거나 가속화됩니까? 사람들이 새로운 클로저 구문으로 몰려 들어 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]


몇 년 전에 게시 한 예는 현재 제안을 대표하는 것이 확실합니까?
다니엘 Earwicker

아닐 수도 있습니다 : 나의 예를 자유롭게 수정하십시오

3
요즘 Java 사용이 다소 중단되었습니다. 그래도 클로저를 기대합니다.
Anto

@Daniel-이것은 현재 제안이 아니며, 여기에 더 현재의 (그리고 매우 다른) 것 같습니다 : baptiste-wicht.com/2010/05/…
Nicole

C # 람다 식과 같은가요?
루이스리스

답변:


4

많은 '일반적인'Java 개발자들이이 개념에 익숙하지 않다면 시간이 걸릴 것이라고 생각하지만 점차적으로 우리의 모든 이익을 위해 정기적 인 Java 사용법을 쉽게 사용할 수 있습니다. Java 5가 도착했을 때 제네릭만큼 빨리 받아 들여지면 좋을 것입니다.

VM 대상 스크립트 언어에 영향을 미치지 않는 것은 스크립트 대상 언어를 사용하는 것의 장점 중 하나 일뿐입니다.


3

반짝이는 새로운 도구와 함께하는 일반적인 사이클이 있습니다.

  • 새로운 사용자들이 쏟아져 나오는 엄청난 흥분. 이는 새 도구의 한계와 도구 사용 방법을 이해하는 데 도움이되므로 정상적이고 건강합니다.
  • 더 많은 유보 된 사람들이 얼리 어답터로 얼리 어답터를 무시하고 내려 놓을 것입니다
  • 결국 흥분은 사라지고 얼리 어답터는 새로운 도구를 사용하는 건강한 방법에 정착합니다
  • 더 많은 예약 된 사람들이 새로운 도구를 사용하여 사람들의 생산성을 부러워하고 이제 건강한 패턴을 사용하여 도구를 채택하기 시작할 것입니다.

이 과정은 몇 년이 걸립니다. 주석과 제네릭도 마찬가지였으며 클로저에도 마찬가지입니다.

스크립팅 언어 사용자에게 미치는 영향 :

  • 클로저를 지원하는 언어의 경우 스크립트 언어 작성자가보다 효율적으로 작업을 수행하는 데 도움이됩니다. 클로저 사용법을 이미 알고 있기 때문에 반드시 미친 짓을 할 필요는 없습니다.
  • 클로저를 지원하지 않는 언어의 경우 대부분 무시됩니다.

1

멀티 스레드 프로그래밍을 좋아하는 사람들은 Java와 Lisp 간의 언어 임피던스 불일치로 인해 비 수용자에 의지하지 않고도 불변의 데이터 구조를 Java에 임베드하고보다 lisp와 같은 방식으로 처리 할 수 ​​있습니다.

위의 어떤 것도 사용하지 않거나 이해하지 못하는 사람들은 이전과 똑같은 일을 할 수 있습니다.


1
이것은 말이되지 않습니다. 클로저는 스레딩 또는 변경과 관련이 없습니다.
davidk01

그들이하다. 적절한 폐쇄는 뇌 폭발없이 작업하기 위해 불변성이 필요합니다.
permeakra

아닙니다. 클로저는 생성 된 환경에 대해 알고있는 코드입니다. 그게 전부입니다.
davidk01

1
@ davidk01 정의는 정상이지만 클로저가 가변 변수에 연결되면 변수가 변경되면서 결과가 변경됩니다. 일반적으로 이것은 원하는 것이 아니지만 컴파일러가 반대하지 않으면 오류를 거의 감지 할 수 없습니다.
permeakra

1
아니요, 안 그렇습니다. 내 요점은 클로저 / 람다는 잡힌 변수의 불변성과 관련이 있으면 잘 작동한다는 것입니다. 그렇지 않으면 당신은 Tzeentch를 자비로 여기며 헌신적 인 숭배자 만이 기회를 갖게됩니다.
permeakra

1

클로저에 익숙한 사람들은 응용 프로그램 코드에서 클로저를 사용하기 시작할 것입니다. 이전 버전의 Java와의 호환성을 유지하기 위해 라이브러리에서 잠시 피해야합니다.

다른 언어와의 클로저에 익숙하지 않은 프로그래머는 자바에서 느리게 채택 할 수 있습니다.

업그레이드 할 때 표시되는 모든 경고와 SDK에 통합되어 Java에 부분적으로 도입 된 제네릭은 빠르게 채택되었습니다. 클로저에는 적용되지 않습니다. 그들의 존재에 대한 증거를 찾기가 더 어려울 것이므로 그것을 사용하려는 사람들만이 그것을 사용할 것입니다.

다른 JVM 스크립팅 언어의 개발이 중단 될 것이라고 생각하지 않습니다. 이러한 언어에는 폐쇄와 더불어 추진력과 많은 기능이 있습니다. 그러나 클로저가 새로운 JVM 언어를 생성하는 주요 원동력이기 때문에 새로운 JVM 언어가 덜 보일 수 있습니다.


당신은 mseifed.blogspot.se/2012/09/보아야합니다 … 나는 그것이 굉장하다고 생각합니다!
mmm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.