2010-09-28 4 views
3

J'ai appris le schéma et rapidement maîtrisé beaucoup de celui-ci, puis a fait un bon projet. Littéralement m'a pris des jours pour finir. J'essaie maintenant d'apprendre le lisp commun pour avoir une idée de cela et maintenant je suis vraiment vraiment en train d'essayer d'apprendre l'asdf. Il semble être de notoriété publique comment l'utiliser avec les bibliothèques, mais je suis déconcerté. Je suppose que c'est parce que la plupart des programmes Lisp sont faits et exécutés à l'intérieur de la réplique parce que tout fonctionne bien. C'est quand j'essaye de le compiler vers un exécutable où je perds ma place.

Y a-t-il quelqu'un qui peut me donner des conseils ou me diriger vers un tutoriel? Je veux vraiment pouvoir faire un exécutable à donner aux gens sans avoir à expliquer comment installer sbcl et (le requérir) puis l'exécuter. Je veux juste apprendre à faire quelque chose de substantiel en lisp que je n'ai pas été capable de faire avec le schéma.

Je suppose que je pourrais utiliser scheme et utiliser ffi pour que les bibliothèques c fonctionnent, mais je n'ai aucune expérience avec c. Je suis juste un développeur web qui apprend le lisp pour mes raisons personnelles. Bien sûr, l'apprentissage de c et ffi peut ne pas prendre autant de temps que cela.
MerciLutte avec les bibliothèques Lisp communes

+0

Je voudrais vous aider et a écrit des réponses à vos questions sur comp.lang.lisp. Est-ce que je ne réponds pas assez vite? – Xach

+0

Non, lol. J'avais l'impression de te tenir comme une ligne de vie, j'avais peur que tu ne sois occupé et que je prenne trop de ton temps. Donc, j'ai posté ici pour voir si quelqu'un d'autre pourrait intervenir dans ce qui ne peut être sur comp.lang.lisp. – Isaiah

Répondre

7

Je veux vraiment être en mesure de faire un exécutable pour donner aux gens sans avoir à expliquer comment installer sbcl et (besoin) courir il.

Vous n'avez pas besoin d'ASDF pour produire un exécutable «autonome». La plupart des implémentations fournissent des moyens pour enregistrer une image exécutable, mais la façon de le faire (et si elle doit être fournie) n'est pas mentionnée dans la norme.

En général, vous devez charger votre code dans votre image en cours d'exécution, puis "vider" cette image.

En SBCL par exemple, vous utiliseriez sb-ext:save-lisp-and-die; CCL a ccl:save-application. Vous devrez regarder dans la documentation de votre implémentation pour savoir comment le faire.

Je n'ai pas SBCL ici en ce moment, mais cet exemple minimal devrait fonctionner (non testé):

(defun do-it() (format t "hello world~%")) 
(sb-ext:save-lisp-and-die "hello" :toplevel #'do-it :executable t) 

Ceci est un exemple de travail en utilisant CCL:

Welcome to Clozure Common Lisp Version 1.6-dev-r14287M-trunk (LinuxX8632)! 
? (defun do-it() (format t "hello world~%")) 
DO-IT 
? (ccl:save-application "hello" :toplevel-function #'do-it :prepend-kernel t) 
[[email protected] ~/build/ccl]% ./hello 
hello world 

Ces images exécutables peut-être de taille plutôt grande, à moins que votre mise en œuvre ne fournisse quelque chose comme un arbre-trembleur, mais je ne pense pas que cela devrait être un problème de nos jours.

Vous trouverez un exemple détaillé pour Clisp dans another SO question about this topic.

ASDF Documentation

+0

Cela a-t-il répondu à votre question? Je ne suis pas tout à fait sûr si j'ai bien compris, parce que vous avez dit, que tout fonctionne à partir du REPL. Si vous pouvez charger vos libs dans le REPL, ce que j'ai décrit ci-dessus est le moyen d'obtenir un exécutable autonome, que vous pouvez ensuite distribuer à vos utilisateurs. Si vous voulez qu'ils aient le REPL normal, mais avec vos bibliothèques déjà présentes dans l'image, omettez simplement les arguments suivants: toplevel (-function). – danlei

0

Ce n'est pas exactement ce que vous avez demandé, mais cela pourrait aider.

Je n'ai jamais réussi à faire fonctionner très bien l'ASDF. Quelqu'un m'a pointé au clbuild à la place, ce qui est une approche légèrement différente d'un problème similaire. Cela a très bien fonctionné pour moi jusqu'ici.

+2

clbuild utilise ASDF pour tout charger. Voulez-vous dire asdf-install? – Xach

+0

Ah, peut-être que j'ai fait. – Ken

Questions connexes