Nouveaux langages de programmation
Page écrite par Sébastien Binet et Christophe Meessen octobre 2013 - mai 2015
Ce groupe de travail du RI3 de l'IN2P3 étudie principalement le langage Go et le langage D.
Le langage Go est un langage relativement simple l'on peut apprendre en un week-end. Le langage D est plus riche dans le sens qu'il propose des fonctionnalités supplémentaires tels que les templates, les exceptions, la programmation par contrat, etc. Par sa simplicité Go est souvent assimilé à une version fortement améliorée et enrichie du langage C, alors que le langage D serait une version fortement améliorée du langage C++. C'est une interprétation très approximative, mais acceptable pour ce qui concerne les fonctionnalités et l'effort d'apprentissage nécessaire pour maîtriser complètement ces langages.
Les langages de programmation C et C++ étant omniprésents dans la recherche en physique nucléaire et la physique des particules, il nous a semblé opportun de vouloir évaluer dans quelle mesure ces deux langages pourraient représenter l'avenir de la programmation dans notre domaine.
Ressources pour le langage Go
Le site web de référence pour
le langage Go : http://golang.org/
Liste des packages Go :
http://golang.org/pkg/
IDE :
https://github.com/visualfc/liteide
go-hep, un jeu de paquets Go
pour HEP: https://github.com/go-hep
godoc (documentation pour tous
les paquets Go opensource): https://godoc.org
go-search (chercher/trouver des
paquets Go): http://go-search.org
resources pour debutants:
http://dave.cheney.net/resources-for-new-go-programmers
debugging go with gdb:
https://lincolnloop.com/blog/introduction-go-debugging-gdb/
some open source libraries:
https://www.spacemonkey.com/blog/posts/go-open-source
Ressources pour le langage D
Le site web de référence pour
le langage D est http://dlang.org/
Liste (non exclusive) des
packages D : http://code.dlang.org/
IDEs :
http://wiki.dlang.org/IDEs
Livres:
http://wiki.dlang.org/Books
The D Programming Language
Andrei Alexandrescu
http://www.amazon.com/exec/obidos/ASIN/0321635361/classicempire
(~38€)
Programming in D Ali
Çehreli http://ddili.org/ders/d.en/index.html
http://ddili.org/ders/d.en/Programming_in_D.pdf
(gratuit)
De l'auteur: "How I came to write D"
http://www.drdobbs.com/architecture-and-design/how-i-came-to-write-d/240165322
Sébastien m'ayant dit sur
Sébastien m'ayant dit sur DevLOG que vous étiez potentiellement intéressés par Rust, je vous propose quelques contributions concernant ce langage. N'hésitez pas à en intégrer tout ou partie selon votre goût.
Le langage Rust est né du ras-le-bol d'un employé de Mozilla, Graydon Hoare, face aux limitations du C++, notamment la grande fragilité des manipulations de la mémoire dans ce langage (source d'innombrables failles de sécurité dans Firefox), l'ergonomie limitée de son système de type, et le très faible support de la programmation parallèle (qui a mené à l'échec toutes les tentatives passées d'introduire du multi-threading dans Firefox).
Inspiré par sa culture du langage fonctionnel OCaml et par des recherches très anciennes mais peu exploitées sur la gestion mémoire sûre à bas coût (le "region-based memory management"), le créateur de Rust s'est donné pour but de mettre sur pied un langage qui offre les mêmes possibilités de contrôle bas niveau et de programmation haute performance que le C ou le C++, tout en offrant un confort de programmation et une flexibilité d'abstraction comparables à ce qu'on peut trouver dans des langages haut niveau modernes comme Haskell, Scala, ou Python. Le tout avec un fort accent sur l'analyse statique qui assure qu'un maximum de problème soient détectés à la compilation et que l'utilisateur soit encouragé à faire les choses correctement (gestion des erreurs, de la mémoire...) par défaut.
De mon point de vue d'utilisateur régulier, ce pari risqué a été brillamment gagné par l'équipe Rust. S'il nécessite clairement un effort d'apprentissage non-négligeable, le langage Rust offre en échange à l'apprenant assidu un excellent mélange de puissance expressive, d'ergonomie au quotidien, de détection des erreurs à la compilation, et de contrôle sur l'exécution du programme lorsque c'est nécessaire d'un point de vue de performances. Mes principaux griefs, vu du monde C++, touchent à l'immaturité de certaines fonctionnalités avancées comme l'asynchronisme ou la vectorisation, et à ce niveau le développement rapide du langage va dans la bonne direction.
Si cette description vous semble intéressante, voici quelques ressources documentaires pour approfondir le sujet:
- Le site de référence du langage https://www.rust-lang.org/fr-FR/ , dont les sections "Documentation" et "Communauté" en particulier sont très riches en ressources.
- En particulier, parmi les ressources documentaires vers lesquelles ce site pointe, https://github.com/ctjhoa/rust-learning est une excellente compilation de ressources de tous types (livres, vidéos, blogs, tutoriels...) sur le langage.
- Le site du gestionnaire de paquets Cargo, utilisé pour la distribution des bibliothèques: https://crates.io/
- Une discussion du support des IDEs: https://areweideyet.com/ .