LINUX.ORG.RU

[noob] SBCL compilation

 


0

1

Привет всем!

Изучаю CL. Возник вопрос (крайне идиотский, я знаю): как с помощью SBCL скомпилить программу? Любую, например HelloWorld.

Заранее спасибо.

★★★★★

SBCL все компилирует сразу.

stassats ★★★★
()

SBCL vsegda kompiliruet. Drugie realizacii po raznomu.

Esli nuzhen fas*, to (compile-file "path/to/your_program.lisp"). Zatem mozhno zagruzit': (load "path/to/your_program")

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

С удачным выходом из^W^W^W^W Это было давно и неправда.

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

Нет. Мой аккаунт банили, и несколько IP-адресов. До меня самого пока не добрались.

bugmaker ★★★★☆
()

Хорошо, перефразирую вопрос: как получить stand-alone executable, а не байт-код для LISP-машины. Существует ли такая возможность?...

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

> Хорошо, перефразирую вопрос: как получить stand-alone executable, а не байт-код для LISP-машины.

В случае с sbcl байт-код получить в принципе невозможно, т.к. sbcl даже в REPL всё сразу компилирует.

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

>В случае с sbcl байт-код получить в принципе невозможно, т.к. sbcl даже в REPL всё сразу компилирует.

А что такое fasl?.. Это не байт-код?...

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

> А что такое fasl?.. Это не байт-код?...

Ниразу не байткод. sbcl всегда компилит в натив.

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

Наподобие объектных файлов. В cl компиляция ipmlementation-specific. Некоторое вообще в JVM компилит, и никто ему не пеняет. С sbcl, луче юз fasl+lisp env+startup script чтобы всё это запускать. Если зуд именно до ELF, попробуй gcl или ecl.

http://www.cliki.net/Common%20Lisp%20implementation

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

> Если зуд именно до ELF, попробуй gcl или ecl.

sbcl умеет делать elf:

$ file stumpwm

stumpwm: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped

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

>Наподобие объектных файлов.

Уже и сам сообразил, спасибо.

>Если зуд именно до ELF, попробуй gcl или ecl.

Уже ставлю gcl. Как у него вообще с sbcl много различий? В смысле насколько полно gcl поддерживает язык по сравнению с sbcl?...

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

> Уже ставлю gcl. Как у него вообще с sbcl много различий?

Да, sbcl динамично развивается :)

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

> И как был собран этот файл? Не расскажете?...

Я же уже говорил: save-lisp-and-die...

$ cat stumpwm/make-image.lisp

