Le langage de programmation Crystal 1.0 est disponible

La version 1.0 du langage de programmation Crystal a été publiée. Cette sortie est marquée comme la première version significative, concluant 8 ans de travail et symbolisant la stabilisation du langage et sa préparation pour une utilisation dans des projets professionnels. La branche 1.x assurera la compatibilité ascendante et garantit qu'il n'y aura pas de modifications dans le langage et la bibliothèque standard qui pourraient affecter la compilation et le fonctionnement du code existant.

Les versions 1.0.y ne comprendront que des corrections de bugs, tandis que les versions 1.x.0 proposeront de nouvelles fonctionnalités et des changements significatifs, tout en maintenant la compatibilité avec le code. De nouvelles idées et des changements potentiellement incompatibles seront développés dans une branche séparée, à partir de laquelle une version Crystal 2.0 sera finalement formée. Certaines fonctionnalités de Crystal 1.0 sont annoncées comme préliminaires et, bien qu'elles soient présentes dans la branche 1.0, elles ne bénéficient pas d'un support officiel. Parmi ces fonctionnalités, on trouve l'exécution mono-thread, la compatibilité avec la plateforme Windows, et le fonctionnement sur des systèmes avec des processeurs ARM.

Rappelons que les développeurs de Crystal s'efforcent de combiner la facilité de développement offerte par Ruby avec la haute performance des applications caractéristique du langage C. La syntaxe de Crystal est proche de celle de Ruby, mais n'est pas entièrement compatible, même si certains programmes Ruby s'exécutent sans réécriture. Le code du compilateur est écrit en Crystal et distribué sous la licence Apache 2.0.

Le langage utilise une vérification statique des types, réalisée sans nécessiter l'indication explicite des types de variables et des arguments de méthode dans le code. Les programmes écrits en Crystal sont compilés en fichiers exécutables, avec le calcul de macros et la génération de code au moment de la compilation. Dans les programmes Crystal, il est possible d'intégrer des bindings écrits en C. La parallélisation de l'exécution du code est réalisée par le mot-clé « spawn », qui permet de démarrer une tâche en arrière-plan en mode asynchrone, sans bloquer le fil principal, sous la forme de fils légers appelés fibres (Fiber).

La bibliothèque standard offre un large éventail de fonctions typiques, y compris des outils pour le traitement de CSV, YAML et JSON, ainsi que des composants pour créer des serveurs HTTP et prendre en charge WebSocket. Pendant le développement, il est pratique d'utiliser la commande « crystal play » qui génère une interface web (par défaut localhost:8080) pour l'exécution interactive de code en Crystal.

Principales modifications :

  • Les tuples autorisent l'accès indexé aux éléments de types différents, car le compilateur connaît le type de chaque élément. Par exemple : tuple = {1, «hello», ‘x’} v = tuple[0..1] # renverra {1, «hello»} typeof(v) # => Tuple(Int32, String)
  • Dans les littéraux de chaîne et de caractère, l'utilisation de réductions de substitution dans les séquences d'échappement Unicode, telles que «\uD834», est interdite. Pour coder des valeurs arbitraires, il convient d'utiliser la notation «\x».
  • Un grand nombre de définitions, de macros et de méthodes précédemment marquées comme obsolètes ont été supprimées de la bibliothèque standard. Cela inclut les méthodes Set, StaticArray#[], YAML.new, HTTP::Request, HTTP::WebSocket, Hash#delete_if, Process#kill, etc.
  • Dans les macros getter et property, il est désormais obligatoire de spécifier le type de retour.
  • La méthode d'arrondi par défaut a été modifiée en TIES_EVEN («arrondi bancaire», au nombre entier le plus proche et, pour les situations limites, au nombre pair le plus proche). Le paramètre RoundingMode a été ajouté à Number#round, permettant de choisir la méthode d'arrondi. Parmi les méthodes disponibles : TIES_EVEN, TIES_AWAY, TO_ZERO, TO_POSITIVE, TO_NEGATIVE.
  • Les collections prennent en charge Enumerable#flat_map et Iterator#flat_map avec des éléments de types mixtes.
  • Lors de la sérialisation des séquences Enum, une représentation sous forme de chaînes avec des underscores est désormais utilisée.
  • Les types définis dans le module XML sont passés de l'utilisation de struct à class.
  • Pour des raisons de sécurité, le décodage des noms de cookie ainsi que l'encodage et le décodage des valeurs de cookie ont été abandonnés (le réencodage est désormais laissé aux frameworks et applications). La méthode HTTP::Cookies.from_headers a été divisée en deux variantes pour serveurs et les clients.

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster