Question

1) Quelle est la méthode appropriée pour faire une image dans ccl? Ou quelle est la différence exacte entre:

(compile-file "foo.lisp") et (progn (load "foo.lisp") (save-application "foo"))?

2) Est-il possible de charger plusieurs images (ligne de commande preféré)?

Était-ce utile?

La solution

Le compilateur de fichier dans les systèmes Common Lisp crée une représentation de la source originale dans une sorte de langage machine (en fonction du processeur cible) ou pour une machine virtuelle (par exemple dans CLISP). Ce fichier compilé peut alors être chargé dans un système Lisp en cours d'exécution avec la fonction LOAD et crée les définitions de la source (fonctions, classes, variables, ...) et autre code exécute dans le fichier.

On peut charger des fichiers source directement (également en utilisant la fonction LOAD). Si le Lisp utilise un compilateur même pour les formes de chargement, l'avantage du compilateur de fichier est:

  • chargement du code compilé devrait être légèrement plus rapide
  • une erreur de vérification au moment de la compilation
  • peut-être plus agressif avec la compilation du code plus rapide lors de l'exécution
  • code peut être plus petit (en fonction)

Enregistrement d'une image est indépendante. L'image est une image mémoire d'un Lisp en cours d'exécution. Mais généralement pas tous les états peuvent être sous-évaluées en fonction du système Lisp. Les candidats des choses qui ne peuvent pas être sauvegardés sur une image:. Connexions de fichiers, connexions réseau, les fenêtres ouvertes, ... Donc, ces choses peuvent avoir besoin d'être rouverte lorsqu'une image est démarrée

Si vous voulez commencer une des applications Lisp a plusieurs options:

  • charger tout le code source au démarrage
  • charger tout le code compilé au démarrage
  • charger une image avec tout le code inclus

Ce dernier est probablement le plus rapide. Pour de nombreuses raisons maintenant charger le code compilé au démarrage est également assez rapide, surtout si le démarrage a lieu qu'une seule fois dans un certain temps.

Regardons à votre question.

(compile-file "foo.lisp")

Au-dessus compile un seul fichier à un fichier compilé (fichier FASL, « charge rapide »). L'effet de la compilation est que certaines informations ont été enregistrées dans le système Lisp, mais les définitions du fichier ne sont pas disponibles. Vous devez charger le fichier compilé.

(progn (load "foo.lisp") (save-application "foo"))

Au-dessus de charge d'abord le fichier. Notez qu'un Lisp avec un compilateur incrémental peut compiler une partie ou toutes les déclarations dans ce fichier (CCL et SBCL le font). SAVE-application est une fonction spécifique du CCA, qui décharge l'état Lisp complet (connexions de fichiers moins, ...) et crée une application qui peut alors être démarré.

Si vous voulez créer des applications Lisp qui commencent comme d'autres applications, SAVE-application est la voie à suivre.

Si plusieurs images peuvent être chargées dépend du système. Dans le CCA vous ne pouvez pas. Sur une machine Lisp on pourrait charger une image de base, puis plusieurs images supplémentaires au-dessus de cela.

Autres conseils

compile-file fait ce qu'il dit qu'il fait: Il compile un fichier source en code natif et stocke le résultat dans un autre fichier. Les fichiers compilés avec compile-file peuvent être chargés avec la fonction load. La compilation est simplement une optimisation, donc l'effet est très similaire au chargement du fichier source directement.

En revanche, stocke des images de base l'état complet de l'environnement Lisp, y compris le tas Lisp (avec tout le code chargé et données) ainsi que l'état de l'exécution, ce qui explique pourquoi essayer pour charger plusieurs images de base en une seule instance Lisp ne fait pas de sens. Comme cela est décrit dans le manuel, vous pouvez enregistrer une image de base en utilisant (ccl:save-application "image_name")image_name est le nom du fichier image que vous voulez créer. Une image de base ne peut être chargé par le démarrage d'une nouvelle instance Clozure CL et fournissant le fichier d'image avec l'option de ligne de commande -I.

En général, si vous écrivez un logiciel composé de plusieurs fichiers source, vous habituellement ne veux vraiment pas compiler et d'autres choses de charge manuellement. Au lieu de cela, envisager la création d'un fichier de définition système le chargement de votre logiciel avec ASDF.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top