logo ENSTA logo JuliaOpt

Julia : le langage scientifique

Mare du problème de certificat insecure ?
Passer (provisoirement) par https://diam.minisme.fr/julia

logo UMA
retour : ENSTA /~diam /julia
voir version standard
modif : 24/06/2020

    Le langage Julia    

    • Mini portail              
      • Sites de référence
      • distributions
      • Lib optimisation
      • Lib scientifiques
      • Lib calcul massif
      • Lib Data Sciences, etc...
      • Julia et autres langages
      • Lib graphiques
      • dév. et déployement
      • Lib diverses
      • Articles spécialisés
    • Guide de survie
      • Les bases
      • Premier contact
      • Other...
    • Faits marquants

    Références

    • Julialang                          
    • doc réf :   stable   dév  
    • Juliapackages
    • JuMP (stable)   git
    • LightGraphs.jl   git
    • Graphs.jl (doc)   git
    • Forums :
        User
        opt
        models/simu
        visu
  • forum stackoverflow
  • forum reddit
  • Tutoriaux

    • Julia in Y minutes            
    • julia_express.pdf      
    • Julia-Cheat-Sheet     fr
    • learn-julia-the-hard-way (wip)
    • Julia By Exemple      
    • Running Shell from Julia  
    • wikibook Julia   mono fich
    • Thinking in Julia (github)  
    • Découverte de Julia (FR!)  

    Autres pages diam

    • Le langage Ruby
    • Le langage TCL
    • Portail R.O.

    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

    • fr 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
    • fr 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
    • fr 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 ;-)
    • fr 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
    • fr 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, ...
    • fr 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.
    • fr À la découverte de Julia : un nouveau langage scientifique (http://julia.developpez.com/tutoriels/decouverte-julia/) (26/11/2017)
      Présentation du langage par Guillaume Fraux sur le site julia.developpez.com.

    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, ...

    • Distrib de source ou binaires pour différentes plateformes (http://julialang.org/downloads/) (04/02/2015)
      La page download de référence.
    • Juno : environnement de développement pour Julia (http://junolab.org) (04/02/2015..25/07/2018)
      Basé sur l'éditeur Atom, Juno propose une console, un débogueur, un profileur, ...
    • 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).
    • AmplNLWriter.jl: Julia interface to AMPL-enabled solvers (https://github.com/JuliaOpt/AmplNLWriter.jl) (10/03/2016)
    • 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 !
    • lightgraphs.jl (https://github.com/JuliaGraphs/LightGraphs.jl) (04/02/2015)
      Bibliothèque de graphes (complémentaire à Graph.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.
    • SimpleGraphs.jl (https://github.com/scheinerman/SimpleGraphs.jl) (04/02/2015)
      Une autre bibliothèque secondaire de graphes (avec algo de coloration, euler, ...).
    • ParallelGraphs: Massive Graph Analysis Platform built on ComputeFramework.jl (https://github.com/pranavtbhat/ParallelGraphs.jl) (02/03/2016)
      Spéialisé pour les gros graphes. Basé sur LightGraphs.jl.
    • 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 JuMPL et LightGraphs.jl

    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,
    • 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++.
    • 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, ...
     
    retour ENSTA / ~diam / julia /      modif : 24/06/2020      URL originale : https://www.ensta-paris.fr/~diam/julia Auteur : Maurice Diamantini      URL originale : https://www.ensta-paris.fr/~diam/julia    modif : 24/06/2020