LINUX.ORG.RU

Lisp Asp .Net MVC

 , , , ,


2

7

C# официально устарел и отправляется в помойку, т.к. теперь веб-фреймворк Asp .Net Core MVC доступен из Common Lisp.

Можно так писать:

;; Asp.Net MVC controller
(define-dotnet-callable-class (example-controller
                               (:base-type . ControllerBase))
    ()
  ;; Echo the 'Hello' message to client
  (:method index :string ((name :string))
    (format nil "Hello~:[~;, ~:*~a~]!" name)))

https://github.com/Lovesan/bike/blob/master/examples/aspnet-mvc.lisp

На линуксе работает на SBCL и на CCL, проверял.

Конечно, нужно немного дополнительных телодвижений, т.к. .NET прокси-классы генерируются в рантайме, и поэтому их надо руками указывать в качестве контроллеров, но это в принципе все при желании автоматизируется макросами и другими средствами метапрограммирования.

Также, пока bike не поддерживает аттрибуты, но это наверное добавлю позже.

Ну и с extension-методами пока не придумал что делать, пока их классы надо руками писать.

★★★
Ответ на: комментарий от monk

Современное железо и так отлично справляется со всеми вещами которые были в лисп-машинах.

Например тегированные указатели - по сути полное 64-битное адресное пространство нигде не используется(в среднем что-то типа 48 бит), это оставляет некоторое количество бит для тега, плюс, учитывая например модель адресации x86 (base + index * scale + displacement), к массивам можно обращаться даже не стрипая тег того же fixnum.

Куча таких вещей, многие из них зашиты в исходниках SBCL.

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

C# официально устарел и отправляется в помойку

А зачем ты тогда к нему подключаешься? Для доступа к большому количеству полезных библиотек? Только вот большое количество полезных библиотек появилось потому что это C#, а не убогий лишп.

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

Лишп настолько зашквар

Да ты ещё и быдлана-типо-малолетку включаешь вместо примеров. Всё с тобой ясно. Передай дибилам,кто там за Вайланд топит,пусть хоть новость запилят по Wlroots. Ну да это же не ресурс для новостей, тут такие лошпеды как ты живут. По вопросу я знал, что ты не сможешь даже вякнуть, но проигнорировать Анона не смог. Чмо.

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

C# официально устарел и отправляется в помойку, т.к. теперь веб-фреймворк Asp .Net Core MVC

А linux тут при чём, вантузятник?

.NET is a free, cross-platform, open source developer platform for building many different types of applications.

Вона чо пишут, не могут же врать так внаглую ☺️.

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

можно скажем взять только Kestrel(довольно затюненный веб-сервер, если что), и написать адаптеры для лисповых веб-фреймворков для него.

А можно просто взять C#, а лишп вместе с адаптерами вернуть обратно на помойку.

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

Зачем брать C#, в котором нет ни макросов, ни нормального ООП, ни расширяемости, ни интерактивной разработки, ничего из того что есть в лиспе?

Чтобы убиться об стенку от безысходности?

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

Расходы небольшие(особенно если не гонять большие строки туда-сюда), зависит от конкретной ситуации.

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

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

Для тех, которые ничего кроме того убожества, что в C++ и Java итп не видели, да, нормального ООП не существует.

Но ты не расстраивайся, это обычный Blub Paradox у тебя. Развивайся, читай книги, расширяй кругозор.

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

видел я убожество от алана кея. сорта одной и той же субстанции.

и шизофункциональщина туда же.

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

макросов

Нужны только для write-only говнокода.

нормального ООП

Там нормальный ООП.

ни расширяемости, ни интерактивной разработки, ничего из того что есть в лиспе?

Ненужная хрень.

Чтобы убиться об стенку от безысходности?

Так кончают лишперы. Думаешь почему их так мало?

ox55ff ★★★★★
()

На линуксе работает на SBCL и на CCL, проверял.

Ваш велосипед без сидения как не работал под линукс так и не работает:

* (ql:quickload :bike)
To load "bike":
  Load 1 ASDF system:
    bike