;;; SBCL
#+sbcl
(progn
  (require 'asdf)
  (require 'stumpwm))
#+sbcl
(progn
  (load "stumpwm.asd")
  (sb-ext:save-lisp-and-die "stumpwm" :toplevel (lambda ()
                                                  ;; asdf requires sbcl_home to be set, so set it to the value when the image was built
                                                  (sb-posix:putenv (format nil "SBCL_HOME=~A" #.(sb-ext:posix-getenv "SBCL_HOME")))
                                                  (stumpwm:stumpwm)
                                                  0)
                            :executable t))

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

>Я же уже говорил: save-lisp-and-die...

Спасибо. Хоть что-то теперь получилось. И каков у Вас размер бинарника?

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

> Как у него вообще с sbcl много различий?

man diff

> В смысле насколько полно gcl поддерживает язык по сравнению с sbcl?...

так себе

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

> sbcl умеет делать elf:

несомненно, только для зочем он нужен писят мех, когда можно системную лисп вм активировать и на ней прого выполнить? Это с венды страть такая, "всё своё ношу с собой"?

bugmaker ★★★★☆
()

Есть такая фишка в ядре линупс, binfmt-support называется. При ее акти
вации (в нормальных дистрах она включена) можно запускать *.fasl как
обычные линупс x-файлы. ВодЪ.

// :(

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

>несомненно, только для зочем он нужен писят мех, когда можно системную лисп вм активировать и на ней прого выполнить? Это с венды страть такая, "всё своё ношу с собой"?

Hint: Embedded devices;)

Sectoid ★★★★★
() автор топика

Сразу спрошу здесь, дабы не создавать новую тему.

Потавил gcl, скомпилировал тестовую программку (hello world). Получил .o-файлик. Вопрос: как теперь его слинковать, дабы получить нормальный ELF-executable?... Смотрел таблицу символов -- ничего вразумительного не увидел. В документации глухо. Кто сталкивался?...

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

gcc поюзать для линковки, вполне работает как умеет. У меня работает примерно так:

gcc -o test test.o -L/usr/local/lib/gcl-2.6.6/unixport -lgcl -lgclp -lm -lgmp -lbfd -lreadline -lcurses

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

Если так, то соглашусь с предыдущим оратором. sbcl и запихать всё в выполнябельное ядро.

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

боюсь, её настраивать для конкретного типа бинарников придётся. ИМХО стартовый скрипт всётаки благопристойнее.

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

>а если пострипать?

А если пострипать, то остаётся только sbcl;) Уже пробовал;)

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

>gcc поюзать для линковки, вполне работает как умеет. У меня работает примерно так: gcc -o test test.o -L/usr/local/lib/gcl-2.6.6/unixport -lgcl -lgclp -lm -lgmp -lbfd -lreadline -lcurses

Спасибо, попробую...

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

> несомненно, только для зочем он нужен писят мех, когда можно системную лисп вм активировать и на ней прого выполнить? Это с венды страть такая, "всё своё ношу с собой"?

Затем, что системный лисп может не подхватить fasl от другой версии.

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

> несомненно, только для зочем он нужен писят мех, когда можно системную лисп вм активировать и на ней прого выполнить? Это с венды страть такая, "всё своё ношу с собой"?

Если прогу надо "отдать", то одним файлом проще (чем озадачиваться бинарной fasl-совместимостью у клиента). И разделение позволит тебе экономить место на диске, но не в оперативке (в случае запуска нескольких sbcl).

yyk ★★★★★
()

До фига че то сообщений по Лиспу на форуме. Кто нибудь объяснит на фига он вообще сдался, и почему не использовать С? Или есть реальные вакансии по лиспу, и на нормальные деньги?

Тем более если с компиляцией хелловорд проблемы становятся, то на фиг ое вам такой нужен?

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

naprimer, ispo'lzuyu embedded ECL dlya CL scripting v bol'shom C++ proekte.

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

> До фига че то сообщений по Лиспу на форуме. Кто нибудь объяснит на фига он вообще сдался, и почему не использовать С?

Вопрос из серии нафига использовать эскаватор если есть тачка и лопата.

> Тем более если с компиляцией хелловорд проблемы становятся, то на фиг ое вам такой нужен?

Нет проблем. Доки надо внимательно читать. Как и везде.

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

> Затем, что системный лисп может не подхватить fasl от другой версии.

Кой ч0рт может? Несомненно не подхватит. А ещё, ELF бинарнику может непонравиться ваша версия glibc, или в каком-нибудь куте какой-нибудь непонятно зачем нужный странный символ не определён... А ещё гцц не всех версий совместим... Чё теперь, только статическая линковка и бинарнеги по писятмех?

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

> Если прогу надо "отдать", то одним файлом проще

Как минимум, патчить потом сложнее. А одним файлом всё равно редко получается, бо всяких либов и картинков и другого барахла навалом прилагается.

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

> До фига че то сообщений по Лиспу на форуме. Кто нибудь объяснит на фига он вообще сдался, и почему не использовать С?

Вопрос из серии нафига использовать эскаватор если есть тачка и лопата.

> Тем более если с компиляцией хелловорд проблемы становятся, то на фиг ое вам такой нужен?

Нет проблем. Доки надо внимательно читать. Как и везде. Darkman (*) (29.01.2008 16:11:58)

Да нашел кстати тему. http://www.linux.org.ru/view-message.jsp?msgid=2211778#2212871

Что-то негусто. В основном все пишут расширения языка. Вещь в себе какая-то. Да и на западе негусто. Видел сайты с использованием лиспа, тупой тороз, не впечатлился.

Про яху стор читал, одно исколючение походу лишь подтверждает правило.

Эта фигня (лисп) хавает кучу времени, а продуктивности ECMAScript, Perl, C, bash+awk+sed,TCL и даже С++, и проcтят меня все VB эта игрушка мозга не обладает.

МОжет IDE какое нить лучше использовать?

Порекомендуете?

И пример практичных задач лиспом лучше чем перлом например решаемых может подскажете?

Ато чтото мне сдается что вся эта шарашка абельсонов, сусманов, грехема и всего лисп коммунити иже с ним врут безбожно :)

Есть какое нибудь статистически/логически/экономически достоверное доказательство продутивности писанины на Лиспе?

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

> Кой ч0рт может? Несомненно не подхватит. А ещё, ELF бинарнику может непонравиться ваша версия glibc, или в каком-нибудь куте какой-нибудь непонятно зачем нужный странный символ не определён...

Я сталкивался с несовместимостью fasl в _минорных_ релизах SBCL (номера версий точно не скажу). GlibC себе такого не позволяет. Плюс в том же Дебиане в отличии от Генты совершенно древний sbcl, прикажете пользователю обновить ?

> А ещё гцц не всех версий совместим...

Переход g++ 3.x -> 4.x, ABI несовместим. Пришлось половину Генты пересобирать. А если продукт closed source ?

> Чё теперь, только статическая линковка и бинарнеги по писятмех?

Многие коммерческие проги таскают всё что не glibc с собой и загружают через LD_LIBRARY_PATH.

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

> Что-то негусто. В основном все пишут расширения языка. Вещь в себе какая-то. Да и на западе негусто.

Многие не афишируют - "Powered by Alien Technology" :-)

