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

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

★★

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

я делаю библиотеку которая позволяет дергать дотнет-кор из лиспа

Остаётся один вопрос: зачем?

rupert ★★★★★
()

Фанат пинки детектед

Deleted
()

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

Правда, как всегда в таких случаях, возникает вопрос о гетерогенной отладке. Например, если у меня либа на С#, могу ли я отлаживать 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 ★★
() автор топика
Ответ на: комментарий от anonymous

Нейтив платформы между .Net и CL нету. CL напрямую дергает дотнет кор.

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 ★★★★★
()
Ответ на: комментарий от Alve

На поиграться конечно забавно, но по настоящему вряд ли стоит такое юзать. И Unix вообще и Linux с ним в частности.

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

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

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

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

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

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

Если подходить с позиции «мне нужно», то ИМХНО меня c github интересует ну штук 100 проектов.
Но из этого ни чего не следует.

Владимир

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Будь мужиком, добавь подгрузку JVM, V8 и GHC в тот же самый SBCL процесс. А то всего два JIT пока - маловато будет.

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

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

anonymous
()

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

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

Владимир

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

Я же не говорю тебе как писать код. Как говорится, каждый дурак по-своему с ума сходит. Пиши как нравится. Стандартно не нужны почти. Сухой факт.

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