LINUX.ORG.RU

SBCL и оффтопик 7

 common-lisp, , ,


0

2

Вот захотелось мне тут, чтобы мой CL-код работал не только на GNU, но ещё и на windows. Очень желательна как можно близкая совместимость, поэтому начал с любимого SBCL. И с этой самой SBCL хуже всего пошло: попробовал разные версии, а результат один: тупо завершение с кодом 5 у 64-битных бинарников, код 57 у 32-битных (винда 64-битная). Больше никаких данных. Не важно: командуешь ему swank поднять или просто запуститься. И, честно, это немного удивило - ведь уже прошли времена когда строка windows пустовала в таблице:

http://sbcl.org/platform-table.html

Удивила и Clozure CL 1.13, хоть и не припомнить когда CCL была замечена в неприязни к оффтопику. Оказалась более разговорчивой:

  (progn (load "c:/Users/bc64/AppData/Roaming/.emacs.d/site-lisp/slime-2.31/swank-loader.lisp" :verbose t) (funcall (read-from-string "swank-loader:init") :from-emacs t) (funcall (read-from-string "swank:start-server") "c:/Users/bc64/AppData/Local/Temp/slime.1068"))

Exception on foreign stack

Exception occurred while executing foreign code
? for help
[3964] Clozure CL kernel debugger: [3964] Clozure CL kernel debugger: [3964] Clozure CL kernel debugger: %rax = 0x000000000038fda0      %r8  = 0x0000000000000080
%rcx = 0xffffffffffffffff      %r9  = 0x000000000038fda0
%rdx = 0x000000000038fcf0      %r10 = 0x000000000038fc60
%rbx = 0x00000000006a88b0      %r11 = 0x00000001300b0000
%rsp = 0x000000000038fc68      %r12 = 0x000000210000bb5d
%rbp = 0x000000000038fcc0      %r13 = 0x000000010009f11f
%rsi = 0x000000000001300b      %r14 = 0x0000000000000058
%rdi = 0x000000014002845e      %r15 = 0x0000000000000000
%rip = 0x00000001300b0000   %rflags = 0x00010202
[3964] Clozure CL kernel debugger: [3964] Clozure CL kernel debugger: 
  register number :
  register number :
  register number :
  register number :
  register number :
  register number :
  register number :
  register number :
  register number :
  register number :
  register number :
  register number :
  value for GPR 6 :
  value for GPR 6 :

Уже чуть успокоило когда без задоринок запустился игрушечный clisp 2.49 и выполнил игрушечный-же код. А потом, чуть разобравшись в настройках slime, удалось запустить и 32-битную ccl со swank-ом. У 64-битной ccl результат остаётся, как описано выше.

Как традиционно заведено на винде все запускаемые бинарники, просто скачаны из интернета.

Остаётся вопрос к опытным лисперам: есть ли жизнь с SBCL на винде?

★★★★★

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

Не троллинга ради, но. Это реально какой-то проект на CL в продакшене(!), да ещё и для давно не поддерживаемой версии Windows(!)? Интересная у вас там контора.

anonymous
()

У меня всё работает. Но я сам собираю. Впрочем и официальные бинари не должны падать.

Непонятно почему все вот они у тебя так падают. Что с виндой? Вирусы? Паленый софт? Ищи проблемы в самой винде.

Exception on foreign stack значит что у тебя левый сишный код вызывает какую-то ошибку, т.е. это не лисп-система ее вызывает. В треде, который создавался не из лиспа. Возможно у тебя во все процессы какая-нибудь блоатварь или вирусняк, подружает какую-то DLL, которая и вызывает это. Я бы начал с того что посмотрел че там во все процессы грузится.

5, если возвращается код ошибки винды, кстати, это ERROR_ACESS_DENIED. Т.е. смотрим че там с виндой в первую очередь.

Кстати CCL менее информативен чем SBCL. SBCL что пишет?

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

А, ну, и, кстати да. 7 даже официально не поддерживается уже, самим майкрософтом. Не знаю насчет лисп-систем, правда, но вполне может быть что новые версии там не запустятся, по той или иной причине.

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

Кстати CCL менее информативен чем SBCL. SBCL что пишет?

результат один: тупо завершение с кодом 5 у 64-битных бинарников, код 57 у 32-битных (винда 64-битная). Больше никаких данных.

Удивила и Clozure CL 1.13… Оказалась более разговорчивой:

Видимо не тот случай. Не знаю как выудить у SBCL больше информации. Получалось запустить windows эмулятор терминала, но в нём пусто. Вместо этого появляется окошко аля «код ошибки приложения 0xc0000000000000005» (не помню сколько нулей). Как в emacs-е - там просто код 5. У 32-битного, соответственно, 0xc0000000000000057.

В доках опции только на отключение всякой debug-инфы. Ещё там есть отключение LDB, но собран ли с ним бинарник с сайта?

ados ★★★★★
() автор топика
Последнее исправление: ados (всего исправлений: 1)
Ответ на: комментарий от lovesan

5, если возвращается код ошибки винды, кстати, это ERROR_ACESS_DENIED.

Напоминает недавнюю проблему с emacs, но тот вместо непонятных кодов 5, 57 сразу пожаловался на ограниченный доступ к конкретной директории ~/.emacs.d/server/ при запуске emacs-сервера. Довольно быстро проблема решилась лёгким гуглежом и настройкой владельца директории.

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

Делаем вид, что винды не существует. Я когда-то давно запускал приложение, которое ещё и gtk использовало, хотя как сейчас дела обстоят хз

dura4ok11
()