> Эта фигня (лисп) хавает кучу времени, а продуктивности ECMAScript, Perl, C, bash+awk+sed,TCL и даже С++, и проcтят меня все VB эта игрушка мозга не обладает.

Эээээ... можно конкретизировать, что означает: "а продуктивности ... не обладает." Продуктивностью в чём ?

> МОжет IDE какое нить лучше использовать?

Emacs вполне себе IDE.

> И пример практичных задач лиспом лучше чем перлом например решаемых может подскажете?

Любая система AI или логического вывода.

> Есть какое нибудь статистически/логически/экономически достоверное доказательство продутивности писанины на Лиспе?

http://franz.com/success/all_customer_apps.lhtml

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

> Я сталкивался с несовместимостью fasl в _минорных_ релизах SBCL (номера версий точно не скажу).

Я с этим при каждом обновлении сталкиваюсь. So what? Не чаще чем для прог на других наречиях, к слову.

> Плюс в том же Дебиане в отличии от Генты совершенно древний sbcl, прикажете пользователю обновить ?

Несомненно. Если никто не считает зазорным говорить к примеру, что "это прого пашет с GTK+ версий от 2.4.6 и выше", то почему это недопустимо для других компонент? Для

> Переход g++ 3.x -> 4.x, ABI несовместим. Пришлось половину Генты пересобирать. А если продукт closed source ?

Тогда не пересобёрешь. Informix 9.4 тестировался на РХ 7.3, и если на чём-то другом будеш пущать, как минимум техсуппорт обламает. А фактически, оно и не запустится, будет про версию глибц хныкать.

> Многие коммерческие проги таскают всё что не glibc с собой и загружают через LD_LIBRARY_PATH.

Хм, это верно. Но ведь не статически слинкованы с размером бинаря писятмех? Я вобщем так и предлагал выше, runtime принеобходимости таскать, для коммерческих прог. А для остальных вопрос о создании именно ELF отпадает автоматически.

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