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-методами пока не придумал что делать, пока их классы надо руками писать.

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

Не проверял.
После прочтения поста подумал - «попробую поискать».
Наверное имеется и не «кривое» решение этой проблемы.

Может быть на форуме разработчиков kernel Linux помогут.
В исходниках ReactOS можно поискать ...

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

Наверное имеется и не «кривое» решение этой проблемы.

Не имеется.

Полноценное решение проблемы возможно только при соблюдении двух условий:

  1. Рантаймы говноязыков начинают отлавливать и корректно обрабатывать аппаратные исключения, возникающие при работе с числами с плавающей точкой.

  2. Сигналы вырезаются из операционной системы как класс, и заменяются на SEH-подобную систему.

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

Поиск «seh linux kernel c++ runtime», ".Net seh linux kernel c++ runtime", ...

SEH Equivalent in Linux or How do I handle OS Signals (like SIGSERV) and yet keep continuing

As you said, you could catch SIGSEGV via signal() or sigaction().
Continuing is not really advisable, as this would be undefined behaviour, i.e. 
your memory might be corrupted, which might let other test cases fail as well (or even terminate your whole process prematurely).
Would it be possible to run the test cases one by one as a sub process?
This way, you could check the exit status and will detect if it terminated cleanly, with an error or due to a signal.

Running the test cases in a separate thread will have the same 
problem: you do not have memory protection between your test 
cases and the code driving the test cases.

The suggested approach would be:
fork() to create a child process.
In the child process, you execve() your test case.

This could be the same binary with different arguments to select a certain test case).

In the parent process, you call waitpid() to wait for the termination of the test case. You received the pid from the 
fork() call in the parent process.

Evaluate the sub-process status with the WIFEXITED, WEXITSTATUS, WIFSIGNALED, WTERMSIG macros.

If you need timeouts for your test cases, you can also install a handler for SIGCHLD.

If the timeout elapses first, kill() the child process.
Be aware that you may only call certain functions from signal handlers.

Just a further note: execve() is not really required.
You can just proceed and call your specified testcase directly.
Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 4)
Ответ на: комментарий от lovesan

Вы можете ставить клоунов под каждым моим сообщением, объективная реальность от этого не поменяется: CLR начал честно выдавать вам SIGFPE по POSIX и вы тут же обгадили портки в лиспе на ANSI стандарте. Это называется попасть в просак.

И это не говноязыки, это разница в стандартах, которая в силу вашего скудоумия от вас ускользает. Я писал об это ранее: попытки полезь из ANSI-спек сущности в IEEE-спек закончатся плачевно, т.к. они - конкуренты. Так сложилось исторически. Вот только IEEE победил, а ненужным говном оказался ANSI, достаточно выглянуть из норки и оглядеться.

Это не проблема SBCL, это проблема сигналов.

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

Ах, да вы еще не в курсе что виртуальная машина «под капотом» CLR поддерживает только один тип чисел с плавающей запятой — double (64-разрядный). А всякие 32-битные числа это просто формат хранения данных что в итоге при дергании из ANSI-сущности дает периодически - двойное округление и ваши вычисления на лиспе идут по бороде.

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

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

Ты блин ещё скажи, что нужен нормальный IPC со стороны системы, а не поделка на сигналах, да.

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

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

Проблема не в стандарте, а в SBCL. С Java/JNI он тоже не дружит. В то время как реализация ANSI CL под названием MKCL отлично и стабильно работает с JNI.

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

Откуда ты это старье дохлое откапываешь? MKCL давно помер. ECL(наследник его) я не проверял, но он в любом случае тормозной, и не поддерживает много фич, которые есть в других реализациях именно по причине урезанности из-за компиляции через сишечку. И с ANSI стандартом там не все хорошо. В SBCL никакой проблемы ессно нет(у CCL такое же поведение), это наиболее правильно сделанная реализация из опенсорсных. С джава это все не дружит потому что джаба вообще не рассчитана на интероперабельность в одном процессе в отличие от дотнета. Ты в жабе и голанг особо не засунешь.

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

