Nice programing

Java 컴파일러에서 "let 표현식"(LetExpr)의 목적은 무엇입니까?

nicepro 2020. 11. 2. 19:36
반응형

Java 컴파일러에서 "let 표현식"(LetExpr)의 목적은 무엇입니까?


Java 컴파일러는 (찾아보기 ) let에서 표현식을 지원하는 것 같습니다 .com.sun.tools.javac.tree.*LetExpr

JCTree의 한 주석은 일부 구문을 언급합니다.

(let int x = 3; in x+2)

물론 이것은 언어의 문법에 의해 받아 들여지지 않고 이전 컴파일러 단계에서 거부되었습니다.

나는 전에 본 적이없는이 구조의 기원에 대해 궁금합니다.

내부적으로 사용 javac됩니까, 아니면 다른 도구에 의해 합성됩니까? 빛을 보지 못했던 언어 기능에서 자바 초창기의 인공물일까요?

오늘 할 수있는 유용한 것이 있습니까?

일반적으로 왜 존재합니까?


일반적으로 왜 존재합니까?

Google이 제안한대로 오토 박싱을 위해 존재합니다.

다음과 같은 코드가있는 경우 :

Integer foo = 0;
foo++;

Java는 내부적으로 이것을 다음 도우미 표현식으로 만듭니다.

Integer foo = 0;
let int foo_helper = foo.intValue() in foo_helper++;

출처 : http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6614974

이 표현식에는 분명히 구문 표현이 없으며 컴파일을 단순화하기위한 AST 수준 변환 일뿐입니다.


이를 let 양식이라고하며 "약어"에 사용됩니다.

반면에 절차 언어에서는 변수의 "값"셀이 절차 언어에서 변경 될 수 있으므로이를 "변수 선언"이라고합니다. (기능적 언어에서는 약어 일 뿐이며 처음부터 작성하는 것과 다르지 않습니다.)

사용자가 작성하는 소스 코드 (Haskell, ML, Scheme, SBCL, Arc, ...)에서 사용하는 많은 언어를 생각할 수 있으므로 아직 어떻게 보지 못했는지 모르겠습니다.

아니면 Java로만 의미 했습니까?

let x = 2 in (x + 5)

약어 :

(\x (x + 5)) 2

결국 감소됩니다

(2 + 5)

\람다가 어디에 있어야합니다.

Java에있는 이유는 확실하지 않습니다. 해야 할 일은 변수를 선언하는 것이므로 거기에서 사용되는지 확인하십시오.

참고 URL : https://stackoverflow.com/questions/8372414/purpose-of-let-expression-letexpr-in-the-java-compiler

반응형