; Loading "bike"
..................................................
...........................................
debugger invoked on a FLOATING-POINT-INVALID-OPERATION in thread
#<THREAD tid=12279 "main thread" RUNNING {10013E8113}>:
  arithmetic error FLOATING-POINT-INVALID-OPERATION signalled

Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [TRY-RECOMPILING              ] Recompile assemblies and try loading it again
  1: [RETRY                        ] Retry
                                     loading FASL for #<CL-SOURCE-FILE "bike" "src" "assemblies">.
  2: [ACCEPT                       ] Continue, treating
                                     loading FASL for #<CL-SOURCE-FILE "bike" "src" "assemblies">
                                     as having been successful.
  3:                                 Retry ASDF operation.
  4: [CLEAR-CONFIGURATION-AND-RETRY] Retry ASDF operation after resetting the
                                     configuration.
  5:                                 Retry ASDF operation.
  6:                                 Retry ASDF operation after resetting the
                                     configuration.
  7: [ABORT                        ] Give up on "bike"
  8: [REGISTER-LOCAL-PROJECTS      ] Register local projects and try again.
  9:                                 Exit debugger, returning to top level.

("bogus stack frame")

Зачем обманываете?

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

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

Вокруг меня половина народу только тем и занимается, что json’ы туда-сюда перекладывает. Соответственно, тест:

  1. Прочитать/создать json на .Net (типа мы взяли информацию с помощью SDK для доступа к AWS).
  2. Сделать простейшее действие на лиспе (мы использовали данные из прошлого этапа и приняли решение создать ещё больше виртуалок).
  3. Сформировать json на .Net (решение из этапа №2 офромлено в виде REST API вызовов для внешних сервисов).

был бы очень показателен.

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

Нужны только для write-only говнокода.

Нет конечно. Или функции/методы тоже нужны только для write-only говнокода? А макросы это просто функции выполняющиеся при компиляции. Хотя, если ты пишешь write-only говнокод, то для тебя - да.

Там нормальный ООП.

Нет, конечно.

Ненужная хрень.

Еще один пациент с Blub Paradox. Развивайся, читай книги, расширяй кругозор.

Так кончают лишперы. Думаешь почему их так мало?

По статистике, чаще всего - жопоскриптеры, и прочие недоучки.

Вобщем, учи лисп, а то тебя нейросети скоро заменят.

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

Вокруг меня половина народу только тем и занимается, что json’ы туда-сюда перекладывает.

В Asp .Net джейсонами ты вручную не ворочаешь, это у тебя скрыто за слоями типа Model Binding, сериализаторами типа System.Text.Json, итп, поэтому естественно, такой тест не покажет ничего от слова совсем.

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

Алан Кей и функциональщина тут вообще не при чем. Говорю, развивайся, читай книги, расширяй кругозор, а то так недоучкой и помрешь.

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

Лавсанчик, ну вы же серите, снова. Любой желающий может убедиться в этом выполнив в консоли:

curl -O https://beta.quicklisp.org/quicklisp.lisp
sbcl --load quicklisp.lisp
(quicklisp-quickstart:install)
#выбрать пункт 0 [LOAD-SETUP]
(ql:quickload :bike)

Разве это не ввод в заблуждение пользователей форума со стороны Лавсана и не нарушение правил?

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

Только вот большое количество полезных библиотек появилось потому что это C#

Оно появилось потому-что MS. И сейчас и навеки там темный властелин MS. И всякие пытаются это заюзать, не понимая, что натягивают свою жп на длинный MS-вский, постанывая от удовольствия. Хотя адептам лишпа простительно, за ними давно замечена небинарность и алтернативность.

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

Конечно все установлено. Даже сам по себе BikeInterop.dll собирается дотнетом без проблем. Проблема в том что Лавсановское поделие не может с ним работать. И не сможет, Лавсанчик дупля не отбивает ни в деталях такого поведения ни что с этим делать.

Причина там понятна любому архитектору, но Лавсану гештальт погнет если ему рассказать.

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

Вы реально советуете такой грязный хак тащить в прод? Это профнепригодность.

Лавсан, ваше поделие не будет нормально работать под линукс. Ни в 6м, ни в 7м, ни в 8м дотнетах. И во всех следующих тоже. Если бы у вас было чуть больше мозга вы бы поняли что зря потратили 4 года на разработку байка, в который не влезает сидение.

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

Видимо, нужно накинуть контекста тк иначе Лавсан так и будет блуждать в потемках.

В 6м дотнете в System.Runtime.InteropServices добавили возможность работы с Posix сигналами. Как результат, CLR в линукс начал пробрасывать сигналы типа SIGFPE при некорректных арифметических операциях в вызывающую его поделку на Lisp.

