LINUX.ORG.RU

Велосипед починили. Теперь линуксоиды тоже могут в .Net Core через SBCL

 , , , ,


0

1

Значит так, сегодня починили баг который не давал SBCL работать с подгруженным в него .Net Core на Линуксе.

(напоминаю, что я делаю библиотеку которая позволяет дергать дотнет-кор из лиспа, и наоборот https://github.com/Lovesan/bike)

Но кроме того, я уже некоторое время собираю докер имаджи, которые содержат в себе реализацию лиспа и .Net Core SDK:

https://cloud.docker.com/u/love5an/repository/docker/love5an/dotnet-core-sdk-...

Пока поддерживаются реализации SBCL и Clozure CL(не путать с Clojure).

В основном для линукса, но также есть SBCL в контейнере Windows nanoserver.

Собираю сам, под AMD64, но исходники докерфайлов открыты, можете брать и модифицировать если надо:

https://github.com/Lovesan/dotnet-core-sdk-common-lisp-docker

Даешь лисп! Херак херак и в продакшн!

Молодец! Я прямо аж подумаю, как это можно применить в мирных целях.

Правда, как всегда в таких случаях, возникает вопрос о гетерогенной отладке. Например, если у меня либа на С#, могу ли я отлаживать C# часть в студии?

Есть ли гарантия отсутствия крахов из-за неверного FFI или что-нибудь в этом роде? Если нет, то как отлаживать?

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

два рантайма - два отладчика. число багов будет стремится функции квадрата от объёма кода. накуй ненадо. есть ф-шарп. если конечно не надо генереровать код и тут-же его эвалить в 0.00001% случаев, хвала Маккарти, слава Мински. если уж совсем нужен лишп то есть пару реализаций на дотнет, использующие динамический рантайм. но оно тоже ненадо т.к. есть ф-шарп - вполне себе полный по слава Тьюрингу язык.

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

а я про два рантайма и про сплитбрейн. три платформы: натив, лисп-рантайм, ЦЛР-рантайм. ГЦ если не умрёт то скажет «ах» и т.д. гвозди делать надо(С)

anonymous ()

Теперь линупсоиды тоже могут в .Net Core через SBCL

А зачем?

Зачем поддерживать и развивать .Net на линуксе? Хочете .Net так сидите на винде.

Явно же видно «Embrace, extend and extinguish» с ихними потугами в опен сорс. Что хорошего можно ждать от использования краденой технологии от компании с полным отсутствием морально-этических устоев?

линупсоиды

К врачу сходи.

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

А я кстати отлаживал, никакой проблемы нет. Там эксепшны маршалятся, так что в общем случае ты пользуешься лисповым отладчиком. Но! Если вдруг захотелось посмотреть, что произошло именно в дотнете, то включаешь студию, делаешь Attach To Process(она видит SBCL как Managed CoreCLR процесс в случае моей библиотеки), и спокойно отлаживаешь дотнетовый код студией.

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

Есть два опасных момента, в целом.

1) Cross-boundary exceptions и unwinding. В общем случае это не работает, поэтому дотнетные исключения я все перехватываю перед тем как вернуть управление в лисп. В лиспе соответственно тоже в коллбеках перехватываю error. Ну и соответственно, такие эксепшны я сериализую.

Но вот в лиспе есть еще всякие return-from и throw, которые в коллбеках вобщем использовать пока что крайне нежелательно(скорее всего процесс помрет). В теории, их можно было бы использовать на винде, т.к. там унифицированный механизм раскрутки стека(SEH), но пока это не работает, я копаю в эту сторону в SBCL

lovesan ★★ ()

Штуку баксов-то заплатил за починку?

А вообще в чём поинт дёргать .net из лиспа? Не проще и надёжнее запилить тот же самый лисп напрямую для .net?

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

Также, сигналы юникс иногда конфликтуют. Вот как видно, в SBCL. Но в то же время тут такой момент - в CCL например, не конфликтуют, а в целом, то что ембеддится вообще сигналы использовать не должно, т.е. это в данном случае .Net Core.

Но с .Net Core тут вот такой момент - во-первых, у него есть точки входа, где он сигналы не ставит, они не публичные просто, но это значит что он может работать без сигналов. И во-вторых, мы со Стасом тестировали, что будет если вот просто тут же после его инициализации просто восстановить сигналы SBCL назад - а ничего оказывается, работает, и не чихает.

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