Вы в своем упорстве дошли до того что отрицаете POSIX - базу Unix.

А в чём он неправ? POSIX – ссаное говно какое поискать ещё. Сигналы – полная залупа, никто в здравом уме этим говном напрямую не пользуется, все адекватные люди давно перешли на signalfd() или kqueue().

POSIX даже базой UNIX не является, потому что появился когда UNIX было лет 25 уже. POSIX – это просто текстовое описание сборной помойки десятка проприетарных UNIX плюс в последствие Linux, его никто не проектировал специально.

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

А в чём он неправ?

Он неправ в том что одновременно рассказывает что косяк описанный выше это фича и при этом вопрошает на реддите как пофиксить этот баг. Неправ в том что называет все говноязыками и при этом четвертый год лезет через CLR туда, пытаясь поиметь хоть какую-то экосистему. Не прав в том что с апломбом рассказывает что вокруг 90% - идиоты не замечая что сам входит в эти 90% (как и я собсно, я - Обезъян и не претендую). И тд и тп.

Если POSIX так плох, то можно не лезть в линукс, окуклиться на винде и не вводить людей в заблуждение что велосипед работает под Линуксом. А кричать что все говно и упорно туда лезть это лицемерие и говноедство какое-то.

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

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

trivial-gray-streams про него не знает:

;;; MKCL Compiler Read Error: in file #P"/home/monk/quicklisp/dists/quicklisp/software/trivial-gray-streams-20210124-git/package.lisp", near position 2041,
;;; MKCL Compiler Read Error: While reading a lisp token, dots appeared illegally.
;;; Error: in file /home/monk/quicklisp/dists/quicklisp/software/trivial-gray-streams-20210124-git/package.lisp, end position 561,

В файле

#-(or sbcl allegro cmu clisp openmcl lispworks ecl clasp abcl mocl genera mezzano) ...

Поэтому bike не компилируется.

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

смуглый улыбчивый Раджеш из Майкрософт начал заливать Лавсану в штаны SIGFPE

индусы оформили в виде монолита из Припяти на 52К строк кода

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

Огонь.

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

Он неправ в том что одновременно рассказывает что косяк описанный выше это фича и при этом вопрошает на реддите как пофиксить этот баг. Неправ в том что называет все говноязыками

Болото надо ворошить, а языки - говно по определению. Можно добавить «как и задачи». Через год ИИ будет править бал.

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

Если POSIX так плох, то можно не лезть в линукс

што? Если POSIX говно, его надо выкинуть на мороз и сделать лучший API. Что сейчас в принципе медленно но верно происходит.

как и я собсно, я - Обезъян и не претендую

А я думал, Обезян – это твоя фамилия. Мало ли, армянин.

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

Обезьяна, думающая о говноедстве! На моём ЛОРе! НЕТ ПУТИ!

Не, чувак. Говно кто-то должен разгребать, а не молча им обмазываться. Иначе мы так никуда с мёртвой точки и не сдвинемся.

И я с ним согласен в данном случае: SIGFPE – полная залупа, как и лялексоюниксовые сигналы в принципе. Их надо выжигать калёным железом. Для ситуаций типа деления на ноль нужны нормальные исключения типа SEH, а не вот эта вот ссанина.

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

што? Если POSIX говно, его надо выкинуть на мороз и сделать лучший API.

Я не спорю о качестве POSIX стандарта, но вы уводите обсуждение в сторону. Стандартизуют его в рамках IEEE, как и работу с числами с плавающей точкой. Поэтому и с тем и с другим у ANSI-based Lisp проблемы были, есть и будут. И отказ от POSIX не исправит ситуацию, нужно выкидывать весь IEEE и заменять его на ANSI, что в нашей ветке реальности уже не произойдет.

Что сейчас в принципе медленно но верно происходит

Тот же X11 медленно, но верно выкидывают на мороз уже лет…10?

А я думал, Обезян – это твоя фамилия. Мало ли, армянин.

Это гендер. Из приматов мы.

Не, чувак. Говно кто-то должен разгребать, а не молча им обмазываться. Иначе мы так никуда с мёртвой точки и не сдвинемся.

