Nous soutenons l’Ukraine pour aider à protéger les civils. Rejoignez-nous
FR
Lorsque vous achetez via les liens de notre site, nous pouvons percevoir une commission d’affiliation

Julia pour Mac

Un langage dynamique de haut niveau, open source et hautement performant.

Gratuit
Version 1.12.7
3.5
D’après 2 notes d’utilisateurs

Aperçu de Julia

Julia est un langage dynamique de haut niveau et hautement performant destiné au calcul technique.

Julia en bref
Julia est rapide !

Julia a été conçue dès le départ pour offrir des performances élevées. Les programmes Julia sont compilés en code natif efficace pour plusieurs plateformes via LLVM.

Dynamique

Julia est un langage à typage dynamique, qui s'apparente à un langage de script et offre une bonne prise en charge de l'utilisation interactive.

Typage facultatif

Julia dispose d'un langage riche en types de données descriptifs, et les déclarations de types peuvent être utilisées pour clarifier et renforcer les programmes.

Général

Julia utilise le dispatch multiple comme paradigme, ce qui facilite l’expression de nombreux modèles de programmation orientée objet et fonctionnelle. Elle offre des E/S asynchrones, le débogage, la journalisation, le profilage, un gestionnaire de paquets, et bien plus encore.

Facile à utiliser

Julia dispose d'une syntaxe de haut niveau, ce qui en fait un langage accessible aux programmeurs de tous horizons et de tous niveaux d'expérience. Parcourez les micro-benchmarks de Julia pour vous faire une idée du langage.

Open source

Julia est distribuée sous licence MIT, ce qui permet à tout le monde de l'utiliser gratuitement. L'intégralité du code source est accessible au public sur GitHub.

Nouveautés de la version 1.12.7