В ваших краях во всём империализм мерещится? Компании меняются, меняются и страны, не надо жить пережитками прошлого. Рекомендую оценивать всё по факту. А по факту имеем патенты в свободном пользовании и лицензии mit/apache для .net core.

Даже несмотря на явные дружественные шаги Вы будете утверждать что клятi микрософтовцы все равно что-то задумали против Linux? ;)

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от Dark_SavanT

Заплатил, да.

Зачем дергать я уже отвечал, но отвечу опять.

1) Написать именно Common Lisp для дотнета - практически нереально. Нормальный CL, по крайней мере. Потому что рантайм .Net (и Java туда же кстати) категорически не подходит для лиспов - там нет ни тегированных указателей, необходимых для производительной платформы с динамической типизацией, ни non-local-exits отделенного от исключения (что позволяло бы перезапуски, return-from и прочее), там уже существующая и довольно дебильная объектная система, т.е. CLOS накостылить будет надо постараться, то же можно сказать про систему исключений. Итд итп. Еще одна важная черта лисп это в принципе компиляция в рантайме, это функции compile и compile-file. Если первую еще можно накостылить с помощью LINQ Expression trees, то вторую уже никак. И только в 3й Core вот обещают вообще собираемые GC ассембли(в Java и того нет, там класслоадер грузит это на века).

2) А зачем вообще оно нужно? Батарейки и бибилиотеки, которых в .Net Core навалом, это начиная с i18n и DateTime нормально сделанных, и заканчивая монстрами типа Asp .Net Core со всеми их фичами, начиная от вообще работы с роутингом и заканчивая ORM фреймворками.

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

Ну и где здесь «дружественные шаги»?

В линукс МС полезли по причине оттока IT специалистов на другие платформы. Смысл WSL в «используйте линукс, но все равно сидите на винде и платите нам» + ажур.

.Net Core попытка расширить рынок и не более.
Да и само использование как бе свободной реализации ворованной технологии с этической точки зрения спорно.

Что б исправить репутацию корпорации зла, которую они зарабатывали десятилетиями, нужно не слабо потрудится и одного vs code тут не хватит.

А лицензии всего-то попытка прикинутся пуськами для хомячков.

karaien ()

баг который не давал SBCL работать с подгруженным в него .Net Core на Линуксе.

Почему по Первому каналу до сих пор нет этой новости??? Ах да, наверное, потому что этот об этом баге знали два с половиной линуксиода. Не могу представить себе, зачем в реальной жизни такое может быть нужно. На поиграться конечно забавно, но по настоящему вряд ли стоит такое юзать. И .net на линуксе вообще и лисп с ним в частности.

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

Но вот в лиспе есть еще всякие return-from и throw

Наверное, коллбеки нужно оборачивать в unwind-protect, тогда есть шанс узнать, что собирается произойти плохое, и что-нибудь сделать (хотя бы выпасть в отладчик).

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

В ф шарп разве нужен клос? А макросы не нужны.

Положа руку на сердце, CLOS и в общелиспе - second class citizen :)

Но общелисповые макросы нужны везде, где их подобие можно реализовать. Это самая офигенная вещь, которая в программировании есть вообще.

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

Лавсан, это всё, конечно, хорошо, но я не думаю, что дофига линуксоидов, которым нужен какой-то .Net.

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

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

ничего в макросах нет более сложного чем в функциях.

в нормальном лисповом коде макросов не менее 50%, все эти loop, do*, def* и with* как минимум.

кроме того макросы избавляют от копипасты, пример: https://github.com/Lovesan/bike/blob/master/src/object.lisp

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

Что этот ваш JIT, GC надо почаще вызывать и во всех рантаймах одновременно всенепременно. И многопоточность вкупе с канкаренси (ад и израиль) на всех вышеперечисленных рантаймах одновременно __ярить..

anonymous ()

Вопрос к тем использует .Net Core на Линуксе.

Microsoft выпустила уже третью версию .Net Core.
Не возникают ли проблемы с использованием API из предыдущих версий .Net Core или у них API только «наращивается»?

Владимир

anonymous ()