Crystal est un langage de programmation orienté objet à usage général conçu et développé par Ary Borenszweig, Juan Wajnerman, Brian Cardiff et plus de 300 contributeurs. Inspirée de Ruby, la syntaxe de Crystal est un langage compilé avec une vérification de type statique, mais n'a généralement pas besoin de spécifier les types de variables ou les paramètres de méthode, et peut atteindre des performances proches de C/C++. Son type est résolu par un algorithme avancé d'inférence de type global.
La dernière version 1.4.0 publiée contient des corrections de bogues et des améliorations fonctionnelles liées à la syntaxe, à la bibliothèque standard, aux collections, au chiffrement, aux fichiers, aux macros de syntaxe, à la mise en réseau, à l'exécution et aux spécifications, etc. Pour plus de détails, consultez la note de version .
Changements notables
Prise en charge initiale de WebAssembly
La version 1.4.0 fournit une implémentation MVP ( Minimum Viable Product ) qui prend en charge WebAssembly. Actuellement, elle ne prend en charge que la compilation des programmes Crystal en WebAssembly et la connexion avec LibC basé sur WASI, et les navigateurs ne sont pas encore pris en charge. Consultez ce PR pour plus de détails techniques .
Meilleure inférence de type pour les variables d'instance et de classe
Avant cette version, un programme simple comme celui-ci ne pouvait pas déduire le type d'une variable d'instance :
class DisplayHello
DELAY = 10.milliseconds
@timer_countdown = DELAY
end
Compile bien dans la nouvelle version, déduit correctement @timer_countdown
le type de la variable comme .Time::Span
class DisplayHello
def initialize(delay : Time::Span)
@timer_countdown = delay + 10.seconds
end
end
Cliquez ici pour plus de détails techniques .
Autres changements importants
- Prend en charge LLVM 14 ( #11905 )
- Ciblé pour
Int128
fournir une prise en charge complète du compilateur ( #11576 ) - Fournir un support pour la notation scientifique dans ( # 10632 )
BigFloat#to_s
- L' indicateur non documenté n'est plus pris en charge
skip_abstract_def_check
( #9217 ) - ……
Cliquez ici pour obtenir des instructions détaillées sur la mise à jour .