Nouvelles fonctionnalités linguistiques
  • Nouvelle option expérimentale --trim qui crée des binaires plus petits en supprimant le code non prouvé accessible depuis les points d'entrée. Les points d'entrée peuvent être marqués à l'aide de Base.Experimental.entrypoint (#55047). Tout le code n'est pas censé fonctionner avec cette option, et comme il s'agit d'une option expérimentale, vous pourriez rencontrer des problèmes.
  • La redéfinition des constantes est maintenant bien définie et suit la sémantique de l'âge du monde (#57253). Des redéfinitions supplémentaires (par exemple, de types) sont désormais autorisées. Voir le nouveau chapitre du manuel sur l'âge du monde.
  • Un nouvel argument de mot-clé usings::Bool a été ajouté aux noms, retournant tous les noms visibles via using (#54609).
  • La famille de macros @atomic prend désormais en charge la syntaxe d'assignation de référence, par exemple @atomic :monotonic v[3] += 4, qui modifie v[3] de manière atomique avec des sémantiques d'ordre monotoniques (#54707). La syntaxe prise en charge permet
    • fetch atomique (x = @atomic v[3]),
    • set atomique (@atomic v[3] = 4),
    • modifier atomique (@atomic v[3] += 2),
    • set une fois (@atomiconce v[3] = 2),
    • swap atomique (x = @atomicswap v[3] = 2), et
    • remplacer atomique (x = @atomicreplace v[3] 2=>5).
  • Nouvelle option --task-metrics=yes pour activer la collecte d'informations de timing par tâche, qui peut également être activée/désactivée à l'exécution avec Base.Experimental.task_metrics(::Bool) (#56320). Les métriques disponibles sont :
    • temps d'exécution réel pour la tâche (Base.Experimental.task_running_time_ns), et
    • temps réel pour la tâche (Base.Experimental.task_wall_time_ns).
  • Support pour Unicode 16 (#56925).
  • Threads.@spawn prend désormais un argument :samepool pour spécifier le même pool de threads que l'appelant. Threads.@spawn :samepool foo() qui est une abréviation pour Threads.@spawn Threads.threadpool() foo() (#57109).
  • La macro @ccall peut désormais prendre un argument gc_safe, qui, s'il est défini sur true, permet à l'exécution de faire fonctionner la collecte des ordures en parallèle avec le ccall (#49933).
  • Une seule méthode couvrant plusieurs fonctions est désormais autorisée dans plus de cas. Voir le problème #54620. (#58131).
  • Le caractère U+1F8B2 1F8B2 (FLÈCHE VERS LA DROITE AVEC CROCHET INFÉRIEUR), nouvellement ajouté par Unicode 16, est désormais un opérateur valide avec une priorité de flèche, accessible sous \hookunderrightarrow au REPL. (JuliaLang/JuliaSyntax.jl#525, #57143).
Changements linguistiques
  • Lorsqu'une méthode est remplacée par une méthode exactement équivalente, l'ancienne méthode n'est pas supprimée. Au lieu de cela, la nouvelle méthode prend la priorité et devient plus spécifique que l'ancienne méthode. Ainsi, si la nouvelle méthode est supprimée plus tard, l'ancienne méthode reprendra son fonctionnement. Cela peut être utile dans les frameworks de simulation (comme dans SparseArrays, Pluto et Mocking, entre autres), car ils n'ont pas besoin de restaurer explicitement l'ancienne méthode. À ce moment-là, l'inférence et la compilation doivent être répétées dans cette situation, mais nous pourrions éventuellement être en mesure de réutiliser les anciens résultats (#53415).
  • L'expansion de macro ne va plus récursivement dans les expressions Expr(:toplevel) retournées par les macros. Au lieu de cela, l'expansion de macro des expressions :toplevel sera retardée jusqu'au moment de l'évaluation. Cela permet à une expression ultérieure dans une expression :toplevel donnée d'utiliser des macros définies plus tôt dans la même expression :toplevel (#53515).
  • Les boucles infinies triviales (comme while true; end) ne sont plus un comportement indéfini. Les boucles infinies qui font des choses (par exemple, ont des effets secondaires ou dorment) n'ont jamais été et ne sont toujours pas un comportement indéfini (#52999).
  • Il est désormais une erreur de marquer une liaison à la fois comme publique et exportée (#53664).
  • Les erreurs lors de getfield lèvent désormais un nouveau type d'exception FieldError au lieu de l'exception générique ErrorException (#54504).
  • Les macros en position de signature de fonction ne nécessitent plus de parenthèses. Par exemple, la fonction @main(args) ... end est désormais autorisée, tandis que la fonction (@main)(args) ... end était requise dans les versions précédentes de Julia.
  • Appeler using sur un nom de package à l'intérieur de ce package de ce nom (surtout pertinent pour un sous-module) utilise désormais explicitement ce package sans examiner le Manifest et l'environnement, ce qui est identique au comportement de ..Name. Cela semble mieux correspondre à la façon dont les utilisateurs s'attendent à ce que cela se comporte dans la nature (#57727).
Améliorations du compilateur/runtime
  • L'IR LLVM généré utilise désormais des types de pointeur au lieu de passer des pointeurs en tant qu'entiers. Cela affecte llvmcall : L'IR LLVM en ligne doit être mis à jour pour utiliser i8* ou ptr au lieu de i32 ou i64, et supprimer les conversions ptrtoint/inttoptr inutiles. Pour des raisons de compatibilité, l'IR avec des pointeurs entiers est toujours pris en charge, mais génère un avertissement de dépréciation (#53687).
Changements des options de ligne de commande
  • Le drapeau -m/--module peut être passé pour exécuter la fonction principale à l'intérieur d'un package avec un ensemble d'arguments. Cette fonction principale doit être déclarée à l'aide de @main pour indiquer qu'il s'agit d'un point d'entrée (#52103).
  • Activer ou désactiver le texte coloré dans Julia peut désormais être contrôlé avec les variables d'environnement NO_COLOR ou FORCE_COLOR. Ces variables sont également respectées par le système de construction de Julia (#53742, #56346).
  • --project=@temp démarre Julia avec un environnement temporaire (#51149).
  • Nouvelle option --trace-compile-timing pour signaler combien de temps chaque méthode signalée par --trace-compile a pris pour se compiler, en ms (#54662).
  • --trace-compile imprime désormais les méthodes recompilées en jaune ou avec un commentaire final si la couleur n'est pas prise en charge (#55763).
  • Nouvelle option --trace-dispatch pour signaler les méthodes qui sont dispatchées dynamiquement (#55848).
Changements de multi-threading
  • Julia utilise désormais par défaut 1 thread "interactif", en plus du 1 thread "travailleur" par défaut. c'est-à-dire -t1,1. Cela signifie qu'en configuration par défaut, la tâche principale et le REPL (lorsqu'il est en mode interactif), qui s'exécutent tous deux sur le thread 1, s'exécutent désormais dans le pool de threads interactifs. La boucle IO libuv s'exécute également sur le thread 1, aidant à une utilisation efficace du pool de threads de travail utilisé par Threads.@spawn. Demander spécifiquement 1 thread (-t1/JULIA_NUM_THREADS=1) ou 0 threads interactifs désactivera le thread interactif c'est-à-dire -t1,0 ou JULIA_NUM_THREADS=1,0 , ou -tauto,0 etc. Demander plus d'un thread activera le thread interactif donc -t2 définira l'équivalent de -t2,1. Pour rappel, les tampons ne doivent pas être gérés en fonction de threadid() (#57087).
  • De nouveaux types sont définis pour gérer le modèle de code qui doit s'exécuter une fois par processus, appelé un type OncePerProcess{T}, qui permet de définir une fonction qui doit être exécutée exactement une fois la première fois qu'elle est appelée, puis toujours retourner la même valeur de résultat de type T chaque fois par la suite. Il existe également des types OncePerThread{T} et OncePerTask{T} pour une utilisation similaire avec des threads ou des tâches (#55793).
Changements du système de construction

Il existe de nouveaux Makefiles pour construire Julia et LLVM en utilisant l'outil d'optimisation et de mise en page binaire (BOLT). Voir contrib/bolt et contrib/pgo-lto-bolt (#54107).

Nouvelles fonctions de bibliothèque
  • logrange(start, stop; length) crée une plage de ratio constant, au lieu d'un pas constant (#39071).
  • La nouvelle fonction isfull(c::Channel) peut être utilisée pour vérifier si put!(c, some_value) bloquera (#53159).
  • waitany(tasks; throw=false) et waitall(tasks; failfast=false, throw=false) qui attendent plusieurs tâches à la fois (#53341).
  • uuid7() crée un UUID conforme à la RFC 9562 avec la version 7 (#54834).
  • insertdims(array; dims) insère des dimensions singleton dans un tableau --- l'opération inverse de dropdims (#45793).
  • Un nouveau type Fix généralise Fix1/Fix2 pour fixer un seul argument (#54653).
  • Sys.detectwsl() teste si Julia s'exécute à l'intérieur de WSL à l'exécution (#57069).
  • Base.donotdelete est désormais public. Il empêche l'élimination du code mort de ses arguments ([#55774]).
Nouvelles fonctionnalités de bibliothèque
  • escape_string prend des arguments de mot-clé supplémentaires ascii=true (pour échapper tous les caractères non-ASCII) et fullhex=true (pour exiger des nombres hexadécimaux complets de 4/8 chiffres pour les échappements u/U, par exemple pour la compatibilité C) (#55099).
  • tempname peut désormais prendre une chaîne de suffixe pour permettre au nom de fichier d'inclure un suffixe et d'inclure ce suffixe dans la vérification d'unicité (#53474).
  • Les objets RegexMatch peuvent désormais être utilisés pour construire des NamedTuples et des Dicts (#50988).
  • Lockable est désormais exporté (#54595).
  • Base.require_one_based_indexing et Base.has_offset_axes sont désormais publics (#56196).
  • Nouvelles fonctions ltruncate, rtruncate et ctruncate pour tronquer des chaînes à la largeur du texte, en tenant compte des largeurs de caractères (#55351).
  • isless (et donc cmp, tri, etc.) est désormais pris en charge pour les AbstractArrays à zéro dimension (#55772).
  • invoke prend désormais en charge le passage d'une méthode au lieu d'une signature de type (#56692).
  • invoke prend désormais en charge le passage d'une CodeInstance au lieu d'un type, ce qui peut activer certains flux de travail de plugin de compilateur (#56660).
  • Timer(f, ...) correspondra désormais à la collante de la tâche parente lors de la création de tâches de minuterie, ce qui peut être remplacé par le nouvel argument de mot-clé spawn. Cela évite le problème où les tâches collantes (c'est-à-dire @async) rendent leur parent collant (#56745).
  • Timer a maintenant des propriétés de délai et d'intervalle lisibles, et une méthode show plus descriptive (#57081).
  • sort prend désormais en charge les NTuples (#54494).
  • map!(f, A) stocke désormais les résultats dans A, comme map!(f, A, A) ou A .= f.(A) (#40632).
  • setprecision avec un argument de fonction (typiquement un bloc do) est désormais thread-safe. D'autres formes doivent être évitées, et les types doivent passer à une implémentation utilisant ScopedValue (#51362).
Changements de la bibliothèque standard
  • gcdx(0, 0) retourne désormais (0, 0, 0) au lieu de (0, 1, 0) (#40989).
  • fd retourne un RawFD au lieu d'un Int (#55080).
JuliaSyntaxHighlighting
  • Une nouvelle bibliothèque standard pour appliquer la coloration syntaxique au code Julia, cela utilise JuliaSyntax et StyledStrings pour implémenter une fonction de surlignage qui crée un AnnotatedString avec la coloration syntaxique appliquée (#51810).
LinearAlgebra
  • rank peut désormais prendre une matrice QRPivoted pour permettre l'estimation du rang via la factorisation QR (#54283).
  • Ajout d'un argument de mot-clé alg à eigen, eigen!, eigvals et eigvals! pour les types de matrices auto-adjointes (c'est-à-dire, l'union de type RealHermSymComplexHerm) qui permet de passer d'un algorithme de décomposition propre à un autre (#49355).
  • Ajout d'une version générique de la décomposition de Cholesky pivotée (non bloquée) (appelable via cholesky[!](A, RowMaximum())) (#54619).
  • Le nombre de threads BLAS par défaut respecte désormais l'affinité du processus, au lieu d'utiliser le nombre total de threads logiques disponibles sur le système (#55574).
  • Une nouvelle fonction zeroslike est ajoutée qui génère les éléments zéro pour les matrices bandées à valeurs matricielles. Les types de tableaux personnalisés peuvent spécialiser cette fonction pour retourner un résultat approprié (#55252).
  • La multiplication matricielle A * B appelle matprod_dest(A, B, T::Type) pour générer la destination. Cette fonction est désormais publique (#55537).
  • La fonction haszero(T::Type) est utilisée pour vérifier si un type T a un élément zéro unique défini comme zero(T). Cela est désormais public (#56223).
  • Une nouvelle fonction diagview est ajoutée qui retourne une vue dans une bande spécifique d'un AbstractMatrix (#56175).
Profil
  • Profile.take_heap_snapshot prend un nouvel argument de mot-clé, redact_data::Bool, qui est vrai par défaut. Lorsqu'il est défini, le contenu des objets Julia n'est pas émis dans l'instantané de tas. Cela s'applique actuellement uniquement aux chaînes (#55326).
  • Profile.print() colore désormais les modules Base/Core/Package de manière similaire à la façon dont ils apparaissent dans les traces de pile. De plus, les chemins, même s'ils sont tronqués, sont désormais cliquables dans les terminaux qui prennent en charge les liens URI pour vous amener à l'éditeur JULIA_EDITOR pour le fichier et le numéro de ligne donnés (#55335).
REPL
  • En utilisant la nouvelle fonctionnalité usings=true de la fonction names(), les complétions REPL peuvent désormais compléter les noms visibles via using (#54610).
  • Les complétions REPL peuvent désormais compléter les lignes d'entrée comme [import|using] Mod: xxx| par exemple compléter using Base.Experimental: @op à using Base.Experimental: @opaque (#54719).
  • Le REPL avertira désormais s'il détecte qu'un nom est accédé via un module qui ne le définit pas (ni n'a de sous-module qui le définit), et pour lequel le nom n'est pas public dans ce module. Par exemple, map est défini dans Base, et exécuter LinearAlgebra.map dans le REPL émettra désormais un avertissement la première fois que cela se produit (#54872).
  • Lorsque le résultat d'une entrée REPL est imprimé, la sortie est désormais tronquée à 20 Ko. Cela n'affecte pas les appels manuels à show, print, etc. (#53959).
  • Les complétions de barre oblique impriment désormais le glyphe ou l'emoji respectif à côté de chaque shortcode de barre oblique correspondant (#54800).
Test
  • Un DefaultTestSet échouant imprime désormais à l'écran le générateur de nombres aléatoires (RNG) du test échoué, pour aider à reproduire un échec stochastique qui dépend uniquement de l'état du RNG. Il est également possible de semer un ensemble de tests en passant l'argument de mot-clé rng à @testset :
  • using Test, Random
  • @testset rng=Xoshiro(0x2e026445595ed28e, 0x07bb81ac4c54926d, 0x83d7d70843e8bad6, 0xdbef927d150af80b, 0xdbf91ddf2534f850) begin
  • @test rand() == 0.559472630416976
  • end
InteractiveUtils
  • Nouvelles macros @trace_compile et @trace_dispatch pour exécuter une expression avec --trace-compile=stderr --trace-compile-timing et --trace-dispatch=stderr respectivement activées (#55915).
Dépendances externes
  • La base de données d'informations sur le terminal, terminfo, est désormais vendue par défaut, offrant une meilleure expérience utilisateur REPL lorsque terminfo n'est pas disponible sur le système. Julia peut être construite sans vendre la base de données en utilisant l'option Makefile WITH_TERMINFO=0 (#55411).
Améliorations des outils
  • Un profileur de temps réel est désormais disponible pour les utilisateurs qui ont besoin d'un profileur d'échantillonnage qui capture les tâches indépendamment de leur état de planification ou d'exécution. Ce type de profileur permet de profiler des tâches lourdes en I/O et aide à détecter les zones de forte contention dans le système (#55889).

Julia pour Mac

Gratuit
Version 1.12.7
Rédigez un avis détaillé sur Julia

Ce que les utilisateurs apprécient

Performances
Valeur
Sécurité

Ce qui mérite d’être amélioré

Mises à jour régulières
Expérience utilisateur

Les qualités de Julia

Valeur
5.0
Facilité d'utilisation
4.0
Caractéristiques
4.5
Fiabilité
4.0
Service client
4.0

Écrivez ce que vous en pensez dans notre bon vieux champ de commentaire

Politique de commentaires de MacUpdate. Nous vous encourageons vivement à laisser des commentaires ; ceux qui contiennent des propos injurieux, du harcèlement ou des attaques personnelles seront modérés.
3.5

(3 avis sur Julia)

  • Commentaires

  • Notes des utilisateurs

Iliketrash
Iliketrash
Dec 4, 2021
1.7.0
0.0
Dec 4, 2021
0.0
Version: 1.7.0
This is not a toy. It is not a language being developed by some obscure group. This is a new-ish, mainstream language that is rapidly becoming popular especially among technical professionals and students. It provides all the interactivity of Matlab and Python yet runs as fast as C. The ecosystem is already vast and building fast. It can directly access Python and compiled code from other languages such as C. It runs in a REPL or a notebook such as Jupyter and JupyterLab. Run it in Visual Studio Code as a notebook or as a conventional text file but watch for the interactive features that pop up in that text file! Check it out.
Sid_Sid
Sid_Sid
May 13, 2021
1.6.1
2.0
May 13, 2021
2.0
Version: 1.6.1
I spent a lot of time to understand how I can use. You know, I thought, I wasted my time, now I see it's working, but I am sloweeeerrrrr((((
Iliketrash
Iliketrash
Aug 5, 2020
1.5.0
0.0
Aug 5, 2020
0.0
Version: 1.5.0
Hey editor—the single review of Julia is for a different product. _This_ Julia is a programming language.
CheepnisAroma
CheepnisAroma
Jun 16, 2023
1.9.1
5.0
Jun 16, 2023
5.0
Version: 1.9.1
Sid_Sid
Sid_Sid
May 27, 2021
1.6.1
2.0
May 27, 2021
2.0
Version: 1.6.1