Je vois que tu as pensé à créer des types pour les litéraux. C'est une bonne idée.
C'est nécessaire vu que le langage target est statiquement typé. En fait, même si je target le Python ou l'Assembleur, à un moment j'ai besoin de savoir que "hello world" est une string. Tout les types composites sont construit à partir de littéraux, peu importe le langage.
Concrètement, cela veut dire que le type est une donnée comme une autre.
En Letlang ce n'est pas le cas. Je n'ai pas de type type par exemple. Ce qui veut dire que tu ne peux pas passer un type en argument d'un fonction :
func foo(t: type) -> type {
# n'existe pas en letlang
}
Le seul moyen de "passer un type en argument" c'est en utilisant des fonctions génériques :
func foo<T>(v: T) -> T {
# ...
}
Mais on ne peut toujours pas manipuler T comme on manipulerait un entier ou un booléen.
tendre le concept de "constante propagation" lors de la phase d'optimisation en incluant les types structurées
Je suis encore loin d'implémenter des optimisations, mais oui c'est dans mon radar.
[^] # Re: type
Posté par David Delassus (site web personnel) . En réponse au journal [Letlang] Écrire un compilateur en Rust (partie 3). Évalué à 3.
C'est nécessaire vu que le langage target est statiquement typé. En fait, même si je target le Python ou l'Assembleur, à un moment j'ai besoin de savoir que
"hello world"est unestring. Tout les types composites sont construit à partir de littéraux, peu importe le langage.En Letlang ce n'est pas le cas. Je n'ai pas de type
typepar exemple. Ce qui veut dire que tu ne peux pas passer un type en argument d'un fonction :Le seul moyen de "passer un type en argument" c'est en utilisant des fonctions génériques :
Mais on ne peut toujours pas manipuler
Tcomme on manipulerait un entier ou un booléen.Je suis encore loin d'implémenter des optimisations, mais oui c'est dans mon radar.
https://link-society.com - https://kubirds.com - https://github.com/link-society/flowg