Account Options

  1. Sign in
The old Google Groups will be going away soon, but your browser is incompatible with the new version.
Google Groups Home
« Groups Home
Message from discussion Compilation
The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
 
From:
To:
Cc:
Followup To:
Add Cc | Add Followup-to | Edit Subject
Subject:
Validation:
For verification purposes please type the characters you see in the picture below or the numbers you hear by clicking the accessibility icon. Listen and type the numbers you hear
 
Pascal J. Bourguignon  
View profile   Translate to Translated (View Original)
 More options Nov 28 2009, 6:48 am
Newsgroups: fr.comp.lang.lisp
From: p...@informatimago.com (Pascal J. Bourguignon)
Date: Sat, 28 Nov 2009 12:48:05 +0100
Local: Sat, Nov 28 2009 6:48 am
Subject: Re: Compilation

Jogo <j...@matabio.net> writes:
>   Salut et merci pour ta r ponse rapide.

>> Cet executable contient tout l'environnement Lisp, y inclus un
>> compilateur optimisant, un interpreteur, un d bogueur, ainsi que toute
>> la biblioth que "run-time" de Common Lisp.

>   J'avais bien compris. Je cherche justement ne pas inclure dans
> l'executable l'interpr teur et le d bogueur (par exemple).
> [...]
>> Heureusement, il y a d'autres options:

>> 1- on peut, comme pour les scripts bash et autres, ne garder dans
>>    l'ex cutable que le source lisp du script.

>   Dans ce cas-l le programme n'est pas compil et il est donc trop
> facilement lisible (je ne suis pas fan de l'obfuscation).

Si, on peut aussi compiler les sources deux moments:

- au moment du lancement du script avec l'option -C de clisp, mais ce
  n'est pas ce que tu veux.

- au pr alable, on peut compiler le fichier du script, obtenir un
  .fas, et utiliser ce dernier fichier comme script, en ajoutant
  #!/usr/bin/clisp -norc sur la premi re ligne.  Les fichiers 'objet'
  de clisp, les .fas, sont en fait des fichiers texte.

----(hw.lisp)-----------------------------------------------------------

(defun hw (arguments)
  (declare (ignore arguments))
  (format t "~%Bonjour le monde !~%")
  (values))

(hw ext:*args*)

------------------------------------------------------------------------

Tu peux le compiler avec:

----(compile.lisp)------------------------------------------------------

(defparameter *clisp* "/opt/local/bin/clisp"
  "The path to the clisp implementation to use for the scripts.")

(defun compile-script (source)
  (let ((cmdname (namestring
                  (make-pathname :host      (pathname-host source)
                                 :device    (pathname-device source)
                                 :directory (pathname-directory source)
                                 :name      (pathname-name source)
                                 :type      nil
                                 :version   nil
                                        ; :defaults  nil
                                 :case      :local))))
    (multiple-value-bind (fasfile warningp failurep) (compile-file source)
      (unless failurep
        (with-open-file (script cmdname
                                :direction :output
                                :if-does-not-exist :create
                                :if-exists :supersede)
          (format script "#!~A -norc -E iso-8859-1 -Kfull~%" *clisp*)
          (with-open-file (fasl fasfile)
            (loop
               :for line = (read-line fasl nil nil)
               :while line
               :do (write-line line script))))
        (ext:shell (format nil "chmod 755 ~S" cmdname))
        (format *trace-output* "~&;; Created script ~S~%" cmdname)))))

------------------------------------------------------------------------

C/USER[4]> (load"compile.lisp")
;; Loading file compile.lisp ...
;; Loaded file compile.lisp
T
C/USER[5]> (compile-script #P"hw.lisp")
;; Compiling file /Users/pjb/src/lisp/encours/clisp/script-example/hw.lisp ...
;; Wrote file /Users/pjb/src/lisp/encours/clisp/script-example/hw.fas
0 errors, 0 warnings
;; Created script "hw"
NIL
C/USER[6]> (ext:shell "ls -l")
total 17
-rw-r--r--  1 pjb  staff  1414 Nov 28 12:27 compile.lisp
-rwxr-xr-x  1 pjb  staff  1044 Nov 28 12:28 hw
-rw-r--r--  1 pjb  staff   994 Nov 28 12:28 hw.fas
-rw-r--r--  1 pjb  staff   151 Nov 28 12:28 hw.lib
-rw-r--r--  1 pjb  staff   120 Nov 28 12:27 hw.lisp
NIL
C/USER[7]> (ext:shell "hw")

Bonjour le monde !
NIL
C/USER[8]>

>> 2- on peut utiliser une impl mentation qui g n re des ex cutables plus
>>    petits, comme CLISP. CLISP lui m me ne fait que 4 Mo environ, donc
>>    une image ex cutable qui contient CLISP entier ne fera que 4 Mo
>>    environ.

>   Quelle est la portabilit du bytecode g n r par CLisp ?

Elle est sp cifique clisp, et m me chaque version de clisp.  Et je
ne suis pas sur qu'il soit possible d'ex cuter sur MS-Windows un
byte-code compil sur Linux.  Le mieux est vraiment de distribuer des
sources.

>> Mon conseil cette tape, c'est de ne pas trop s'inqui ter pour ce
>> probl me de deployment.   Si tu prends soin de programmer en Common
>> Lisp portable (sans utiliser directement les extensions des diverses
>> impl mentations, mais en passant par des biblioth ques de portabilit
>> (par exemple, utiliser bordeaux-threads au lieu de #+sbcl sb-thread ou
>> #+clisp mp, etc)),

>   ce propos je me perd un peu dans les histoires de biblioth que.
> J'aimerais par exemple utiliser Cairo...

Pas de probl me.  Il suffit, comme en C, d'avoir des "fichier ent tes"
d finissant l'interface avec la biblioth que.

Bon, les programmeurs C l'ont un peu plus facile, car en g n ral ces
fichiers ent tes sont fournis en C avec la biblioth que.  Dans le cas
de lisp, on a une biblioth que d'interfaces de biblioth ques
pr d finis, (http://cliki.net/Library), et si tu veux utiliser une
biblioth que qui n'a pas encore d'interface lisp d fini, tu peux le
faire avec CFFI (http://cliki.net/CFFI).

Dans le cas de Cairo, un interface CFFI pour Cairo a d j t d fini:
http://cliki.net/cffi-cairo

--
__Pascal Bourguignon__


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.