Sortie du langage de programmation Crystal 1.5

La version du langage de programmation Crystal 1.5 a été publiée, dont les développeurs tentent de combiner la commodité du développement en langage Ruby avec les performances applicatives élevées caractéristiques du langage C. La syntaxe de Crystal est proche de Ruby, mais pas entièrement compatible, bien que certains programmes Ruby s'exécutent sans modification. Le code du compilateur est écrit en Crystal et distribué sous la licence Apache 2.0.

Le langage utilise une vérification de type statique, implémentée sans qu'il soit nécessaire de spécifier explicitement les types de variables et les arguments de méthode dans le code. Les programmes Crystal sont compilés dans des fichiers exécutables, avec des macros évaluées et du code généré au moment de la compilation. Dans les programmes Crystal, il est possible de connecter des liaisons écrites en C. La parallélisation de l'exécution du code s'effectue à l'aide du mot-clé « spawn », qui permet d'exécuter une tâche en arrière-plan de manière asynchrone, sans bloquer le thread principal, sous forme de threads légers appelés fibres.

La bibliothèque standard fournit un large éventail de fonctions communes, notamment des outils de traitement CSV, YAML et JSON, des composants pour créer des serveurs HTTP et la prise en charge de WebSocket. Pendant le processus de développement, il est pratique d'utiliser la commande « crystal play », qui génère une interface Web (localhost : 8080 par défaut) pour l'exécution interactive du code dans le langage Crystal.

Les principaux changements:

  • Le compilateur a ajouté une vérification de la correspondance des noms d'arguments dans l'implémentation d'une méthode abstraite et dans sa définition. S'il y a une incompatibilité de nom, un avertissement est maintenant émis : abstract class FooAbstract abstract def foo(number : Int32) : Nil end class Foo < FooAbstract def foo(name : Int32) : Nil p name end end 6 | def foo(name : Int32) : Nil ^— Attention : le paramètre positionnel 'name' correspond au paramètre 'number' de la méthode remplacée FooAbstract#foo(number : Int32), qui a un nom différent et peut affecter le passage d'argument nommé
  • Lors de l'affectation d'un argument à une méthode non typée à la valeur d'une variable, l'argument est désormais limité au type de cette variable. class Foo @x : Int64 def initialize(x) @x = x # le paramètre x sera tapé @x end end
  • Permet d'ajouter des annotations aux paramètres de méthodes ou de macros. def foo (@[Peut-êtreUnused] x); fin # OK
  • Ajout de la prise en charge de l'utilisation de constantes comme indices et noms dans les tuples. KEY = "s" foo = {s : "String", n : 0} met foo[KEY].size
  • De nouvelles méthodes File#delete? ont été ajoutées à l'API File pour supprimer des fichiers et des répertoires. et Dir#delete?, qui renvoient false si le fichier ou le répertoire est manquant.
  • La protection de la méthode File.tempfile a été renforcée, qui n'autorise désormais plus les caractères nuls dans les lignes qui forment le nom du fichier.
  • Ajout de la variable d'environnement NO_COLOR, qui désactive la mise en évidence des couleurs dans la sortie du compilateur et de l'interpréteur.
  • Le travail en mode interprète a été considérablement amélioré.

Source: opennet.ru

Ajouter un commentaire