LINUX.ORG.RU

Портирование sbcl на dragonfly

 , ,


1

2

Привет. Испытываю потребность в сабже. Сначала подумал, что это что-то нереальное, так как с внутренностми sbcl не знаком полностью.

Потом решил попробовать, и за 1 вечер сделал работающий (почти) порт, отчасти делая по аналогии с FreeBSD, отчасти читая маны. Потом нашел, что ещё по крайней мере 1 человек озаботился этим ещё в 2006 году и сделал патч (который сейчас уже не работает).

Перед тем как сделать репу у сбя на гитхабе, решил спросить (на lisper.ru спросил, но толку было мало) о существенных вещах:

1. Какие features отвечают в sbcl за многопоточность? Помимо :sb-thread есть ещё и какой-то :sb-futex и прочее. Что это и зачем может понадобиться? (гугль молчит)

2. Более специфический вопрос. При сборке порта для freebsd и больше нигде используется :gcc-tls (что расшифровывается как thread local storage, как я понимаю). Зачем?

3. sbcl собрался вроде работающим (но пока без нитей), но с отсутствующими ловушками для исключений при работе с floating-point. Пока я читаю IEEE 754, скажите, кто знает, как в sbcl ставятся обработчики на эти исключения, и что такое os_restore_fp_control в runtime sbcl. В freebsd есть заголовочный файл fpu.h, а в dragonfly - нет, поэтому я ничего не трогал в том коде пока.

P.S. Самое забавное, что эта работа не пролила свет на устройство sbcl ну совсем никак. Прошу это учесть и не кидаться заумными словами направо и налево)

P.P.S Надеюсь, что пишу по адресу.

нет, пишешь не по адресу. Пиши в sbcl-devel. Там в добром слове не откажут. Но даже и не вздумай заикаться, что у тебя с английским плохо

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

Но даже и не вздумай заикаться, что у тебя с английским плохо

Да не, читаю, пишу и даже речь понимаю.

amphibrakhij
() автор топика

Пока я читаю IEEE 754

Да, а чё за фигня, что онм деньги требуют за pdf. Пришлось «качать бесплатно и без СМС». Представляю, если бы за ГОСТ бабло требовали. Дикость!

amphibrakhij
() автор топика

2. Более специфический вопрос. При сборке порта для freebsd и больше нигде используется :gcc-tls (что расшифровывается как thread local storage, как я понимаю). Зачем?

потому что freebsd не умеет thread local storage сама по себе, и эта хрень (gcc-tls) есть костыль. С Dragonfly тоже может понадобиться.

вот тебе дока по теме http://people.redhat.com/drepper/tls.pdf

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

ты не поверишь, но несколько лет назад большинство ГОСТов в свободном доступе найти было практически нереально. Даже скандал был, когда какой-то чувак вынес из конторы, наживавшейся на продаже гостов, архив и выложил в торренты.

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

Да, но сейчас они осознали свою ошибку и выкладывают их в pdf (правда с каким-то водяным знаком).

А всё потому, что вместо мканов было много перепечаток, как ни странно, а перепечатывать их нельзя.

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

Странно, в sbcl есть функции futex_wait и futex_wake (и в bsd коде тоже), но, похоже, они нигде не используются. Странно?

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

это я к тому, что после заявления «хочу портировать лисп» и посыла в «родовую эху» сказать «а я па ангельски ни бум-бум» - значит сразу прекратить обсуждение так и не начав :)

на ЛОРе каких только прецедентов не было... ;)

yyk ★★★★★
()

Ещё вроде в IRC на #sbcl@freenode.net часто разработчики сидят.

anonymous
()

Господа линуксоиды, покажите ваш mcontext_t, пожалуйста. Я имею в виду объявление структуры в заголовочном файле. У меня это ucontext.h

В FreeBSD там как-то особо ставятся обработчики исключений, а mcontext_t я спрашиваю для os_restore_fp_control (я думаю, это тоже может влиять).

Эта функция в частности «сбрасывает флаги исключений» (из комментариев). В linux она использует поле fpregs, которое есть и в DragonFly, но в dragonfly это массив (регистров, я так полагаю), а в linux - структура. В FreeBSD вообще что-то своё + ещё целый хидер на это.

Смысл - из всей этой кучи достать нужный регистр) Да, если fpregs тоже структура - покажите и её

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

Господа линуксоиды, покажите ваш mcontext_t, пожалуйста.

для таких целей мог бы и в виртуалку поставить

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

Да вот щас! Не, в freebsd там дергается fpstate, а в DragonFly оно называется fpregs. Во фре это массив long [64], в стрекозе - int[128].

Это оно, только поля в структуре переименовали. Ну и хидеры назвали по разному, например структуру envxmm поместили в npx.h, а не в fpu.h

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

Работы ведуться здесь, если интересно:

https://github.com/shamazmazum/sbcl-dragonfly

Ветка «dragonfly». Осталось пофиксить этот просто ужасный баг с sb-concurrency (вызывается использованием symbol-value-in-thread), при котором sbcl вылетает(!) с Invalid operation (или как-то так). Ещё поддержку x86 (тут придется на виртуалке делать) запилить.

Собрал stumpwm sbcl'ем, ещё испытал hunchentoot httperf'ом. 100 соединений в секунду (для hunchentoot больше - почти предел) выдает, при этом многопоточность работает.

В sbcl-devel молчат пока.

amphibrakhij
() автор топика
15 июня 2013 г.

Потом нашел, что ещё по крайней мере 1 человек озаботился этим ещё в 2006 году и сделал патч (который сейчас уже не работает).

Я тоже патчил: https://github.com/druga/packages/blob/master/pkgsrc/wip/sbcl/files/patch-mak... Работало на 2.x ветке, на 3.x опять что-то наломали, работать перестало. На pkgsrc-wip этот патч добавлен.

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