Avoir une version 1.0.0 : qu'est-ce que cela signifie ?
« La sortie de la première version majeure de Crystal arrive après de nombreuses années de travail acharné. Grâce à des milliers de contributions de personnes du monde entier, il a été possible de trouver un consensus sur ce qui était vraiment important pour la version 1.0 et ce qui pouvait attendre les prochaines versions. Le voyage n'a pas été facile, il a été jalonné de conversations enrichissantes, controversées, délicieuses et interminables qui, finalement, ont permis de construire un langage plus utile pour un plus grand nombre d'utilisateurs », a déclaré l'équipe de développement de Crystal.
Pour rappel, Crystal est un langage de programmation orienté objet dont les objectifs sont les suivants : avoir une syntaxe similaire à celle de Ruby (mais la compatibilité avec ce dernier n'est pas un objectif) ; avoir une vérification statique des types, mais sans avoir à spécifier le type des variables ou des paramètres des méthodes ; permettre une évaluation et une génération du code à la compilation, afin d'éviter le code passe-partout ; et enfin, permettre la compilation en code natif efficace. Avec la sortie de la version 1.0.0, le processus de réception de contributions et d'évolution du langage ne s'arrête pas, mais quelques changements interviennent.
Désormais, la branche 1.x supportera la rétrocompatibilité et garantira l'absence de modifications du langage et de la bibliothèque standard, affectant négativement la construction et le travail du code existant. Les versions 1.0.y ne comprendront que des correctifs, tandis que les versions 1.x.0 offriront de nouvelles fonctionnalités et des changements importants, tout en maintenant la compatibilité du code. En outre, l'équipe a expliqué que les nouvelles idées et les changements potentiellement incompatibles seront développés dans une branche séparée qui constituera la base de la version Crystal 2.0.
Certaines des fonctionnalités de Crystal 1.0.0 sont provisoires et, bien qu'incluses dans la branche 1.0.0, elles ne sont pas officiellement prises en charge. Ces caractéristiques incluent le multithreading, la prise en charge de Windows et l'utilisation sur des systèmes avec des processeurs ARM. Dans sa version 1.0.0, le langage reste fidèle à ses objectifs initiaux. Crystal utilise la vérification statique des types qui est mise en œuvre sans qu'il soit nécessaire de spécifier explicitement les types des variables et des arguments de méthode dans le code.
Les programmes Crystal sont compilés en fichiers exécutables avec calcul de macros et génération de code. Les liaisons écrites en C peuvent être utilisées dans les programmes Crystal. La parallélisation de l'exécution du code est réalisée à l'aide du mot-clé "spawn", qui permet de démarrer une tâche d'arrière-plan de manière asynchrone sans bloquer le thread principal, sous la forme de threads légers appelés "fibres" (Fiber).
La bibliothèque standard fournit un vaste ensemble de fonctions standard, notamment des outils pour le traitement des fichiers CSV, YAML et JSON ; des composants pour la création de serveurs HTTP et la prise en charge de l'API WebSocket. Pendant le développement, il est pratique d'utiliser la commande "crystal play", qui forme une interface Web (localhost:8080 par défaut) pour l'exécution interactive de code en langage Crystal.
Principaux changements dans Crystal 1.0.0
- dans les tuples, l'accès indexé à des éléments de types différents est autorisé, car le compilateur dispose d'informations sur le type de chaque élément. Par exemple :
Code : | Sélectionner tout |
1 2 3 4 | tuple = {1, "hello", 'x'} v = tuple[0..1] # выдаст {1, "hello"} typeof(v) # => Tuple(Int32, String) |
- dans les chaînes de caractères et les littéraux de chaînes de caractères, l'utilisation d'abréviations 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" ;
- la bibliothèque standard a supprimé une grande partie des définitions, macros et méthodes précédemment qualifiées d'obsolètes. Y compris 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 un type de retour ;
- la méthode par défaut pour arrondir les chiffres a été changée en TIES_EVEN (il arrondit au nombre entier le plus proche, et au nombre pair le plus proche pour les situations limites). Le paramètre RoundingMode a été ajouté à Number#round pour vous permettre de sélectionner la méthode d'arrondi. Parmi les méthodes disponibles, citons TIES_EVEN, TIES_AWAY, TO_ZERO, TO_POSITIVE, TO_NEGATIVE ;
- Enumerable#flat_map et Iterator#flat_map avec des éléments de types mixtes sont fournis dans les collections ;
- la sérialisation des séquences Enum utilise désormais une représentation sous forme de chaîne avec des caractères de soulignement ;
- 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 cookies, l'encodage et le décodage des cookies ont été arrêtés (cette tâche a été confiée aux frameworks et aux applications). La méthode HTTP::Cookies.from_headers est divisée en deux options pour les serveurs et les clients.
Source : Crystal 1.0.0
Et vous ?
Que pensez-vous de la version 1.0.0 de Crystal ?
L'avez-vous déjà testée ? Quelle utilité trouvez-vous à ce langage ?
Voir aussi
Java et C enregistrent leur plus bas niveau en termes de popularité, d'après les dernières statistiques de l'index TIOBE
Le langage de programmation V sera disponible en open source à partir de juin 2019 et serait rapide, léger et capable de traduire vos projets C/C++
Quels sont les meilleurs langages de programmation à apprendre en 2020 ? Voici un classement de ces langages selon le cas d'utilisation
Perl est-il un langage de programmation mourant ? Le langage pourrait s'éteindre d'ici 2023 selon une étude
Ruby 3.0.0 est disponible, cette version majeure est annoncée comme étant trois fois plus rapide que Ruby 2 et introduit plusieurs nouvelles fonctionnalités dont les Ractors, RBS et TypeProf