Size: a a a

2021 January 27

V(

Vλadimir (Hawthorne ... in Lisp Forever
фукамачи там прям веб-аппки пакует, ставя их внутри через розвелл
источник

V(

Vλadimir (Hawthorne ... in Lisp Forever
в 2021 наверно это самый безболезненный вариант
источник

O

O in Lisp Forever
Фукумачи конечно хорош, но пишет криво...  вот гляжу на https://github.com/Shinmera очень добротный код
источник

T

TGG in Lisp Forever
O
Фукумачи конечно хорош, но пишет криво...  вот гляжу на https://github.com/Shinmera очень добротный код
Фукумачи?
источник

O

O in Lisp Forever
пишет х. пойми как имхо
источник

V(

Vλadimir (Hawthorne ... in Lisp Forever
главная проблема что не документирует ни х.
источник

O

O in Lisp Forever
это да
источник

OV

Onyma Velesov in Lisp Forever
O
кто поделится опытом получения "бинарников" самодостаточных переложений
я пока паковал для Guix pgloader узнал о как минимум 3х проектах делающих схожие вещи
- buildapp https://github.com/xach/buildapp
- deploy https://github.com/Shinmera/deploy
- cl-launch https://github.com/fare/cl-launch
еще нашел способ получить образ через asdf:make
да еще есть  Roswell но это уже другая вселенная
Смотри в сторону sbcl и save-lisp-and-die к примеру и т. п. ...
А также (asdf:make :packet-name) и (defsystem #:packet-name
.   .....
:build-op ...
:entry-point ...
)
источник

OV

Onyma Velesov in Lisp Forever
Вот конкретный пример:
(asdf:defsystem #:devlab
 :description "Describe devlab here"
 :author "Your Name <your.name@example.com>"
 :license  "Specify license here"
 :version "0.0.1"
 :serial t
 :depends-on (:project-test :dblib :yacc :ltk :unix-opts :macro-lab)
 :components ((:file "package")
              (:file "devlab"))
 :build-operation "program-op"
 :build-pathname #+sbcl "devlab-sbcl" #+ccl "devlab-ccl" #+ecl "devlab-ecl" #+clisp "devlab-clisp"
 :entry-point "devlab:main")
your.name@example.com>"
 :license  "Specify license here"
 :version "0.0.1"
 :serial t
 :depends-on (:project-test :dblib :yacc :ltk :unix-opts :macro-lab)
 :components ((:file "package")
              (:file "devlab"))
 :build-operation "program-op"
 :build-pathname #+sbcl "devlab-sbcl" #+ccl "devlab-ccl" #+ecl "devlab-ecl" #+clisp "devlab-clisp"
 :entry-point "devlab:main")
источник

OV

Onyma Velesov in Lisp Forever
вот для файла (проверял на sbcl):
(defmacro make-file (&key (lisp-file "exe_lab.lisp") (exe-file "exe-lab-main") (toplevel 'main))
 #+sbcl `(with-external ()
     ;; (ql:quickload :swank)
     (load ,lisp-file)
     (sb-ext:save-lisp-and-die ,exe-file :executable t :toplevel ',toplevel :compression t))
 #+ccl `(with-external ()
    (load ,lisp-file)
    (ccl:save-application ,exe-file :toplevel-function ,toplevel :prepend-kernel t))
 ;; #+ecl '(with-external ()
 ;;     (load ,lisp-file)
 ;;     (c:build-program ,exe-file ))
 )
источник

OV

Onyma Velesov in Lisp Forever
#+ sbcl (defmacro with-external (() &body body)
 `(uiop/run-program:run-program (list (first (uiop/image:raw-command-line-arguments))
                                      "--core" (princ-to-string sb-int:*core-string*)
                                      "--non-interactive"
              ,@(create-arg-eval body))
                                :output *standard-output*
                                :error-output *standard-output*
                                :ignore-error-status t))
источник

OV

Onyma Velesov in Lisp Forever
with-external нужен для запуска как отдельный процесс с отдельным образом. Иначе не нужные эффекты.
источник

OV

Onyma Velesov in Lisp Forever
(defun create-arg-eval (body)
 (let ((result '()))
   (mapcar #'(lambda (x)
   (setf result (concatenate 'list result '("--eval") (list (format nil "~s" x)))))
     body)
   result))
источник

a

akater in Lisp Forever
Onyma Velesov
(defun create-arg-eval (body)
 (let ((result '()))
   (mapcar #'(lambda (x)
   (setf result (concatenate 'list result '("--eval") (list (format nil "~s" x)))))
     body)
   result))
В let обычно не пишут явный bind для nil
источник

a

akater in Lisp Forever
Onyma Velesov
(defun create-arg-eval (body)
 (let ((result '()))
   (mapcar #'(lambda (x)
   (setf result (concatenate 'list result '("--eval") (list (format nil "~s" x)))))
     body)
   result))
Также, здесь mapc уместнее чем mapcar

и вообще dolist выглядел бы лучше
источник

a

akater in Lisp Forever
и не надо шарпквотить лямбды
источник

OV

Onyma Velesov in Lisp Forever
akater
В let обычно не пишут явный bind для nil
Привычка из cpp явно инициализировать . Если я правильно понял тебя. 😊
источник

a

akater in Lisp Forever
Onyma Velesov
Привычка из cpp явно инициализировать . Если я правильно понял тебя. 😊
Чтоб не осталось недопонимания: можно (и лучше) писать

(let (result)
 stuff)
источник

OV

Onyma Velesov in Lisp Forever
😊
источник

OV

Onyma Velesov in Lisp Forever
только изучать начал, всё впереди.
источник