Разгребать говно. На ЛОРе.

И я с ним согласен в данном случае

Мир не идеален и лисп в этот неидеальный мир не вписывается. Он хорош пока используется сам по себе. Но любое взаимодействие с IEEE сразу начинает течь по штанине.

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

Чем тебе поможет SEH если некий засланец засунул 2 ВМ в 1 процесс. Здесь только лоботомия. А сигналы они для того чтобы подавать сигнал а не строить на нём логику работы и то что сделала индусня с CLR за это убивать из BFG без респауна (это про NaN & SIGFPE). Посикс тут непричём. Жаль байк..

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

Я не спорю о качестве POSIX стандарта, но вы уводите обсуждение в сторону.

Нет, не увожу.

Стандартизуют его в рамках IEEE, как и работу с числами с плавающей точкой.

ШТО? IEEE – это организация, сборище ботаников. Они могут что угодно настандартизировать, включая полное говно. Стандарты – это просто бумажка с описанием. Наличие стандарта ни разу ничего не говорит о том, что в нём описано. Стандарты на UNIX были актуальны, когда этих юниксов был с десяток, то есть во времена глубокой давности, когда у моего дедушки ещё стоял член и он мог насадить на него мою бабушку. Сейчас юниксы все сдохли, есть только лялекс и пара бздей. Поэтому эти стандарты никому нахрен не упали.

Собственно, IEEE754 – тоже днище и срань. Есть гораздо более пристойные форматы чисел – например, unum.

Тот же X11 медленно, но верно выкидывают на мороз уже лет…10?

X11 выкидывают так долго, потому что его пытаются заменить на полную говнину в виде Wayland, и тот медленно превращается в такие же иксы. Это всё можно было бы сделать гораздо быстрее, если бы вялендовские не были такими кретинами и не пытались разрабатывать свои стандарты и протоколы комитетом. Но т.к. там заседают транссексуальные долбодятлы (без шуток, в freedesktop чуть ли не половина трансы), получается вот такое говно.

Но любое взаимодействие с IEEE сразу начинает течь по штанине.

Отлично. IEEE может идти в лес и жрать медвежье говно дружным строем.

Мир не идеален и лисп в этот неидеальный мир не вписывается.

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

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

Чем тебе поможет SEH если некий засланец засунул 2 ВМ в 1 процесс.

Да хоть 10 VM. Если лавсану хочется долбиться в такой позе, я его не осуждаю. Глядишь, что-нибудь годное сделает.

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

ШТО? IEEE – это организация, сборище ботаников. Они могут что угодно настандартизировать, включая полное говно.

Это институт инженеров по электротехнике и электронике. Большинство современных электрических устройств включая компы работает по стандартам разработанным ими, а не программистами, т.к. инженер > программист.

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

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

Это институт инженеров по электротехнике и электронике. Большинство современных электрических устройств включая компы работает по стандартам разработанным ими, а не программистами, т.к. инженер > программист.

Ага, ты ещё скажи что UNIX ими разработан. По факту, это не институт, а скорее более-менее свободная ассоциация с платным членством. Меня звали как-то раз на их сборище, но я за эти деньги предпочёл свалить во Вьетнам и три недели валяться на пляже, попивая коктейли и лапая подружку за сиськи (там было што-то около 600 баксов только за посещение, плюс билеты в Цюрих и отель там).

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

Дальше комментировать ваш ответ не вижу смысла.

Конечно не видишь. У тебя в голове хлебушек, а сам ты – обезян. Если бы все думали как ты, мы бы сейчас программировали на Алголе.

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

Тот же X11 медленно, но верно выкидывают на мороз уже лет…10?

За 8 месяцев разработки довольно много сделали для конечного пользователя. Можешь влупиться сюда https://gitlab.freedesktop.org/wlroots/wlroots/-/releases и попробовать либо с DWL 0.5 либо с Sway-git (тут я не пробовал, но по коммитам можно судить о впиливании). Так что к НГ допилят.

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

гомоиконность

