Quelques pointeurs sur le langage Julia
Citation des créateurs de Julia :
We want a language that’s open source, with a liberal license. We want the
speed of C with the dynamism of Ruby. We want a language that’s homoiconic,
with true macros like Lisp, but with obvious, familiar mathematical
notation like Matlab.
Une médaille Fields du logiciel scientifique ?
En effet, le
prix Wilkinson
n'est decerné qu'une fois tous les quatre ans par le
SIAM
(Society for Industrial and Applied Mathematics)
en récompense d'une contribution exceptionnelle dans le domaine du logiciel
numérique. Cette année 2019, ce sont les auteurs du langage Julia qui sont
récompensés !
D'autres informations moins récentes sont listées depuis la page Faits marquants autour du langage Julia.
Vous souhaitez avoir une vue rapide sur le langage Julia ? Voyez le (futur !) Guide de survie Julia.
Sites et communauté francophones
-
Site francophone dédié à Julia
(https://www.juliafran.org)
(15/03/2019..24/06/2020)
Ce site regroupera en particuliers les documents francophones et les journées de formation -
FORUM francophone Julia sur Developpez.net
(https://www.developpez.net/forums/f2204/autres-langages/autres-langages/julia/)
(12/03/2019)
Création à partir du regroupement d'anciens postes sur le Site de Developper.net -
LISTE DE MAILING du CNRS dédiée au langage Julia
(https://listes.services.cnrs.fr/wws/info/julia)
(12/03/2019)
Tout neuf d'aujourd'hui => pas encore de message ;-) -
Site Julia de l'université de Nantes
(https://julialang.univ-nantes.fr)
(17/03/2019)
Voir en particulier la prochaine journée Julia du 17 juin 2019 -
Blog de Thibaut Cuvelier sur le langage Julie
(https://tcuvelier.wordpress.com/category/langages/julia/)
(11/11/2018)
Le blog de Thibaut Cuvelier traite aussi de Recherche Opérationnale, de HPC, Qt, ... -
Une introduction à Julia
(https://github.com/clopeau/Julia_Introduction/)
(04/05/2016..12/03/2019)
Autre Introduction de Thierry Clopeau (format notbook) qui traite également du parallélisme avec Julia. -
Comment penser comme un informaticien - livre traduit en français
(https://github.com/aquarelleX332/ThinkJuliaFR.jl/blob/master/book/Think_Julia_FR.pdf)
(11/02/2021)
Livre traduit en français par Thierry Lepoint.
Version originale (Think in Julia) sur github
Sites de référence et méta-pointeurs
-
The Julia language
(http://julialang.org)
(17/10/2014)
La page d'accueil du langage Julia. -
Julia documentation
(http://docs.julialang.org)
(17/10/2014)
Le manuel du langage. -
Learn Julia in Y minutes
(http://learnxinyminutes.com/docs/julia/)
(17/10/2014)
La page à lire pour avoir une idée de la syntaxe (série "learn x in y minutes"). -
Julia community
(http://julialang.org/community/)
(17/10/2014)
Des forums google plus ou moins spécialisés. -
Introducing_Julia
(http://en.wikibooks.org/wiki/Introducing_Julia)
(31/10/2014)
Très bon wiki sur julia (version imprimable : (71 pages !)). -
BOOK: Julia Programming for Operations Research: A Primer on Computing
(http://www.chkwon.net/julia/)
(09/04/2016..01/04/2014)
Livre de Changhyun Kwon (prof. de R.O.) - VERSION2 (Julia-1.1 et JuMP-0.19) -
BOOK: Think Julia: How to Think Like a Computer Scientist
(https://benlauwens.github.io/ThinkJulia.jl/latest/book.html)
(11/11/2018..30/01/2019)
Traduction par Ben Lauwens de Think Python (licence Creative Commons)
sous licence "Creative Commons". Voir github -
A Deep Introduction to Julia for Data Science and
Scientific Computing
(https://ucidatascienceinitiative.github.io/IntroToJulia)
(06/12/2019)
Bien qu'un peu ancien (attention à certaines syntaxe), Très bonnes informations.
Installations, distributions, ...
-
Juliaup: Julia version manager
(https://github.com/JuliaLang/juliaup/)
(01/01/2023)
Le nouveau système d'installation et de gestion des vestion de Julia. -
JuliaBox: test de julia en ligne : rien à installer !
(https://github.com/JuliaLang/JuliaBox)
(04/02/2015)
Nécessite un compte google pour s'authentifier
Bibliothèques orientées R.O. et optimisation
-
JuliaOpt
(http://www.juliaopt.org)
(17/10/2014)
Site fédérant les principaux packages Julia autour de l'optimisation. -
JuMP - Julia for Mathematical oPtimization
(https://github.com/JuliaOpt/JuMP.jl)
(17/10/2014)
Bibliothèque de modélisation mathématique en pure Julia utilisable en programmation linéaire (dont PLNE), quadratique, non linéaire... Une extension pour la programmation robuste est en cours d'intégration (mais déjà utilisable sous forme d'extension externe à JuMP). Le solveur lui-même (sauf pour de petites instances) peut s'appuyer sur des solveurs existants comme Cplex, Gurobi, Glpk, Clp, Ipopt, ...) En résumé ; un concurrent gratuit à AMPL en plus polyvalent. -
JuMP: A Modeling Language for Mathematical Optimization
(https://mlubin.github.io/pdf/jump-sirev.pdf)
(30/11/2017)
article de Iain Dunnin, Joey Huchette et Mile Lubin (les auteurs de JuMP). -
Tulip.jl: interior-point solver for linear optimization, written in pure Julia
(https://github.com/ds4dm/Tulip.jl)
(29/09/2021)
- Développer par le GERAD,
- https://arxiv.org/pdf/2006.08814.pdf
- propose un exécutable autonome (tulip_cl) exploitant PackageCompiler pour résoudre les instances MPS,
- Numerical results indicate that Tulip is competitive with open-source solvers on unstructured LP instances, and significantly outperforms state-of-the-art commercial codes on structured problems. These results demonstrate the benefits of being able to seamlessly integrate specialized linear algebra within an interior-point algorithm.
-
AmplNLWriter.jl: Julia interface to AMPL-enabled solvers
(https://github.com/JuliaOpt/AmplNLWriter.jl)
(10/03/2016)
-
ConstraintProgrammingExtensions.jl: extension to MathOptInterface to support
constraint programming.
(https://github.com/dourouc05/ConstraintProgrammingExtensions.jl)
(29/09/2021)
Pour l'instant, plutôt orienté enseignement. -
ConstraintSolver.jl: solver par contrainte 100% Julia.
(https://github.com/Wikunia/ConstraintSolver.jl)
(29/09/2021)
Permet d'utiliser la programmation par contrainte avec JuMP si le solver sous-jacent le permet.
Quelques exemple sur hakank.org -
juliaopt-notebooks: A collection of IJulia notebooks related to optimization
(https://github.com/JuliaOpt/juliaopt-notebooks)
(11/02/2015)
Une collection d'exemple d'utilisation de JuMP (dont génération de collone, benders, ...). -
JuliaGraphs:
(https://github.com/JuliaGraphs)
(07/02/2015)
Zone non publique pour l'instant, créée le 03/02/2015, et destinée à fédérer les différents développements en Julia autour des algorithmes de graphe. À suivre ! -
Graphs.jl
(https://github.com/JuliaGraphs/Graphs.jl)
(04/02/2015..21/10/2021)
Bibliothèque de graphes (renommage de LightGraph.jl) limitée aux graphes simples (pas de boucle, un seul arc entre deux noeuds) qui se veut plus simple et plus efficace que Graph.jl : tout attribut de node ou edge ne fait pas partie de la structure du graphe. -
JuMPeR extension à Jump pour optim. robuste
(http://iainnz.github.io/JuMPeR.jl/)
(17/10/2014..20/02/2015)
JuMPeR permet de reformuler automatiquement un modèle robuste en son modèle déterministe équivalent. -
Optim.jl: Optimization functions for Julia
(https://github.com/JuliaOpt/Optim.jl)
(31/10/2014)
Les algorithmes classiques d'optimisation continu en 100% Julia -
Convex.jl: A julia package for disciplined convex programming
(https://github.com/cvxgrp/Convex.jl)
(31/10/2014)
De Stanford University Convex Optimization Group -
NLopt.jl: binding Julia pour utiliser la bibliothèque NLopt
(https://github.com/JuliaOpt/NLopt.jl)
(31/10/2014)
NLopt est une bibliothèque C/C++ spécialisée d'optimization nonlinear -
vOptSolver: Solver of multiobjective linear optimization problems
(https://github.com/vOptSolver)
(..17/12/2018)
Framework pour l'optimisation linéaire Multiobjectif de Xavier Gandibleux. -
BlackBoxOptim.jl : Black-box optimization for Julia.
(https://github.com/robertfeldt/BlackBoxOptim.jl)
(31/10/2014)
Framework d'optimisation globale non-différenciable mono ou multiobjectif par méta-heuristiques. -
RobustShortestPath.jl : Julia package for finding robust shortest paths.
(https://github.com/chkwon/RobustShortestPath.jl)
(09/04/2016)
Ce package est basé sur JuMP et LightGraphs.jl -
Scheduling.jl: pure Julia framework for scheduling research
(https://github.com/bprzybylski/Scheduling.jl)
(21/11/2021)
Ce package a fait l'objet d'une présentation sur arxiv.
Bibliothèques scientifiques
-
NearestNeighbors: recherche de points voisins, KDtree dimention arbitraire
(https://github.com/KristofferC/NearestNeighbors.jl)
(24/02/2016)
KDtree de dimension arbitraire -
NearestNeighbors: recherche de points voisins
(https://github.com/johnmyleswhite/NearestNeighbors.jl)
(31/10/2014)
Version naïve et avec une structure de KDTree -
Hadamard.jl: Fast Walsh-Hadamard transforms for the Julia language
(https://github.com/stevengj/Hadamard.jl)
(02/11/2014)
-
HJBSolver.jl: General solver for Hamilton-Jacobi-Bellman equations
(https://github.com/anriseth/HJBSolver.jl)
(29/09/2016)
-
JuliaFEM; collection d'outils Julia pour les éléments finis
(https://github.com/JuliaFEM)
(24/06/2016)
Par Bill McLean -
JuAFEM: Finite element toolbox for Julia
(https://github.com/KristofferC/JuAFEM.jl)
(24/02/2016)
Par Kristoffer Carlsson
Calcul massif
-
Multi-threaded : Announcing composable multi-threaded parallelism in Julia
(https://julialang.org/blog/2019/07/multithreading)
(24/07/2019)
Fonctionalités multi-thread de haut niveau prévu dans Julia-1.3 (par Jeff Bezanson) -
JuliaParallel: Various models for parallel programming in Julia
(https://github.com/JuliaParallel)
(02/03/2016)
Recueil d'extension ou binding autour du calcul parallèle oet du cloud computing -
JuliaGPU: GPU Computing for Julia
(https://github.com/JuliaGPU)
(10/03/2016)
Regroupe les efforts en Julia pour autour de CUDA, OpenCL, Vulcan, ... -
An Introduction to GPU Programming in Julia
(https://nextjournal.com/sdanisch/julia-gpu-programming)
(06/05/2019)
Tuto très complet sur le déveleoppement GPU avec Julia.
(cet exemple utilise une machine Tesla k80 avec 4992 coeurs CUDA en parallèle) -
HPC Julia resources from svaksha
(https://github.com/svaksha/Julia.jl/blob/master/Super-Computing.md#hpc)
(24/03/2016..25/01/2017)
Recueil de liens concernant le Calcul Haute Performance en Julia -
MPI.jl: MPI interface for the Julia language
(https://github.com/JuliaParallel/MPI.jl)
(02/03/2016)
Avec exemples (dont calcul de pi par montecarlo) -
MUMPS.jl: A Julia Interface to MUMPS
(https://github.com/JuliaOptimizers/MUMPS.jl)
(10/03/2016: )
MUMPS est une bibliothèque massivement parallèle de factorisation matricielle par méthodes directes.
Julia, les Sciences des Données, le Machine Learning et l'IA
Voici une petite discussion (fin 2017) sur les différentes approches pour faire du Machine Learning avec Julia.-
Machine Learning and Artificial Intelligence with Julia
(https://juliacomputing.com/domains/ml-and-ai.html)
(10/11/2018)
-
On Machine Learning and Programming Languages
(https://julialang.org/blog/2017/12/ml&pl)
(blog du 06/12/2017)
-
Fluxml: Elegant Machine Learning with Julia
(http://fluxml.ai)
(10/11/2018)
Par Mike Innes, core développeur de Julia, Auteur de l'IDE Jumo pour Julia
- Documentation
- Flux.jl sur Github -
Knet.jl: Koç University deep learning framework implemented in Julia
(https://github.com/denizyuret/Knet.jl)
(10/11/2018)
Avec support de GPU, differenciation automatique, ... Voir le Tutorial Knet -
AlphaGo.jl: AlphaGo Zero implementation using Flux.jl
(https://github.com/Keno/AlphaGo.jl)
(10/11/2018)
-
TensoFlow.jl: un wrapper su la bibliothèque de Google
(https://github.com/malmaud/TensorFlow.jl)
(10/11/2018)
Avec une description des avantages de cette interface sur celle de Python -
Mocha.jl: Deep Learning framework for Julia
(https://github.com/pluskid/Mocha.jl)
(10/11/2018)
Plus de détails sur readthedocs
Julia et les autres langages
Julia permet déjà d'utiliser directement des bibliothèques C ou d'appeler du code Python (et matplotlib). Ne sont donc listées ci-dessous que quelques bibliothèques spécialisées pour l'interfaçage avec d'autres langages.-
Five (More) Reasons to Check Out Julia
(https://www.manhattanmetric.com/blog/2018/01/five-more-reasons-to-check-out-julia.html)
(06/2/2018)
Arguments intéressants sur 5 points particuliers de Julia :
- blocs et fonctions anonymes (Ruby),
- opérateurs unicodes (LaTeX, ...),
- diffusion de l'opérateur "." (Matlab),
- création et Gestion des packages,
- les macros string (syntaxe spéciale pour les chaines de caractères, -
Outil en ligne de convertion decode Matlab vers et Julia
(https://lakras.github.io/matlab-to-julia/)
(03/05/2021)
(Merci Pierre N.) -
Résumé des différences entre Matlab, Python avec numpy et Julia
(https://cheatsheets.quantecon.org)
(02/10/2019)
Excellent résumé pour se faire une idée (Merci Pierre N.) -
JuliaInterop: Easy interoperability between Julia and not Julia
(https://github.com/JuliaInterop)
(10/11/2018)
Méta dépos sur github regroupant les packages d'intéropérabilité entre Julia et les autres langages. -
Julia_for_MATLAB_Users: wiki pour le passage de Matlab vers Julia
(https://en.wikibooks.org/wiki/Julia_for_MATLAB_Users)
(03/08/2018)
-
Cxx.jl: The Julia C++ Foreign Function Interface (FFI).
(https://github.com/Keno/Cxx.jl)
(10/03/2016)
Fonctionnalité plutôt unique dans un langage (possible grâce au fonctionnement interne de Julia et à son appui sur LLVM), cette bibliothèque (en cours de développement permet d'appeler directement du code C++ -
CxxWrap: Package to make C++ libraries available in Julia.
(https://github.com/JuliaInterop/CxxWrap.jl)
(15/03/2016..10/11/2018)
Approche différente de Cxx.jl (qui est en Julia pur), CxxWrap (créer très récemment) propose de créer l'interface en C++. -
Jluna: A modern Julia <-> C++ Wrapper.
(https://github.com/Clemapfel/jluna)
(07/05/2022)
Bibliothèque C++ pour intégrer Julia dans un projet C++ (inspiré de Lua)
Nécessite au minimum C++ 2011 et Julia-1.7
Un bon candidat pour intégrer une console Julia dans une bibliothèque d'éléments finis C++ comme XLiFE++ ;-)
Les API seraient stables, et la version 1.0 est attendue pour fin 2022. . -
JavaCall.jl: Call Java from Julia
(https://github.com/JuliaInterop/JavaCall.jl)
(18/04/2016..10/11/2018)
Fait appel à Java Native Interface (JNI) pour appeler directement des bibliothèques Java.
Graphisme
-
Plots : surcouche générique à plusieurs plotter Julia (dont GR ci-dessus)
(https://github.com/tbreloff/Plots.jl)
(14/09/2015)
-
VegaLite.jl: Julia bindings to Vega-Lite
(https://github.com/fredo-dedup/VegaLite.jl)
(25/03/2019)
Basé sur vega-lite – A Grammar of Interactive Graphics
Transformation de donnée (via json..) en graphique JavaScript de plus haut niveau que 3D.js
- Doc de VegaLite.jl
- Doc de Vega-Lite
- Exemple Vega en ligne
-
QML.jl: QML binding for Julia
(https://github.com/barche/QML.jl)
(16/03/2016)
Tout récent, mais fonctionnel. Ce binding permet d'utiliser QML (la partie GUI de Qt5) depuis Julia. Utilise le package CxxWrap.jl du même auteur. -
Gadfly: package graphique natif en Julia
(http://gadflyjl.org)
(12/09/2016)
-
JuliaGL: groupement des packages Julia concernant OpenGL
(https://github.com/JuliaGL)
(17/12/2018)
-
Makie.jl: High level plotting on the GPU
(https://github.com/JuliaPlots/Makie.jl)
(17/12/2018)
Bibliothère 2D/3D basée sur OpenGL. Voir la note concernant la précompilation avec PackageCompiler en fin de page. -
GR.jl : Plotting for Julia based on GR, a framework for visualisation applications
(https://github.com/jheinen/GR.jl)
(08/04/2016)
Binding avec la framework GR en C (du même auteur) permettant de générer -
GraphViz.jl : interface avec Graphviz
(https://github.com/Keno/GraphViz.jl)
(14/09/2015)
-
GraphVisualize.jl: Graph visualization using GLVisualize.jl and LightGraphs.jl
(https://github.com/JuliaGraphs/GraphVisualize.jl)
(10/03/2016)
Créé tout récemment et basé sur GLVisualize.jl : à surveiller -
Gtk.jl: Julia interface to Gtk windowing toolkit
(https://github.com/JuliaLang/Gtk.jl)
(10/03/2016)
-
ThreeJS.jl: Julia interface to WebGL using Three-js
(https://github.com/rohitvarkey/ThreeJS.jl)
(10/03/2016)
Permet de faire du graphisme 3D intéractif dans le navigateur. Voir le manuel détaillé. -
Tk.jl: Julia interface to Tk windowing toolkit
(https://github.com/JuliaLang/Tk.jl)
(14/09/2015)
-
WriteVTK.jl: Julia module for writing VTK XML files
(https://github.com/KristofferC/WriteVTK.jl)
(24/02/2016)
Développement et déployement
-
BlueStyle: A Julia style guide that lives in a blue world
(https://github.com/invenia/BlueStyle)
(01/05/2020)
Une convention destyle codage en pour Julia plutôt bien diffusée -
A Julia interpreter and debugger
(https://julialang.org/blog/2019/03/debuggers)
(25/03/2019)
Nouveau debugger composé de plusieurs parties (Rebugger, Revize, ...) et intégré à l'IDE Juno (lui-même basé sur Atom) -
PackageCompiler.jl: compilation statique d'une application en Julia
(https://github.com/JuliaLang/PackageCompiler.jl)
(28/03/2018..25/03/2019)
Permet la compilation statique d'une application en Julia (en développement).
Fourni un script juliac.jl qui intègre l'ensemble de votre code julia et ses dépendance en un seul exécutable (en développement, non testé). -
pkg argparse Julia
(http://argparsejl.readthedocs.org/en/latest/argparse.html)
(31/10/2014)
Le package standard Julia pour l'analyse d'arguments -
SnoopCompile.jl: Making packages work faster with more extensive precompilation
(https://github.com/timholy/SnoopCompile.jl)
(11/11/2018)
-
ProfileView.jl: Visualization of Julia profiling data
(https://github.com/timholy/ProfileView.jl)
(21/07/2016)
Trés bon outil de profilage graphique pour Julia (pour dépister les parties lente d'un code -
build-lj-app-bundle: macOS Julia Application Builder
(https://github.com/NHDaly/build-jl-app-bundle)
(12/04/2018)
Nouvel exécutable Julia récent qui permet de transformer une application julia en une application native pour MacOSX. Devrait être étendu aux autres systemes. Dépend de PackageCompiler.jl.
(trés peu testé : sensible à l'environnment et peu robuste pour l'instant).
Bibliothèques diverses
-
LaTeX.jl : générer du LaTeX à partir d'un code Julia
(https://github.com/rened/LaTeX.jl)
(04/02/2015)
-
JSON.jl: gestion du format de sérialisation JSON
(https://github.com/JuliaIO/JSON.jl)
(11/11/2018)
-
YAML.jl: gestion du format de sérialisation YAML
(https://github.com/BioJulia/YAML.jl)
(11/11/2018)
Articles ou tutoriaux spécialisés ou avancés
à compléter...progammation objet avec Julia
-
Object Orientation and Polymorphism in Julia
(https://github.com/ninjaaron/oo-and-polymorphism-in-julia)
(20/06/2019)
-
Julia subtyping: a rational reconstruction
(https://dl.acm.org/citation.cfm?doid=3288538.3276483)
(02/04/2019)
Article pdf détaillé sur la généricité et le sous-typage en Julia (de nov 2018) -
The Design Impact of Multiple Dispatch
(http://nbviewer.jupyter.org/gist/StefanKarpinski/b8fe9dbb36c1427b9f22)
(19/09/2013..30/11/2017)
Notebook d'explication du multiple-dispatch par un des auteurs du langage (Stefan Karpinski) -
1/3 Understanding object-oriented programming in Julia – Objects (part1)
(http://thenewphalls.wordpress.com/2014/02/19/understanding-object-oriented-programming-in-julia-part)
(30/10/2014)
Ces trois articles présentent une manière de faire de la progammation objet avec Julia -
2/3 Understanding object-oriented programming in Julia – Inheritance part2)
(http://thenewphalls.wordpress.com/2014/03/06/understanding-object-oriented-programming-in-julia-inheritance-part-2)
(30/10/2014)
-
3/3 Revisiting emulated OOP behaviour and multiple dispatch in Julia
(http://thenewphalls.wordpress.com/2014/06/02/revisiting-emulated-oop-behaviour-and-multiple-dispatch)
(30/10/2014)
-
Inheriting type behavior in Julia
(http://grollchristian.wordpress.com/2014/01/22/julia-inheriting-behavior)
(30/10/2014)
Assez technique. Utilisation du sous-typages, méta-programmation, ... -
Metaprogramming in Julia
(http://nbviewer.ipython.org/github/stevengj/Julia-EuroSciPy14/blob/master/Metaprogramming.ipynb)
(02/11/2014)
TTB présentation de la métaprogrammation (expressions symboliques, macro, polynome de Horner, ...