
avec une reconstruction du compilateur en 12s alors que Rust fait 15min, gcc : 30min+ et Go : 90s
Nim est un langage de programmation « moderne » aussi performant que le C (souvent indiqué comme une référence à ce niveau) : de manière générale, il souhaite donner un maximum de puissance à l’utilisateur sans sacrifier la performance (comme Rust ou Julia). En ce qui concerne ses caractéristiques, son système de typage est statique et son style impératif, bien que le langage soit multiparadigme : il mélange métaprogrammation, fonctionnel, passage de messages, procédural et orienté objet, avec un ramasse-miettes. Il ne dispose pas d’un compilateur, mais d’un transcompilateur qui produit du code C, C++ ou Objective-C en sortie… ou encore en JavaScript, ce qui facilite l’intégration avec l’environnement extérieur. L’équipe de développement de Nim a annoncé le 19 octobre la version 1.6.0 du langage de programmation.
Nim a fait sa première entrée dans l'index TIOBE en 2017 à la position 129, l'année dernière, il est entré dans le top-100, et il a réussi à se hisser dans le top-50 pendant 2 mois. « Nous espérons que la version 1.6 renforcera cette tendance, en s'appuyant sur les principaux atouts de Nim : un langage de programmation système pratique et compilé offrant des performances et une syntaxe de type Python, une flexibilité de type Lisp, et une métaprogrammation de premier ordre », a déclaré l’équipe de développement de Nim.
Voici, ci-dessous, les améliorations apportées par Nim 1.6 :
- nouvelles fonctionnalités du langage (iterable[T], définis par l'utilisateur, importations privées, effets stricts, opérateurs de type point, arguments de bloc avec paramètres optionnels) ;
- nouvelles fonctionnalités du compilateur (nim --eval:cmd, extensions nimscript personnalisées, messages du compilateur personnalisables) ;
- améliorations majeures de --gc:arc et --gc:orc ;
- correction et performance de l'analyse et du rendu des entiers et des flottants dans tous les backends ;
- améliorations significatives des messages d'erreur, montrant un contexte utile
- la logique de génération de documentation et la documentation, en particulier runnableExamples, fonctionnent maintenant dans plus de contextes ;
- les backends JS, VM et nimscript sont plus cohérents avec le backend C, permettant à plus de modules de fonctionner avec ces backends, y compris les imports de std/prelude ;
- la suite de tests est maintenant standardisée pour tester les modules stdlib sur chaque backend majeur (C, JS, VM) ;
- support pour Apple silicon/M1, 32-bit RISC-V, armv8l, CROSSOS, support amélioré pour le backend NodeJS ;
- améliorations majeures aux modules system, math, random, json, jsonutils, os, typetraits, wrapnils, lists, hashes incluant des améliorations de performance
- dépréciation d'un certain nombre de fonctionnalités sujettes aux erreurs ou redondantes.
Pourquoi utiliser Nim alors que des langages comme Python, Rust, Julia et bien d’autres existent ?
Nim
Un seul langage pour tous : du script shell au frontend et backend web, au calcul scientifique, au deep learning, au client blockchain, au gamedev, à l'embarqué. Nim est un langage de programmation pratique et compilé offrant des performances et une portabilité semblables à celles du C++, une syntaxe semblable à celle du Python, une flexibilité semblable à celle du Lisp, une forte interopérabilité avec le C, le C++, le JS et le Python, et une métaprogrammation de premier ordre.
Le bout de code echo "hello world" génère un binaire de 73K (ou 5K avec des options supplémentaires, optimisé pour les dispositifs embarqués (Go : 2MB, Rust : 377K, C++ : 56K). Avec un temps de compilation rapide : une reconstruction complète du compilateur prend ~12s (Rust : 15min, gcc : 30min+, clang : 1hr+, Go : 90s). Pas besoin de makefiles, cmake, configure ou d'autres scripts de compilation, grâce à l'évaluation des fonctions au moment de la compilation (CTFE) et au suivi des dépendances.
L’utilisateur peut cibler n'importe quelle plateforme avec un compilateur C : Android et iOS, systèmes embarqués, microcontrôleurs, WASM, Nintendo Switch, Game Boy Advance. L'interopérabilité sans frais généraux permet de réutiliser du code en C, C++ (y compris les templates, C++ STL), JS, Objective-C, Python (via nimpy).
Enfin, les macros permettent de manipuler/générer du code au moment de la compilation au lieu de compter sur les générateurs de code, ce qui permet d'écrire des DSL et des extensions de langage dans le code utilisateur. Parmi les exemples typiques, citons l'implémentation de chaînes f de type Python, le chaînage optionnel, les générateurs de lignes de commande, les applications monopages de type React, la sérialisation protobuf et les générateurs de liaisons.
Python
Python est un langage de programmation interprété, multi-paradigme et multi-plateformes. Il favorise la programmation impérative structurée, fonctionnelle et orientée objet. Il est doté d'un typage dynamique fort, d'une gestion automatique de la mémoire par récupérateur de mémoire et d'un système de gestion d'exceptions ; il ressemble ainsi à Perl, Ruby, Scheme, Smalltalk et Tcl. Python a réussi à se hisser à la première place dans le classement TIOBE, une première en plus de 20 ans. Paul Jansen, PDG de TIOBE Software, en a profité pour féliciter le père de Python :
« Pour la première fois depuis plus de 20 ans, nous avons un nouveau chef de file : le langage de programmation Python. L'hégémonie de longue date de Java et C est terminée. Python, qui a commencé comme un simple langage de script, comme alternative à Perl, est devenu mature. Sa facilité d'apprentissage, son énorme quantité de bibliothèques et son utilisation répandue dans toutes sortes de domaines en ont fait le langage de programmation le plus populaire d'aujourd'hui. Félicitations Guido van Rossum ! Proficiat ! »
Rust
Rust est un langage de programmation open source qui permet de créer des logiciels fiables et efficaces. Développé par Mozilla Research, la première version du langage est parue en 2010 et il jouit aujourd'hui d'une grande popularité dans toute l'industrie. Pour beaucoup, Rust remplacera à la longue le langage C dans la programmation système. Selon ses partisans, il devrait permettre d'éliminer les bogues de mémoire présents dans le code écrit en C et C++. Poussé par une grande communauté, Rust est entré en 2020 dans le top 20 de l'indice de popularité Tiobe pour la première fois.
Go et Julia
Go (Golang) est un langage de programmation open source permettant de construire des logiciels simples, rapides et fiables. Classé actuellement parmi les 20 langages les plus populaires de l’index TIOBE, ce langage connaît une forte adoption dans la communauté des développeurs. Et pour cause, ses auteurs lui concèdent une facilité d’apprentissage. En 2018, un sondage a révélé que le nombre de développeurs qui utilisent Go dans le cadre de leurs activités quotidiennes a atteint 50 % (contre 44 % en 2016).
TypeScript
TypeScript est un langage de programmation libre et open source et un surensemble de JavaScript développé par Microsoft. Il a pour but d'améliorer et de sécuriser la production...
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.