LINUX.ORG.RU

Скомпилированная lisp-программа hello-world очень долго запускается (10 секунд)

 ,


1

2

компилировал командой

(sb-ext:save-lisp-and-die «test-lisp» :toplevel #'hello-world:run :executable t)

запускаю ./test-lisp

запускается 10 секунд (между моментом запуска и появлением окна)

Вопросы:
1) это нормально?
2) что оно там в это время делает?
3) можно ли сделать чтобы работало быстрее?
4) что нужно сделать чтобы работало быстрее?

★★☆

Последнее исправление: Einstok_Fair (всего исправлений: 1)

Имхо что то сильно дофига.

Тот же компилированный бинарь на ракете минимального гуевого приложения выдает окно через секунды 2-3 после запуска.

А ракетка вроде как медленнее считается.

Под минимальным я понимаю свое «покакал», сделанное just for fun и чтобы пощупать ракетку(https://github.com/nihirash/password-racket)

nihirash ★★★
()
Ответ на: комментарий от nihirash

секунды 2-3

это тоже много! Как с этим жить-то потом повседневно?

Максимум 250 миллисекунд до появления UI должно быть...

Einstok_Fair ★★☆
() автор топика
Последнее исправление: Einstok_Fair (всего исправлений: 1)

что нужно сделать чтобы работало быстрее?

использовать другой лисп ;-)

anonymous
()
Ответ на: комментарий от Virtuos86

как можно вообще пользоваться языком, у которого GC сделан на refcounting? Мне ещё батюшка говорил, что змей - искуситель, а яблоко - грех.

Einstok_Fair ★★☆
() автор топика
Ответ на: комментарий от Einstok_Fair

как можно вообще пользоваться языком, у которого GC сделан на refcounting?

Со специалистом по компиляторостроению спорить не стану.

Virtuos86 ★★★★★
()
aedeph@aedeph:~/sandbox/cl$ cat hello.lisp 
(defun main()
  (format t "hello, world!~%"))
aedeph@aedeph:~/sandbox/cl$ cat compile.lisp 
(load "hello.lisp")
(sb-ext:save-lisp-and-die "my_binary" :executable t :toplevel 'main)
aedeph@aedeph:~/sandbox/cl$ sbcl --script compile.lisp 
[undoing binding stack and other enclosing state... done]
[saving current Lisp image into my_binary:
writing 4944 bytes from the read-only space at 0x20000000
writing 3168 bytes from the static space at 0x20100000
writing 60489728 bytes from the dynamic space at 0x1000000000
done]
aedeph@aedeph:~/sandbox/cl$ time ./my_binary 
hello, world!

real    0m0.006s
user    0m0.000s
sys     0m0.004s
aedeph_ ★★
()
Ответ на: комментарий от anonymous
(require :asdf)
(asdf:operate 'asdf:load-op :cl-gtk2-gtk)

(defpackage :hello-world (:use :cl :gobject :gtk) (:export :main :run))

(in-package :hello-world)

(defun main ()
  (within-main-loop
    (let ((w (make-instance 'gtk-window :title "Hello, world"))
          (l (make-instance 'label :label "Hello, world!")))
      (container-add w l)
      (connect-signal w "destroy" (lambda (w)
                                    (declare (ignore w))
                                    (gtk-main-quit)))
      (widget-show w))))

(defun run ()
  (main)
  (join-main-thread))
Einstok_Fair ★★☆
() автор топика
Ответ на: комментарий от aedeph_

Что ты имеешь в виду? У тебя программа консольная. Да, я не делаю консольную. Это потому что мне нужна программа на Gtk.

Einstok_Fair ★★☆
() автор топика
Последнее исправление: Einstok_Fair (всего исправлений: 1)

запускается 10 секунд (между моментом запуска и появлением окна)

Попробуй запустить с

 --no-sysinit --no-userinit

1) это нормально?

Нет. Но понять последовательность твоих действий телепатически нельзя. А нормально объяснить у тебя опыта не хватает.

запускаю ./test-lisp

И молча висит 10 секунд?

antares0 ★★★★
()
Ответ на: комментарий от Einstok_Fair

Да, я не делаю консольную. Это потому что мне нуж программа на Gtk.

Само по себе GUI много ресурсов не требует. Хотя я использовал все подряд кроме этого cl-gtk2:(
А вот подземностуковые проблемы в конфигурации sbcl и компа вобще будут наглядны как-раз на консольном тесте.

antares0 ★★★★
()
Ответ на: комментарий от antares0

подземностуковые проблемы в конфигурации sbcl и компа вобще будут наглядны как-раз на консольном тесте.

не будут:

$ echo '(defun main() (format t "hello, world!~%"))' >hello.lisp
$ sbcl --load 'hello.lisp' --eval '(sb-ext:save-lisp-and-die "my_binary" :toplevel '\''main  :executable t)' --quit
$ time ./my_binary
hello, world!

real	0m0,010s
user	0m0,002s
sys	0m0,008s
Einstok_Fair ★★☆
() автор топика
Ответ на: комментарий от Einstok_Fair

cl-gtk2 какой версии?

На каком-нибудь python пробовал подобный хелловорлд запускать?

ados ★★★★★
()
Ответ на: комментарий от Einstok_Fair

cl-gtk2-gtk

Бббоже мой! Афтор забросил сие творение 100500 лет назад. Де факто стандарт это cl-cffi-gtk.

anonymous
()
Ответ на: комментарий от anonymous

Не осилил хеллоу ворлд, пользуется древними никем не поддерживаемыми библиотеками, но тем не менее говорит о некой команде, куда его должны будут взять, если он будет использовать SBCL (это команда нищебродов, да?). Походе, да! Таки тролль!

anonymous
()
Ответ на: комментарий от Einstok_Fair

Эмм, я не знаю, что за команда, но вот лично я бы человека, у которого хелловорд запускается 10 секунд, а он не знает почему, в команду бы точно не взял.

redgremlin ★★★★★
()
Ответ на: комментарий от redgremlin

Так он поэтому и хочет узнать «почему». stackoverflow driven development LOR branch, однако.

monk ★★★★★
()
Ответ на: комментарий от Bad_ptr

Где в SBCL виртуальная машина? Там же натив

dave ★★★★★
()
Ответ на: комментарий от anonymous

это не отменяет того, что я не писал, не пишу, и не буду писать на этом вашем питоне.

Кстати, почему всё-таки лисп тормозит?

Einstok_Fair ★★☆
() автор топика
Ответ на: комментарий от Einstok_Fair

Кстати, почему всё-таки лисп тормозит?

Ты неправильно используешь лисп (ц)

mimimimi
()
Ответ на: комментарий от anonymous

Тебе это уже продемонстрировали.

нет. В чём проблема - не объяснили.

Einstok_Fair ★★☆
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.