LINUX.ORG.RU

Вызов лисперам.

 


2

5

Всем привет. А давайте проверим некоторые громкие утверждения о лиспе, и сделаем это с пользой для человечества?

Я часто вижу на ЛОРе утверждения наподобие такого: «Лисп-макросы дают возможность создавать DSL под задачу, а саму задачу решать на языке предметной области». Дальше обычно следуют выводы: благодаря этому лиспер во много раз производительнее программиста на С, С++, Java, Python и прочих non-Lisp языках. Сразу disclaimer: я тут ни на чьей стороне, мне самому интересно посмотреть, как работает этот подход. В частных беседах добиться особо ничего не удалось, разве что «я тут писал DSL для разбора лисповых DSL, чтобы можно было DSLить, пока DSL разбирается; а eDSLей так вообще было не счесть». Поэтому предлагаю решить предельно конкретную задачу, в которой, кстати, есть острая нужда.

Есть такой замечательный дистрибутив Gentoo, наверняка многие им пользуются. У него прекрасная концепция, но есть большая проблема с пакетным менеджером portage. Он — «невыносимо тормозной», а его разработчики "не хотят лезть в это адское спагетти из пистона и баша". Перевожу на профессиональный язык: portage имеет проблемы с производительностью и поддерживаемостью. Вероятно, отчасти из-за неудачного выбора языков реализации.

ЛОРовцы уже кинули клич на предмет переписывания portage на С/С++, но как мне показалось, делишки идут неважно. Давайте поможем общему делу? Мне кажется, задача просто идеальная:

1. Не «Hello, World», но и не система управления ядрёным реактором. Судя по утверждениям лисперов, такое должно занять от одного вечера до нескольких дней. Таким образом, проверяем claim о производительности лиспера;
2. Исходный продукт испытывает проблемы с перфомансом. Проверяем claim о том, что лисп не тормознее сишечки, а также claim, что на лиспе проще реализовать правильные алгоритмы и структуры данных;
3. Предметная область — пакеты, метаданные, содержимое, зависимости, сборка и установка. Предельно ясная и самодостаточная. Проверяем claim о DSL и решении задачи на языке предметной области.

Итак, ТЗ — реализовать Gentoo portage на лиспе вашей мечты, The Right Way(TM). Приз — всенародное признание, сотни нефти и гарем из 99 девственниц подросшая репутация лиспа :) Впрочем, пацаны вроде даже собирались скидываться на условную «бутылку Жигуля». Кстати, призываю Chaser_Andrey в свидетели.

Ну, что? Challenge accepted?


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

CMUCL ещё, из которого sbcl пошел. Черт, они все это делают! Кроме clisp. Но клисп труёвее всех и идет даже под тостером

shamaz
()

Мне вот это совсем не интересно. Кто будет поддерживать все эти пакеты? Не сам создатель портажа же.

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

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

Не пиши ерунды

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

Ну так лишпики (и конкретно sbcl) делают ровно то же самое.

(declaim (optimize (speed 3) (debug 0) (safety 0)))
(defun add-one (a) (declare (type fixnum a)) (the fixnum (1+ a)))
(disassemble #'add-one)
; disassembly for ADD-ONE
; Size: 10 bytes
; 0453388F:       4883C202         ADD RDX, 2                 ; no-arg-parsing entry point
;       93:       488BE5           MOV RSP, RBP
;       96:       F8               CLC
;       97:       5D               POP RBP
;       98:       C3               RET

в образ дампится именно такой код (есть и режим интерпретации байткода, но он опционален и его включать ещё надо). Конечно

0000000000000000 <add_one>:
   0:	48 8d 47 01          	lea    0x1(%rdi),%rax
   4:	c3                   	retq 

лучше, но всё равно 4.2.

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

А треды он умеет, кстати? Чтобы нативные.

Конечно. Уже, наверное, год как)

Без него хрен бы я перенес sbcl под драгонфлай (с которого очень хочется куда-нибудь съехать, но не знаю, куда девать файло)

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

Что, затрещал пердак? Неприятно слышать такие неприглядные факты о лишпике?

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

Где ты видишь помощь в написании проги, которая ни тебе, ни людям нужна не будет

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

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

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