Другими словами, смуглый улыбчивый Раджеш из Майкрософт начал заливать Лавсану в штаны SIGFPE. Напишите «Спасибо Раджеш!» и он одарит Лавсана другими прекрасными дарами.

Это было общее описание проблемы. Возвращаясь к проблеме установки bike - на этапе компиляции дергается сборщик мусора в котором где-то и происходит SIGFPE. Т.е. чтобы bike установился и заработал нужно всего-лишь отрефакторить сборщик мусора из coreclr который индусы оформили в виде монолита из Припяти на 52К строк кода.

И что мы видим, вместо того чтобы разобраться и понять что к этому байку со штырьком не прикуртить сиденье, Лавсан предлагает всем желающим использовать смазку в виде отключения ловушек ошибок работы с арифметическими операциями.

@lovesan - поделитесь с нами, каково это 4 года пытаться прикрутить lisp к .Net чтобы заполучить доступ хоть как какой-то развитой экосистеме и в итоге получить эталонное нинужно?

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

У дотнета лицензия MIT.

И что? Много там сообщество накодило? Без MS не будет никакого дотнета, ни открытого, ни закрытого. Как MS умудряется подсекать подсевших на крючок, заброшенный сообществу, тебе предстоит еще узнать.

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

И в чём разница с зависимостью от других корпораций?

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

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

А если гугль на андроед забьёт, что будет? IBM, вот, иксы из линукса выпихивает, им так удобнее. И выпихнет же, если другая корпорация не вступится. Линукс — это корпоративная операционная система. Такие дела.

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

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

Вот, например, человек пофиксил какую-то свою багу:
https://github.com/dotnet/runtime/issues/76257
https://github.com/dotnet/runtime/pull/76424

Почему нет багрепортов от тебя? Знаешь что бесполезно?

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

Так это не уровень Лавсана, он же виндовый миддл-дотнетчик чей максимум - пытаться решить эту проблему на реддите.

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

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

Это не совсем «бага», и не какая-то ошибка, как некоторые недалекие дурачки тут думают. Это фича.

Дело в том, что в отличие от говноязыков, типа C#, или Си, и тому подобных, реализации Common Lisp отлавливают все аппаратые исключения операций с плавающей точкой, в том числе например операции с NaN. Классы condition(исключений CL), которые в этом случае сигнализируются, даже прописаны в стандарте CL, типа вот для операций с NaN: http://l1sp.org/cl/floating-point-invalid-operation

Говноязыки же, мало что не отлавливают, но часто вообще не могут работать со включенными аппаратными исключениями для флоатов. По первой ссылке кстати там первый же коммент описывает этот момент:

.NET runtime and libraries are not compatible with enabled floating point exceptions. If you need floating point exceptions enabled for your C/C++ library, you need to disable around them around the calls to .NET runtime.

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

В примере с WPF на винде, кстати, overflow возникает при рендеринге. Если бы лисп не включал обработку аппаратных ошибок, дотнету и нижележащим сишным либам было бы пофигу, сколько у них там NaN вместо чисел, и какие еще там говна с флоатами случаются.

На линупсах ситуация осложняется тем, что в нем, вместо нормально сделанной и продуманной вещи типа виндового SEH, есть доисторическое кривое worse-is-better говно мамонта под названием «сигналы». Которые говно просто by design, и не предназначены для современных многопоточных приложений, тем более с несколькими рантаймами в одном процессе. И таким образом даже если ошибка возникает в треде .NET, где-то в бэкграунде, тот же например SBCL его все-равно отлавливают. Это не проблема SBCL, это проблема сигналов.

Решение проблемы, самое простое - это отрубить в лиспе аппаратные исключения флоатов, а именно те виды, которые вызывают проблемы. Все ведущие реализации CL это позволяют. Или же вообще использовать что-то типа _fpreset на винде чтобы уж точно выключить их все, в контексте треда, кроме тех что нужны тому же .NET (там деление на ноль, по-моему, отлавливается)

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

Это нерабочее студенческое поделие, которое проблему никак не решает(сделанное к тому же на setjmp/longjmp - удачи попробовать это использовать где-то кроме хелловорлдов на сишечке и таким образом сломать к-либо рантайм высокоуровневого языка).

SEH должен быть встроен в ядро операционной системы, и при этом оттуда же должны быть выкинуты сигналы.

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