IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

L'équipe de développement de Nim annonce avoir reçu plus de 100 000 dollars en bitcoins
Pour soutenir son travail sur le langage de programmation

Le , par Stéphane le calme

15PARTAGES

15  0 
La version 1.6 de Nim, le langage doté d'un transcompilateur vers C, C++ est disponible,
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.

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de Fagus
Membre expert https://www.developpez.com
Le 12/11/2021 à 12:56
Citation Envoyé par JPLAROCHE  Voir le message
Bonjour,
Je veux bien entendre certaine chose, mais dire qu'il n'y a pas de support ni de documentation ce n'est pas vrai
[...]
Quant aux "GUI" les choix sont permis GTK UIP wxWidgets ... ouvert à plusieurs cela permet peut-être à certain de mieux faire la transition.
[...]
Tu aurais pu signaler la prise en charge de javascript.
[...]
[/URL]

Bonjour,
Merci pour cette longue réponse.
Je ne nie pas les qualités ou les possibilités du langage, mais je regarde plus sous l'angle du projet à réaliser.

* Si c'est pour utiliser un SDK GUI classique, à vrai dire, je peux déjà utiliser ceux que tu cites dans un autre langage dont je suis à peu près sûr que le binding est fiable car testé par des légions de développeurs et bien documenté, ou dans un langage natif du SDK, ou avec un IDE RAD plus pratique. À la limite, je m'étais dit que comme nim produit des binaires petits, il peut servir pour écrire de petits utilitaires via un SDK léger, mais je me suis laisser décourager. J'avais testé https://github.com/yglukhov/nimx (celui d'un des principaux développeurs), mais sur une installation fraîche chez moi, la démo issue d'un git pull ne compile pas avec un message d'erreur incompréhensible jamais vu sur la toile. Cela dit, pour lancer un gros projet qui ne dépend pas de librairies externes, ce sera sans doute plus agréable à écrire qu'en c++ (c'est ce que tu sembles faire).

* Pour javascript c'est sans doute la même idée : on doit pouvoir y arriver, mais ce sera sans doute plus facile au néophyte et avec moins d’accrocs en Typescript vu que c'est le principal surensemble de js en production.

* Pour faire quelque chose qui tourne sur android, les auteurs de nim utilisent https://github.com/yglukhov/rod en production je crois. Mais je n'ai pas trouvé d'autre documentation que le code source...

Citation Envoyé par Rep.Movs
la syntaxe fait vieillote (rappelant Pascal/clipper)

Ce n'est pas forcément un défaut, la syntaxe de pascal avait été conçue pour être lisible. (à la limite je trouve ça mieux qu'en c quand un programmeur décide d'utiliser une syntaxe "créative" que seul les initiés peuvent comprendre ; ou que le c++ où des décennies d'améliorations et de corrections ont permis une grande variété de syntaxe, de surcharges et de styles).
2  0 
Avatar de JPLAROCHE
Membre expérimenté https://www.developpez.com
Le 13/11/2021 à 4:16
Citation Envoyé par Fagus  Voir le message
Bonjour,
Merci pour cette longue réponse.
Je ne nie pas les qualités ou les possibilités du langage, mais je regarde plus sous l'angle du projet à réaliser.

* Si c'est pour utiliser un SDK GUI classique....... J'avais testé https://github.com/yglukhov/nimx ....
.

bonjour et merci d'avoir pris le temps de répondre.

Hélas beaucoup de petit projet ont été mis à disposition.... pour moi, c'était une façon de tester ce que certain ont déposés... et je trouve que peut-être ce n'est pas la bonne façon de valoriser NIM.

outre GTK il y a un projet qui fonctionne pas mal https://github.com/nim-lang/ui perso j'ai testé.... mais pour moi, c'était une approche à compléter. Je préfère, GTK avec glade j'ai fait un petit truc ou tu peux mettre le script généré par Glade dans ton source l'utiliser comme en c /c++ le build. (nim_outil) ainsi diminuer considérablement ta définition screen et avoir un designer.