Сто раз обсасывалось уже, что там дело не только в языке реализации. И здравомыслящие питонисты подключают в тяжелых случаях мощь Си, а не надеются на «пуре питон павэр». Подходящий пример: Mercurial vs. Bazaar.

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

Особенно классный слайд с пруфом «вина» лисперов - «С++ header, C++ file, C++ compiler...» (c) И красный кружочек «data->updates while running->runtime». Взгромоздились на плечи плюсистов и присвоили 3.4 лимона - вин, однозначно :)

slackwarrior ★★★★★
()

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

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

Взгромоздились на плечи плюсистов

Але, ламер, при разработке игры игровой движок, как правило, уже берется готовый.

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

Сам ты ламер, иди в жопу :)

«Racket power, library support a big win» (с) Осталось вписать Questions про С++. Чтоб в вине не было сомнений. А то вдруг плюсисты за долей придут.

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

Конпеляции в натив нет, движки готовые ннада... Так победят!

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

Сам ты ламер

Еще раз повторяю для тормозов: в разработку игры разработка игрового движка не входит.

anonymous
()

Че вы опять со своим Last of Us? Сто раз же уже обсосали: весь исполнимый код игры на С++, а на ракетке бильд-скриптики, которые генерят игровые ресурсы. Хотя дооо, для лиспера-фанбоя это, конечно же, «игра написана на ЛNСП!!!111»

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

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

О, красавчик. Добра тебе!

Ну ты не обольщайся особо. Лиспа там с гулькин хрен на самом деле, см. выше

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

Разигнорил анонимуса, ужаснулся, заигнорил обратно. Не, бля, это пипец

Добро пожаловать обратно в выдуманный розовый мир, где пони, бабочки, единороги и LISP.

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

весь исполнимый код игры на С++

Опять вылезло ламерье позорное. Запоминай, ламер: исполняемый код игры в машинных кодах.

Теперь скрылся, чтобы я тебя больше не видел.

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

А то вдруг плюсисты за долей придут.

Главное, чтобы ассемблерщики не пришли к плюсистам за своей долей.

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

Да я уже посмотрел, что ресурсы.

Какие на хер ресурсы? Ресурсы создаются в фотошопах, маяйх и т. п.

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

исполняемый код игры в машинных кодах.

...полученных прямой трансляцией из С++. И никакого лишпика, как бы ни трещал твой рваный пердак.

Теперь скрылся, чтобы я тебя больше не видел.

Нет ты.

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

...полученных прямой трансляцией из С++

А C++-код получается трансляцией из DSL'ей, и никакого C-плющ-плющика. Сюрприз.

У ламера сейчас головушка заболит от такой «сложной» схемы.

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

Да оно понятно, обрабатываются-то затем где-то всё равно лиспом.

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

А теперь докажи это. Код в студию.

(state ("shake-hands")
  (on (begin)
    (track ("player")
      [wait-move-to "player" "waypoint7"]
      [signal "player-at-waypoint"]
      [wait-for-signal "sully-at-waypoint"]
      [wait-animate "player" "shake-sullys-hand"]
    )
    (track ("sullivan")
      [wait-move-to "sullivan" "waypoint7"]
      [signal "sully-at-waypoint"]
      [wait-for-signal "player-at-waypoint"]
      [wait-animate "sullivan" "shake-drakes-hand"]
    )
  )
)
anonymous
()
Ответ на: комментарий от anonymous

И? Пока что ты привел какую-то кучку скобок и слов на английском.

Где результирующий С++-код? Где правила, по которым скобчатый понос превращается в С++? Где доказательство, что это вообще происходит?

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

И? Пока что ты привел какую-то кучку скобок и слов на английском.

Быдло, ты по пруф-ссылкам до сих пор не сходило?

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

CPython - референсная реализация Python, заменяющая ему стандарт. То бишь, когда пишут «Python», имеют в виду «CPython» (питонисты имеют в виду; что имеют в виду все остальные это их проблемы). Соответственно, сообщество пилит си-пайтон, всё остальное - поделки энтузиастов. Нааример, Jython по сравнению с JRuby вообще не развивается. Есть еще PyPy, но он все еще догоняет основную реализацию, например, в плане наличия популярных библиотек, а значит, не готов для безболезненной замены в «промышленном производстве».

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