Лучше уж гомосексуальность. Крайне переоценённая фишка. Т.е. в 60х возможно в ней был смысл, но сейчас в любом нормальном языке есть реификация и рефлексия.

программирование на этапе компиляции

Где этого сейчас нет? Генерить AST можно на каком угодно язычке.

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

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

Членство в IEEE стоит 175 долларов. Вы на них во Вьетнам укатили? Собсно и так было понятно что вы очередной персонаж со своими фантазиями, но вы прям решили расставить все точки над i

У тебя в голове хлебушек, а сам ты – обезян.

Самое забавное - я никогда этого не отрицал :) но это абсолютно не мешало мне обоссывать Лавсана, а теперь, похоже - и вас.

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

инженер > программист

Так ведь программист тоже бывает инженер. И вообще инженер супротив физика, а тем более математика — это как плотник супротив столяра %)

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

Членство в IEEE стоит 175 долларов.

Ещё раз: посещение одной конференции на 3 дня стоило 600 баксов. Это только вход туда. Вполне хватило снять бунгало на три недели. Членом для этого быть не требуется, даже маленьким.

Билеты в Цюрих и во Вьетнам из Москвы тогда стоили примерно одинаково.

но это абсолютно не мешало мне обоссывать Лавсана, а теперь, похоже - и вас.

Да нет, обоссал ты только свои штаны пока что.

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

Так ведь программист тоже бывает инженер. И вообще инженер супротив физика, а тем более математика — это как плотник супротив столяра %)

Что сильнее, кит или слон…

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

Я вообще не понимаю, откуда этот дурачок взял мифическую несовместимость лиспа с IEEE 754 и носится с ним как с писаной торбой.

IEEE 754 как раз определяет типы исключений при работе с плавающей точкой. В частности, стандарт говорит что overflow, деление на ноль, и invalid operation - должны вызывать исключения. Их нельзя игнорировать. Реализации CL собственно это как раз таки принимают во внимание, а всякие говноязыки почти все эти исключения глушат и игнорируют, а если вдруг они включены, то нормально их обрабатывать не умеют(C# и вообще дотнет, тут не уникальны, потому что подобная херота происходит и в жабе, и прочем говне для идиотов).

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

Где этого сейчас нет? Генерить AST можно на каком угодно язычке.

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

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

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

Хачкель и ML действительно для аутистов, и вообще, Pure FP так себе концепция, не сильно лучше, и не сильно практичнее, симуловского ООП, скажем.

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

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

Это называется попасть в просак.

Вообще попадают «впросак». А «просак» толкуют по-разному, ныне так и вовсе не устарело только неприличное значение 😊. Хотя возможно Вы именно его и имели в виду, тогда мое почтение, тонкий укол ☺️.

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

А CL это промышленный стандарт, если что.

Как и C++. Ты уверен, что это комплимент твоему любимому языку? Потому что, как показывает практика, языки со стандартом ISO – полный шлак. Я даже тред тут создавал по этому поводу (Зачем нужен стандарт ISO для языков программирования?), пришли к неутешительным вывода.

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

Потому что, как показывает практика, языки со стандартом ISO – полный шлак.

отсюда не следует вывод, что языки без стандарта iso - выдающиеся. скорее всего, они еще более полный шлак.

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

Оно делает конструкцию, которая на C++ выглядела бы так

cont save;

f(auto k)
{
   save = k;
   k(2);
}

auto x = with_cc {
  return 1 + cc(f);
}

cout << x; // 2
cout << save(3); // 4
cout << save(10); // 11

То есть функция cc передаёт в f некий объект, который можно сохранить, и который можно вызвать (функтор, да).

Этот функтор должен содержать код, написанный между with_cc и cc (в данном примере save(x) = { return 1 + x; } ).

Если бы было

with_cc {
  for(int i = 1; i<10; i++)
  {
    if(b[i]) return a[i] + cc(f);
  }
}

То должно бы стать

save(x) = { for(int i = 1; i<10; i++)
  {
    if(b[i]) return a[i] + x;
  }
}
monk ★★★★★
()