Julia comstack le script à chaque fois?

Le langage Julia comstack le script à chaque fois, ne pouvons-nous pas comstackr des binarys avec julia à la place? J’ai essayé un petit script helloworld avec la fonction println il a fallu 2,3 ​​secondes pour que julia affiche la sortie! Il serait préférable de pouvoir créer des binarys au lieu de comstackr à chaque fois

Mise à jour: Il y a eu des changements chez Julia depuis que j’ai posé cette question. Bien que je ne suive plus les mises à jour de julia, depuis que j’ai posé cette question et si vous cherchez quelque chose de similaire, regardez les réponses ci-dessous et les commentaires des personnes qui suivent julia.

En outre, il est bon de savoir qu’il faut maintenant environ 150 ms pour charger un script.

À l’heure actuelle, Julia JIT comstack l’intégralité de sa bibliothèque standard au démarrage. Nous sums conscients de la situation et nous travaillons actuellement à la mise en cache de la sortie JL de LLVM pour remédier à la situation, mais jusque-là, il n’y a aucun moyen de contourner le problème (sauf pour l’utilisation de REPL).

La réponse de Keno est précise, mais je peux peut-être donner un peu plus de détails sur ce qui se passe et ce que nous prévoyons de faire à ce sujet.

Actuellement, il n’y a qu’un mode JL LLVM:

  • Il existe un interpréteur très sortingvial pour certaines instructions simples de haut niveau.
  • Tous les autres codes sont insérés dans le code machine avant exécution. Le code est spécialisé de manière agressive en utilisant les types d’exécution des valeurs auxquelles le code est appliqué, propagés à travers le programme en utilisant l’inférence de type dynamic.

C’est ainsi que Julia obtient de bonnes performances même lorsque le code est écrit sans annotation de type: si vous appelez f(1) vous obtenez un code spécialisé pour Int64 , le type de 1 sur les systèmes 64 bits; Si vous appelez f(1.0) vous obtenez une nouvelle version spécialement Float64 à Float64 – le type de 1.0 sur tous les systèmes. Étant donné que chaque version compilée de la fonction sait quels types elle obtiendra, elle peut s’exécuter à la vitesse de type C. Vous pouvez le saboter en écrivant et en utilisant des fonctions “type-unstable” dont le type de retour dépend de données d’exécution, plutôt que de simples types, mais nous avons pris soin de ne pas le faire lors de la conception du langage principal et de la bibliothèque standard.

La plupart de Julia est écrite en elle-même, puis analysée, inférée par des types et insérée, de sorte que le démarrage complet du système prend de 15 à 20 secondes. Pour accélérer les choses, nous avons un système par étapes dans lequel nous sys.ji , sys.ji -le, puis mettons en cache une version sérialisée du type AST inféré dans le fichier sys.ji Ce fichier est ensuite chargé et utilisé pour exécuter le système lorsque vous exécutez julia . Aucun code LLVM ou code machine n’est mis en cache dans sys.ji , cependant, tout le jitting LLVM doit encore être effectué chaque fois que julia démarre, ce qui prend donc environ 2 secondes.

Ce délai de démarrage de 2 secondes est assez ennuyeux et nous avons un plan pour le corriger. Le plan de base est de pouvoir comstackr des programmes entiers de Julia en binarys: soit des exécutables pouvant être exécutés, soit des bibliothèques partagées .so / .dylib pouvant être appelées à partir d’autres programmes comme s’ils étaient simplement des bibliothèques C partagées. Le temps de démarrage d’un fichier binary sera comme n’importe quel autre programme C, le délai de démarrage de 2 secondes disparaîtra.

Addendum 1: Depuis novembre 2013, la version de développement de Julia n’a plus de délai de démarrage de 2 secondes car elle précomstack la bibliothèque standard en code binary. Le temps de démarrage est encore 10 fois plus lent que Python et Ruby, il y a donc place à l’amélioration, mais c’est assez rapide. L’étape suivante consistera à permettre la précompilation des packages et des scripts afin que ceux-ci puissent démarrer aussi rapidement que Julia le fait déjà.

Addendum 2: Depuis juin 2015, la version de développement de Julia comstack automatiquement de nombreux paquets, leur permettant de se charger rapidement. L’étape suivante est la compilation statique de programmes Julia entiers.