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

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

ну все что вы перечислили это из разряда самовыражения содомизированных художников(от слова худо) в коде, кроме сишки, языка уровня 50летней давности, которая у вас очевидно что-бы популяризировать руст и остальных уродцев

ML 45 лет назад появился, напомню. SML и OCaml от него чуть позже отделились. Это всё не то чтобы новые технологии. Даже тому же Haskell уже 35 лет. Из «нового» тут только Rust, в том плане что ему всего-то навсего 10 лет.

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

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

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

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

Тупее ереси я сегодня ещё не читал. Я сдаюсь. Ты подебил!

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

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

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

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

Вот это у вас содомия, как же здорово 😊💥.

Но-но! Никакой содомии! У нас девки-хаскеллистки работают! Всё строго гетеросексуально!

Так я ж в хорошем смысле.

девки-хаскеллистки

/me чувствует себя уязвленным, потому что ниасилил ☺️. Хорошие, наверное, девчонки, умные.

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

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

Вот это у вас содомия, как же здорово 😊💥.

Но-но! Никакой содомии! У нас девки-хаскеллистки работают! Всё строго гетеросексуально!

Так я ж в хорошем смысле.

девки-хаскеллистки

/me чувствует себя уязвленным, потому что ниасилил ☺️. Хорошие, наверное, девчонки, умные.

Каэш! Даже на ЛОРе зависают :3

Но вообще, хачкелл – не то чтобы сложный язык. Без шуток.

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

Хотя бы потому, что она не позволяет развивать рантайм в правильную сторону. Зафиксировав API для модульного GC и вообще, открыв его кишки наружу, они убили себя об стену обратной совместимости

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

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

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

Даже на ЛОРе зависают :3

Где?! 🧐 Шифруются, что ли… А, в Галерее, наверное, на дефолтные обои любуются.

Очень многие ходят на ЛОР почитать, но мало что пишут. Местная публика весьма одиозна.

А так, я одно время встречался со слакварщицей отсюда. Было мило. Даже скучаю по ней иногда.

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

я говорю об возрасте по уровню развития методологий разработки, например отсутствие наследования/полиморфизма это сразу +20-30лет

Эта… в хачкелле есть полиморфизм. Просто до жопы его. Жаба тут присасывает.

В окамле есть полиморфные модули, про которые я выше писал. Прикинь, можно импортировать модуль и передать ему параметром другой модуль!

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

Там все плохо, для такой тупой и убогой среды выполнения как жабовская. Где реально интересный прогресс с GC есть, так это в системах с first-class продолжениями и прочим. В лиспах впрочем тоже есть.

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

отсутствие наследования/полиморфизма это сразу +20-30лет

Не чувствую в себе сегодня сил для веселого времяпровождения в срачах. Поэтому — ну ладно, точку зрения принял 🙃.

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

В окамле есть полиморфные модули, про которые я выше писал. Прикинь, можно импортировать модуль и передать ему параметром другой модуль!

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

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

В окамле есть полиморфные модули, про которые я выше писал. Прикинь, можно импортировать модуль и передать ему параметром другой модуль!

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

Ты, похоже, вообще не понял, что я написал. Читай сюда: https://v2.ocaml.org/manual/moduleexamples.html

Хотя, если твой мозг настолько изнасилован жабой, то и не поймёшь.

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

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

Ты не тормози, дядь. Всё там ясно и понятно. Особенно в ASP.

В итоге мы находимся в ситуации, когда после кучи вот таких вот маленьких шажков с минимальным оверхедом сраный чатег (Slack) рутинно выжирает гигабайт оперативы.

Это ты путаешь тёплое с мягким. Чатег пишется на других технологиях

P.S. @lovesan - поздравляю. Хорошее дело, Богоугодное.

anonymous
()

bike

Название хорошее, вот еще логотип для проекта нашел: https://cs6.pikabu.ru/post_img/big/2015/07/28/8/1438090013_1072571484.jpg

А если серьезно, то зачем все это?