Arrivant de gros system , j'ai refait en nim pure le zoned (tel que le fait l'OS400 y compris les dates decimal char[] ...) je me suis remis sur postgresql et me suis fait un wraper qui s'appuie sur pgsql étant dans la gestion d'entreprise (au passage, je voudrai dire que la gestion ce n'est pas uniquement faire des commandes.... mais que l'on y rencontre des problèmes intéressants et mettent en œuvre des solutions très élaboré)
et je me suis attaqué à refaire un TUI en pure nim actuellement je suis sur un designer qui permettra de générer du code ( en gros compiler 550ko) il génère des panels formulaire complet, combo, menu, tableau encours. Je m'appuie sur les 2 modules termKey (le hack clavier écran) et termCurs (voir ncurse ou pdcurs ) en utf8

Le tout combiné je pense rendre lisible comme on lit un journal et en même temps régler certain problème de fond.
L'idéal serait de remonter encore d'un niveau par exemple déclarer une table et générer automatiquement les entrées et sorties (j'ai fait cela en C/C++ et langage natif postgresql autre que psql) mais en pure nim
ce que j'ai fait en nim c'est l'analyseur de table avec la possibilité de générer du code pour faire des requêtes

bon ce n'est pas un RAD comme l'IDE de pascal ou U++ ou ec

ps: si tu testes GTK il fonctionne aussi bien avec gtk3/4 ce qui pour moi est un tour de force....

pour travailler avec GTK et la doc officielle de GTK et t'y retrouvé avec GINTRO(gtk nim) les fonctions sont respectées et plus cohérente c'est plus proche de GTK++
une astuce si tu travailles avec vscodium éditeur libre de visual-studio légal sous linux

Code bash : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/bin/bash 
  
fdBlanc='\033[47;1m' 
fcNoir='\033[30m' 
  
f_dsply(){ 
    echo -en '\033[0;0m' 
    echo  -e $1 
    echo -en '\033[0;0m' 
} 
  
f_read() { 
    echo -en '\033[0;0m' 
    echo -en $fdBlanc$fcNoir 
    read 
    echo -en '\033[0;0m' 
} 
f_clear() { 
reset > /dev/null 
    echo -en '\033[1;1H' 
    echo -en '\033]11;#000000\007' 
    echo -en '\033]10;#FFFFFF\007' 
} 
  
requete="?" 
  
  
  
  
  
while [ "$requete" == "?" ]; do 
  f_dsply 'veuilez donnez le critère de recherhe:' 
  f_read 
  requete=$REPLY 
  if [  -z $requete  ]; then 
    f_dsply 'erreur de saisie'; 
    read -s -n 1 
    f_clear 
    requete="?" 
  fi 
  
  
done 
requete=$REPLY 
grep -B2 --color=auto $requete ~/.nimble/pkgs/gintro-0.9.5/gintro/* 
  
exit 0
1  0 
Avatar de Rep.Movs
Membre actif https://www.developpez.com
Le 08/11/2021 à 10:29
C'est un beau travail, mais:
  • les performances annoncées sont celles du transpilateur
  • la syntaxe fait vieillote (rappelant Pascal/clipper)
  • n'a pas l'air de faire grand-chose que d'autres déjà existants ne fasse pas
  • Il y a de la généricité, mais pas de classe???


Bref, pas de quoi sauter au plafond.

Et je suis pour la multiplicité des langages, s'ils apportent quelque chose ou s'ils correspondent à un environnement. Des concurrents de SQL plus "logiques" et plus "modernes" serait bien, des concurrents à Pascal/C/Ada, on n'en n'a plus vraiment besoin, sauf s'ils permettent de manipuler des structures particulières de données ou s'ils simplifient la gestion mémoire/la gestion de concurrence de façon significative.

Là j'ai l'impression de voir les articles des années 90 sur des "nouveaux" langages qui finalement n'ont jamais percé.

Par ailleurs, générer par transpilation, sauf à avoir une véritable environnement de dev, est une complication énorme pour le débogage.

Des langages comme Eiffel apportaient des notions intéressantes qui font partie des librairies de dev permettant de vérifier "dynamiquement" si une fonction n'est pas bugguée.

Quand à la saisie mode python... ça paraît être une bonne idée, mais c'est tellement dépendant de l'EDI que c'en est parfois un enfer.

Bref, encore un langage créé par des gens qui ne voulaient pas apprendre un autre langage/un autre méthode, on créé un n-ième langage de zéro, ont appris et complété avec ce qui manquaient, et accouchent d'un langage tout aussi compliqué et avec autant d'avantages et de défaut que les autres.
0  1