71 votes

Le but de "let expression" (LetExpr) dans le compilateur de Java?

Le compilateur Java semble avoir du support pour let expressions en com.sun.tools.javac.tree.* ( LetExpr).

Un commentaire JCTree mentionne même certains de la syntaxe

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

ce qui bien sûr n'est pas acceptée par la grammaire de la langue et rejeté dans un précédent compilateur phase.

Je m'interroge sur l'origine de cette construction, dont je n'ai jamais vu avant.

Il est utilisé en interne par javac ou est-il synthétisé par d'autres outils? C'est peut-être juste un artefact dès les premiers jours de Java à partir d'un langage qui n'a jamais vu la lumière?

Est-il quelque chose d'utile qui peut être fait avec elle aujourd'hui?

Généralement parlant, pourquoi existe-t-elle?

46voto

Armin Ronacher Points 16894

Généralement parlant, pourquoi existe-t-elle?

Il existe pour l'autoboxing que Google suggère.

Si vous avez un code comme ceci:

Integer foo = 0;
foo++;

Java interne rend cette dans cette aide de l'expression:

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

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

Cette expression n'a évidemment aucune syntaxe de représentation, c'est juste un AST transformation au niveau de simplifier la compilation.

4voto

Ceci est appelé la forme et est utilisé pour "abréger".

D'autre part, dans les langages procéduraux, cela s'appelle "la déclaration d'une variable" parce que la variable "valeur" de la cellule peut muter en procédure de langues. (Dans les langages fonctionnels, c'est juste une abréviation et ne diffère pas de l'écrire à la première place)

Je ne peux penser à beaucoup de langues que de l'utiliser dans le code source, l'utilisateur de la langue d'écriture (Haskell, ML, Régime, SBCL, à l'Arc, ...), si vous ne savez pas comment vous ne voyez pas encore...

Ou avez-vous dire juste en Java?

let x = 2 in (x + 5)

Est une abréviation pour:

(\x (x + 5)) 2

qui sera finalement réduite à

(2 + 5)

\ est censé être lambda.

Quant à savoir pourquoi il est en Java, pas sûr. Ce qu'il est censé faire est de déclarer les variables, afin de vérifier qu'il est là.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X