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

10PARTAGES

15  0 
Nim (anciennement nommé Nimrod) est un langage de programmation impératif, multi-paradigme et compilé imaginé et développé par Andreas Rumpf. 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 collecteur de mémoire. 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 a annoncé avoir reçu plus de 100 000 dollars en bitcoins :

« Plus tôt cette année, nous avons eu le privilège de recevoir 1,868 BTC (~ 117 000 USD au moment de la rédaction) à notre adresse de portefeuille Bitcoin de longue date. Nous voulions profiter de cette occasion pour remercier pour ce don et bien d'autres à travers nos nombreux efforts de collecte de fonds. Mais pour décrire également les mesures que nous avons prises pour sécuriser nos fonds et annoncer que l'ancienne adresse de portefeuille Bitcoin est désormais obsolète.


« Le portefeuille Bitcoin que nous utilisons a été créé en 2011. Nous avons reçu quelques petits dons ici et là, avec le recul, nous aurions dû sécuriser ces fonds beaucoup plus tôt[1], mais le don récent relativement important a stimulé nous en action. Essentiellement, nous avons transféré les fonds vers des portefeuilles matériels appartenant à l'équipe de développement principale. De cette façon, nous avons considérablement réduit le risque de vol des fonds.

« Cela signifie que nous avons une nouvelle adresse de don Bitcoin :
  • bc1qzgw3vsppsa9gu53qyecyu063jfajmjpye3r2h4


« C'est là que la majorité des fonds ont été envoyés et où tous les nouveaux dons BTC doivent également être envoyés.

« Nous avons maintenant aussi une adresse Ethereum :
  • 0xC1d472B409c1bdCd8C0E45515D18F08a55fE9fa8

« Pour terminer, nous voudrions également demander que si quelqu'un souhaite nous envoyer un don important à notre adresse Bitcoin ou Ethereum, veuillez commencer par nous envoyer un petit montant et nous contacter au sujet de vos intentions. C'est juste pour nous assurer que nous pouvons confirmer que les fonds sont arrivés dans nos portefeuilles en toute sécurité. Si la crypto n'est pas votre truc, assurez-vous de consulter notre page de dons pour d'autres moyens de soutenir le développement de Nim.

« Merci encore pour tout votre soutien au fil des ans. Vos contributions, à la fois monétaires et sous la forme de demandes de tirage et de renforcement de la communauté, ont contribué à faire de Nim ce qu'il est aujourd'hui ».

Pourquoi utiliser Nim alors que des langages comme Python, Rust, Julia et bien d’autres existent ?

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.

Le langage Nim est classé dans le top 100 des langages les plus populaires sur le baromètre TIOBE, à la position 81. L’existence des langages comme Nim soulève la question sur la multiplicité des langages de programmation et leur nécessité. En effet, Nim est en concurrence avec des langages qu’on retrouve dans le top 100 de TIOBE comme F#, CIL, ECMAScript, Eiffel, Elm, Haxe, Icon, Inform, Io, JScript, Korn shell, Lingo, M4, ML, MQL4, Nim, NXT-G, Occam, OpenCL, OpenEdge ABL, Oz, PostScript, Q, Racket, REBOL, REXX, Ring, RPG, S-PLUS, Simulink, SPSS, Vala/Genie, Verilog, Xojo et bien d’autres.

La volonté de l’équipe de développement de Nim serait de voir le langage classé dans le top 10 avec des langages comme, Python, C, Java, C++, C#, Visual Basic.

De manière générale, la syntaxe rappelle Python (pour la délimitation des blocs) et Scala (pour les types et certaines syntaxes raccourcies), avec des types, mais aussi le renvoi implicite d’une variable (ce qui contribue à raccourcir le code… avec un peu d’habitude) :

Code Nim : Sélectionner tout
1
2
3
4
5
6
7
proc reverse(s: string): string =  
  result = ""   
  for i in countdown(high(s), 0):  
    result.add s[i]  
  
var str1 = "Reverse This!"  
echo "Reversed: ", reverse(str1)

La métaprogrammation est poussée plus loin qu’en C++ : elle permet de générer n’importe quel type de code à la compilation, en travaillant directement au niveau de l’AST du compilateur. Par exemple, la fonction suivante génère des fonctions dont le nom dépend des arguments. (Bien évidemment, ce système peut être utilisé dans des cas plus complexes.)

Code Nim : Sélectionner tout
1
2
3
4
5
6
7
8
import macros  
  
template abcProc(n: expr): stmt  =    
  proc n() = echo astToStr(n)   
  
abcProc(A)  
abcProc(B)  
abcProc(C)

L’un des concepts principaux derrière le langage concerne les aspects parallèles : chaque fil d’exécution peut communiquer avec les autres à l’aide de messages asynchrones, des canaux. Le collecteur de mémoire peut donc fonctionner indépendamment pour chaque fil d’exécution : même en mettant l'un d'entre eux en pause, l’application peut toujours fonctionner ; ce système est donc adapté aux applications qui ne sont pas strictement temps réel, comme les jeux (mais contrairement à une bonne partie de l’électronique).

Quelques langages avec lesquels Nim est en concurrence

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 dans l'édition d'octobre 2021, 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 de code JavaScript. TypeScript inclut un bon ensemble de fonctionnalités de programmation orientée objet (POO), qui sont bonnes pour maintenir un code robuste et propre ; cela améliore la qualité et la maintenabilité du code. Ces caractéristiques rendent le code TypeScript très propre et organisé. TypeScript prend en charge les interfaces, les génériques, l'héritage et les modificateurs d'accès aux méthodes.

Source : Nim

Et vous ?

Connaissez-vous ce langage de programmation ? Qu'en pensez-vous ?
Êtes-vous pour ou contre la multiplicité des langages de programmation ciblant les mêmes secteurs ? Dans quelle mesure ?
Quels langages de programmation utilisez-vous en entreprises et / ou pour vos projets personnel ?
Pour ou contre l'utilisation de framework ?
Si vous êtes pour, à quel moment préconisez-vous leur emploi (lorsqu'on maîtrise suffisamment le langage de programmation, lorsqu'on débute, lorsqu'on en connait les bases, etc.) ?
Seriez-vous intéressé par un framework Nim ?
Avez-vous déjà entendu parlé de framework écrit en Nim comme Prologue (framework web) ?

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 habitué 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