PS
Я еще и гимн для проекта нашел: https://www.youtube.com/watch?v=xt0V0_1MS0Q
И мне кажется его содержимое отвечает на вопрос «зачем все это».

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

единственное, что я видел на нём в дикой природе - это WeIDu.

так как юзкейс 100% располагает

Когда видишь лося не умеющего в Русский язык и что-то вякающего про серьёзный бизнес, кроме жалости и отвращения ничего не вызывающего, хочется задать вопрос его же языком - «а что сделал ТЫ, лось?» И тихо станет в треде, пока всплывает говно…

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

я помню, в перле отсутствие нормальных классов пытались закостылить через модули. Зачем все это нужно?

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

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

я помню, в перле отсутствие нормальных классов пытались закостылить через модули. Зачем все это нужно?

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

охлол.. классы в окамле тоже есть

https://ocaml.org/docs/objects

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

Язык не спасает от архитектуры. Всё что ты пере числил в топку т.к. модель ВМ и железа императивная и дшыз без соответствующей ему архитектуры лишь имитация. Поэтому Джава и Си и статическая типизация под капотом потому что современный ЦПУ ну не может по-другому.

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

В перле, ЕМНИП, ООП через модули сделан. Всё довольны, когда квадратные колеса катятся синхронно, даже кажется, что едешь, плавно покачиваясь на верблюде 🤣.

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

ваши данные отсырели на 2023 (4.2 detected).

Да раньше было так, но Perl стремительно(!) развивается и в Perl v5.38 уже есть классы. (см Corinna)

Youtube: Perl’s new object-oriented syntax is coming, but what’s next? - Curtis Poe - Keynote - TPRC 2023

class Cache::LRU v0.1.0 {
    use Hash::Ordered;
    use Carp 'croak';

    field $num_caches :common                 = 0;
    field $cache      :handles(exists delete) = Hash::Ordered->new;
    field $max_size   :param  :reader         = 20;
    field $created    :reader                 = time;

    ADJUST { # called after new()
        $num_caches++;
        if ( $max_size < 1 ) {
            croak(...);
        }
    }
    DESTRUCT { $num_caches-- }

    method num_caches :common () { $num_caches }

    method set( $key, $value ) {
        $cache->unshift( $key, $value );    # new values in front
        if ( $cache->keys > $max_size ) {
            $cache->pop;
        }
    }

    method get($key) {
        return unless $cache->exists($key);
        my $value = $cache->get($key);
        $self->unshift( $key, $value );     # put it at the front
        return $value;
    }
}
necromant ★★
()
Последнее исправление: necromant (всего исправлений: 1)
Ответ на: комментарий от anonymous

Все он может, этот современный ЦПУ. Это просто JVM - говно полное, сделанное калеками.

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

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

А если серьезно, то зачем все это?

Затем чтобы использовать экосистему .NET из Common Lisp, очевидно, и не быть ограниченным говноязыками типа C#, или вообще, необходимостью писать «под» эту платформу.

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

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

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

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

Не может быть GC просто так отделен от платформы в модуль и вынесен в «совершенствующиеся реализации».

GC определяет внутреннюю структуру объектов, кодогенерацию компилятора, JIT, семантику VM, и так далее. Если просто взять и его вынести, предоставив публичный API, это значит что многие вещи в платформе мы по-тупенькому фиксируем, и никакого развития в них уже не будет никогда.

Один из фактов - все GC для жабы предполагают вариации на тему Mark-Compact алгоритма. И не более. Не надо, надеюсь, объяснять почему?

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

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

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

Все он может, этот современный ЦПУ.

Лисп без основной части - его аппаратной реализации умер. Те кто насилует этот труп либо дураки либо фанатики. Выбери сам что тебе по душе.

Это просто JVM - говно полное, сделанное калеками.

И только ты один стоишь весь в белом )

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

Лисп без основной части - его аппаратной реализации умер.

Анонимус, естественно, ничего не знает про аппаратные лисп-машины, зачем они были нужны, и почему они не нужны сейчас

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