Rappelons qu’Erlang est un langage de programmation développé à l'origine au laboratoire informatique d'Ericsson. OTP (Open Telecom Platform) est une collection de middleware et de bibliothèques en Erlang. Erlang/OTP a été testé dans un certain nombre de produits Ericsson pour construire des applications distribuées robustes et tolérantes aux pannes, par exemple AXD301 (commutateur ATM). Le principal développeur et mainteneur est l'unité Erlang/OTP chez Ericsson.
Voici, ci-dessous, les nouveautés et améliorations apportées à Erlang :
stdlib
La nouvelle fonction filelib:ensure_path/1 permet de s'assurer que tous les répertoires du chemin donné existent.
- nouvelles fonctions uniq/1 uniq/2 dans le module lists ;
- nouvelles fonctions groups_from_list/2 et groups_from_list/3 dans le module maps ;
- nouveau PRNG ajouté au module rand, pour des nombres pseudo-aléatoires rapides.
Compilateur, noyau, stdlib, syntax_tools
Ajout du support pour les fonctionnalités sélectionnables. Les fonctionnalités peuvent être activées/désactivées pendant la compilation avec des options (ordinary et +term) à erlc ainsi qu'avec des directives dans le fichier. Des options similaires peuvent être utilisées pour erl afin d'activer/désactiver les fonctionnalités autorisées à l'exécution. La nouvelle expression maybe EEP-49 est entièrement supportée par la fonctionnalité maybe_expr.
erts et JIT
- le JIT fonctionne maintenant pour les processeurs ARM 64 bits ;
- le JIT fait maintenant des optimisations basées sur le type en fonction des informations de type dans les fichiers BEAM ;
- amélioration du support du JIT pour les outils externes comme perf et gdb, leur permettant d'afficher les numéros de ligne et même le code source Erlang original quand il peut être trouvé.
erts, stdlib, noyau
Les utilisateurs peuvent maintenant configurer les tables ETS avec l'option {write_concurrency, auto}. Cette option force les tables à changer automatiquement le nombre de verrous qui sont utilisés à l'exécution en fonction de la concurrence détectée. L'option {decentralized_counters, true} est activée par défaut lorsque {write_concurrency, auto} est active.
Pour permettre plus d'optimisations, les fichiers BEAM compilés avec OTP 21 et antérieurs ne peuvent pas être chargés dans OTP 25. La file d'attente des signaux d'un processus avec l'indicateur de processus message_queue_data=off_heap a été optimisée pour permettre la réception parallèle des signaux de plusieurs processus. Cela peut améliorer les performances lorsque de nombreux processus envoient des signaux en parallèle à un processus. Voir le benchmark. Le répertoire d'installation d'Erlang est maintenant relocalisable sur le système de fichiers étant donné que les chemins dans le fichier RELEASES de l'installation sont des chemins relatifs au répertoire racine de l'installation.
Une nouvelle option appelée short a été ajoutée aux fonctions erlang:float_to_list/2 et erlang:float_to_binary/2. Cette option crée la représentation de chaîne de caractères correctement arrondie la plus courte du nombre flottant donné qui peut être reconvertie en ce même nombre flottant. Introduction des fonctions quote/1 et unquote/1 dans le module uri_string - un remplacement des fonctions dépréciées http_uri:encode et http_uri:decode. Le nouveau module peer remplace le module slave. Le module slave est maintenant déprécié et sera supprimé dans l'OTP 27.
global empêchera désormais par défaut le chevauchement des partitions en raison de problèmes de réseau. Cela se fait en se déconnectant activement des nœuds qui signalent qu'ils ont perdu la connexion avec d'autres nœuds. Ainsi, des partitions entièrement connectées se formeront au lieu de laisser le réseau dans un état où les partitions se chevauchent. Il est possible de désactiver ce nouveau comportement en définissant le paramètre de configuration du noyau prevent_overlapping_partitions à false. Cela permet de conserver le même comportement que dans l'OTP 24 et les versions antérieures.
Le callback format_status/2 pour gen_server, gen_statem et gen_event a été supprimé au profit du nouveau callback format_status/1. Le nouveau callback ajoute la possibilité de limiter et de changer beaucoup plus de choses que le simple état. Le module timer a été modernisé et rendu plus efficace, ce qui rend le serveur timer moins susceptible d'être surchargé. La fonction timer:sleep/1 accepte maintenant un nombre entier arbitrairement grand.
cryptographie
Ajout de crypto:hash_equals/2 qui est une comparaison en temps constant des valeurs de hachage.
ssl
Introduction d'une nouvelle option (encore expérimentale) {certs_keys,[cert_key_conf()]}. Avec cette option, une liste de certificats avec leur clé associée peut être utilisée pour authentifier le client ou le serveur. La paire de clés de certificat qui est considérée comme la meilleure et qui correspond aux paramètres négociés pour la connexion sera sélectionnée.
Clé publique
Ajout de fonctions pour récupérer les certificats CA fournis par l'OS.
Dialyzer
Optimisation des opérations dans le module erl_types. Parallélisation de la passe Dialyzer à distance. Ajout des options missing_return et extra_return afin de générer des avertissements lorsque les spécifications diffèrent des types inférés. Ces options sont similaires, mais pas tout à fait aussi verbeuses que overspecs et underspecs.
Dialyzer comprend maintenant mieux les types de min/2, max/2 et erlang:raise/3. De ce fait, Dialyzer peut potentiellement générer de nouveaux avertissements. En particulier, les fonctions qui utilisent erlang:raise/3 pourraient maintenant avoir besoin d'une spécification avec un type de retour no_return() pour éviter un avertissement indésirable.
compilateur
La construction maybe ... end proposée dans EEP-49 a été implémentée. Elle peut simplifier du code complexe où autrement des cas profondément imbriqués devraient être utilisés. Pour activer maybe, l’utilisateur doit donner l'option {enable_feature,maybe_expr} au compilateur. « L'option exacte à utiliser sera modifiée dans une prochaine version candidate et il sera alors également possible de l'utiliser à l'intérieur du module en cours de compilation », déclare Henrik Nord.
Lorsqu'une correspondance d'enregistrement ou une mise à jour d'enregistrement échoue, une exception {badrecord, ExpectedRecordTag} était levée. Dans cette version, l'exception a été modifiée en {badrecord, ActualValue}, où ActualValue est la valeur qui a été trouvée au lieu de l'enregistrement attendu. Ajout d'un attribut de compilation -nifs() pour donner au compilateur et au chargeur des informations sur les fonctions qui peuvent être remplacées par des NIFs par erlang:load_nif/2.
Messages d'erreur améliorés et plus détaillés lorsque la construction binaire avec la syntaxe binaire échoue. Ceci s'applique à la fois aux messages d'erreur dans le shell et à erl_error:format_exception/3,4. Changement du format des options et des directives de fonctionnalités pour une meilleure cohérence. Les options de erlc et la directive -compile(..) ont maintenant le format {feature, feature-name, enable | disable}. La directive -feature(..) a maintenant le format -feature(feature-name, enable | disable).
Source : Erlang
Et vous ?
Que pensez-vous de ce langage ?
Quel est votre avis sur les améliorations apportées ?
Voir aussi :
Augmentation de la popularité de C#, selon l'indice Tiobe, qui lui a observé une croissance de près de 2% au cours des 12 derniers mois, tandis que C a perdu pratiquement autant en popularité
Quelle est la meilleure méthode pour apprendre la programmation ?
Zoho veut s'attaquer aux lacunes du marché du low-code avec Creator Platform : un interview avec Tejas Gadhia, Lead Developer Evangelist chez Zoho Corporation