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?


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

Опять лжешь. Никаким нейтивом там и не воняет. Или, скажешь, fasl это elf?!?

Эльф - это один из форматов упаковки исполняемого кода и данных (кода, кстати, там может и не быть). Fasl в SBCL - другой такой формат.

mv ★★★★★
()

Gentoo portage на лиспе вашей мечты

чо?

BYHYRT

а, okay

fang90 ★★★★★
()

challenge NOT accepted

что неудивительно

в этих ваших линуксах всё перанально. напомню, что плагиируемый оригинал написан на BSD make и не тормозит

anonymous
()
Ответ на: challenge NOT accepted от anonymous

Вот именно. Сборка системы и портов на мейк, а не на говне каком-то

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

кто-нибудь уже говорило, что гента нинужна?

Да это и так понятно.

Miguel ★★★★★
()
Ответ на: Воу, воу, палехчи от BYHYRT

вот одна из бед всех ЛОРовчан и лоро-гентушников в частности. Все хотят почесать свое ЧСВ. Причем каждый на свой манёр. init_6 яростно верил что чесать нужно с помощью баша. часер говорил что С похож на серп и им чесать быстрее. Ты вспомнил про лишп и надеешся на его АИ, который все должен сам написать. У меня чесалка из красного камня. уже кое-что умеет. Но я все еще надеюсь что после прототипа заинтересованные мне помогут его отрефакторить^Wпереписать.

Но никто не хочет говорить об алгоритмах. Поэтому если очень хочешь — пили сам. а там видно будет кто был прав а кто нет.

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

тел ми моар, бро

// другой анонимус

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

elf - формат упаковки тормозного байткодика. Никакого native там нет и быть не может.

fixed.

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

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

Ты ничего не понимаешь: если в миднайт коммандере ярко-зелёным цветом не выделяется - значит, файл не исполняемый.

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

А под чем сидят труЪ лисперы? :)

lovesan раньше под спидами сидел, сейчас бухает. Золотце под транквилизаторами с детства. Луговский в юности был похож на «хмурого», сейчас не знаю. Наггум помер в 44 года от язвы кишечника, тоже показатель. Скорее всего, бухал, или какие-то опиаты на кишку ставил.

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

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

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

С велосипедика упал, головкой стукнулся? От того, что ты назовешь правду чушью три раза, правдой она быть не перестанет. sbcl не умеет компилировать в native. Все лиспеги, по сути, тормозные интерпретаторы, как бы не пытались изобразить из себя что-то большее.

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

Коллега! Давайте быть аккуратными, в этом наша сила, а врага надо знать в лицо. Если не ошибаюсь, SBCL все-таки на лету конпелирует (по крайней мере, пытается) скобкоту в нативный код, с переменным успехом. Можно даже посмотреть ассемблерные сорцы, (disassemble 'foo). А вот что хранится в FASL — одному Ст-ллману известно, машкод ли там, или промежуточный байт-код. Одно известно точно, ради этой конпеляции на лету он и тянет за собой 60-мегабайтный рантайм в любую программу.

Это вообще одна из фич, на которые фанбои особенно подрачивают. В мире открытых лишпегов редко встретишь качественную конпеляцию в натив, это ТС верно отметил. Guile, например, — 100% интерпретируемый тормоз.

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

Сможешь доказать, что sbcl не умеет компилировать в native?

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

Даже на википедии первым предложением сказано: «Steel Bank Common Lisp (SBCL) is a free Common Lisp implementation that features a high performance native compiler...». Страничку, правда, наверняка патологические лжецы и наркоманы писали. SBCL'евский сорцы тоже поддельные: если хотя бы общее представление о компиляторах иметь, то беглым взглядом можно увидеть кучу знакомых элементов типичного мультиплатформенного компилятора в машинный код.

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

А на сколько порядков sbcl медленнее чем Си? Ну и какой смысл после этого всякую лажу про «native compiler» нести?

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

Вот мне делать нечего, как твою скобкоту читать.

anonymous
()

Вангую Lisp Epic Fail

причин тому несколько:
1. Третий день на исходе, а Германа всё нет;
2. Из треда очевидно, что «защитники» шепелявого уже очкуют что-либо писать сами, да и «штангистам», походу, тоже неуютно;
3. В журнале «ФП» вроде ж было похожее соревнование, дабы продемонстрировать преимущества ФП - и там победили решения на богомерзчине навроде VB.NET.

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

А на сколько порядков sbcl медленнее чем Си? Ну и какой смысл после этого всякую лажу про «native compiler» нести?

Несколько лет назад тут, на ЛОРе, проводили пиписькомер на примере экстремального цикла. SBCL был в 1.6 раз медленнее, чем оный же на сишечке, собранном gcc-4.x - т.е. в случае, когда SBCL было всё понятно. Если есть недетерминированные типы или компилятору не хватило эвристики понять код, то сильно медленнее.

В целом, конечная кодогенерация где-то на уровне gcc 3.x. Сейчас SBCL не хватает современных техник оптимизаций, из-за чего в генерируемый код пролазит много мусора.

mv ★★★★★
()
Ответ на: Вангую Lisp Epic Fail от d_Artagnan

2. Из треда очевидно, что «защитники» шепелявого уже очкуют что-либо писать сами, да и «штангистам», походу, тоже неуютно;

Ну вот ты сам подумай: тут все взрослые люди, со своими заботами и семьями. С какого перепугу мужчине тратить своё драгоценное время, чтобы чего-то доказать очередному дятлу? Максимум, он может дать совет или свою оценку, чтобы нормальный подрастающий мужик заинтересовался в предмете и решил сам проверить.

А дятлов бесполезно учить: дятлами и останутся.

mv ★★★★★
()

Итак, ТЗ — реализовать Gentoo portage на лиспе вашей мечты, The Right Way(TM).

Guix же. Nix пакетный менеджер на схемке.

даю затравку, может кто-нибудь на твой «вызов» откликнется:

новое ТЗ

не будем писать portage на лиспе. будем повторно использовать guix.
только, вот бида-бида-огорчение: ебилдов под него маловато.
поэтому, задание меняется на такое: написать транслятор из гентушных .ebuild файлов в guix-овские рецепты

пример рецептов сборки hello-2.4.ebuild для Gentoo hello рецепт для guix

ТЗ: 0. ставим в Gentoo Guix и собираем что-нибудь для ознакомления со средой
1. a) парсер из конкретного синтаксиса .ebuild для Gentoo в абстрактный синтаксис PMast,
б) pretty printer из абстрактного синтаксиса PMast в .ebuild
2. a) парсер из конкретного синтаксиса рецептов Guix в абстрактный синтаксис PMast,
б) pretty printer из абстрактного синтаксиса PMast в рецепты Guix

3. compiler driver для запуска: -from ebuild -to guix, -from guix -to ebuild.
4. тестирование и проверка поддержки USE-флагов, ARCH, замаскированного и прочего
5. PROFIT!!!

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

Приз — всенародное признание, сотни нефти и гарем из 99 девственниц подросшая репутация лиспа :)

мелковато как-то будет. всем пофиг.

Ну, что? Challenge accepted?

ты думаешь, мне ничего более срочного делать не надо? эт не так. но если вдруг кто-то заинтересуется — welcome, ТЗ я накидал.

  • задание со звёздочкой: добавить рецепты для Арча, например (на баше).
    не писать N pretty printer-ов на каждый чих, а автогенерировать их из грамматики для парсера.
anonymous
()
Ответ на: комментарий от vurdalak

Прочитал как «сидя в кресле в качалке». Представил бодибилдера в кресле с пледом.

разрыв шаблона же. «в качалке», значит, штанга. штанга, значит, хаскель.

при чём тут лиспер?

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

А питонисты уже посрамлены. Потому что тормозит на столько, что уже зовут лисперов на помощь портэж переписывать.

хитрые лисперы берут CL-Python и трахаются с неработающими в нём ебыдлами.

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

читай профиль портэджа в /etc/portage/profile и всю его библиотеку, которая инклудится через inherit. а потом когда ты делаешь eselect profile set симлинки на него устанавливаюцца.

оно логично, ещё можно посмотреть xmerge из crosstools как отрабатывает, например под mingw: ставится свой кросспортедж, со своим хитрым профилем, пишется враппер (кроссмёрдж, тот самый xmerge) который вызывает не системный gcc а gcc из кросстулчейна, и им собирается пакетик в кросстулз окружении. с кросстулзовым профилем.

например, можно под винду mingw-ом через xmerge пакетики собирать. только особого смысла не имеет, т.к. придётся свой профиль для кросстулчейна запилить, со своими виндовыми зависимостями. то есть, сама структура зависимостей она для винды другая будет. в принципе это возможно сделать аналогично тому, как gentoo-freebsd сделали, но проще взять другой нормальный пакетный менеджер вместо emerge : paludis / cave из генты/exherbro ну или тот самый guix, в них кросскомпиляция более здоровски работает.

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

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

ну разумеется, всё так и есть, как ты говоришь.

просветлил тебя ссылкой выше. нужно не велосипедить костыли в очередную реализацию ПМС, теперь этот синдром на лиспе.

а просто написать транлятор из одного DSL в другой.

конпелятор ебыдлов, если угодно.

ебыдлы тоже можно наконпелировать транслятором из какого-то арча.

правда, что-то придумать надо будет с графом зависимостей разных.

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

Ведь оба велосипеда — portage и paludis — с квадратными колёсами, и толком не едут.

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

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

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

ещё из него можно няшную сишечку генерировать

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

это те же Naughty Dog, которые писали GOAL. какой ещё нужен пруфлинк ? =)

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

Пускай хоть бильд-скриптики для игорь, чо.

ппц, мой юный друк.

а если я вдруг буду генерить полноценный COLLADA .DAE и прикручу к нему какой-то workflow, и на CLOS это у меня выйдет проще и легче, чем на C++ DOM с солверами и прекондишнерам, то это как, чо, или ничо?

полноценный такой interactive scene graph и свой ламповый workflow на CLOS объектах с аспектами и правилами вместо кривоватового C++ DOM XML и костыльных плугинов ?

или игорь опять обыдлиццо?

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

а в качестве ассет менеджера вообче поначалу сойдёт org-mode с capture links.

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

тссс.... а то сейчас выяснится что эти wait-move-to /signal /wait-for-signal /wait-animate можно не захардкодить, а генерить из другого DSL, или вообще динамически, из движка правил.. это же будет слишком сложно для него, шаблон не выдержит.

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

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

ты и правда думаешь, что это сильно сложнее, вот

этого ?

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

как-то я не пойму, в чём твои сложности.

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

скандалы, интриги, расследования

неужели генерится нерабочий код?

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

а теперь поведай, почему тебя не устраивает опять портежд — а отдуваться должны почему-то лисперы?

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

С другой стороны, а что если такой же по смыслу скрипт будет на Lua? В геймдеве это ведь мейнстрим. Только что-то я не встречал нигде заявлений «посмотрите, мы сделали DSL на Lua!»

ты лучше подумай, а чего такого нельзя или слишком сложно будет сделать на Lua, что будет просто получаться на лишпеге. тот же CLOS, MOP или движок правил с фреймовыми семантическими сетями во все поля, например.

Такое впечатление, что лисперы называют термином DSL всё подряд. Доопределили одну функцию — eDSL. Написали пару макросов — DSL!

ты как бы понимаешь суть этих макросов, и используемые в них парадигмы? те же аспекты, MOP, комбинаторы правил и движки правил?

такой простой пример как приведённый и правда, можно было даже на Lua написать. вопрос в том, чего на Lua написать было нельзя.

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

например, смотрим NWN2 и скрипты квестов на Lua. а теперь смотрим какую-то interactive fiction (например, в некоторых движках браузерок MMO для квестов такое используется).

и сравниваем, насколько просто/сложно написать свой мод и там, и там.

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

Тем более что если охота шуструю в интерфейсе замену portage, то пусть она ещё будет переносимой, чтобы срезы поднимать на разных дистрибутивах, маке и винде (а portage когда-то и на ней запускался)

не совсем на винде — запускался как бы не на SUA.

а на маке гораздо проще — Alt/Prefix.

добавлю, «тем более, что выяснится, что структура зависимостей пакетов под гентой, другими дистрами, alt/prefix, кросс емёрджем, gentoo-freebsd должна сильно отличаться, хотя сохраняя зигохистоморфность препроморфизмов в общем случае» =)

ну и кто всё это будет тестировать, ага.

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

А дальше нужность неочевидна. Мало того что давайте напишем нечто базовое системнообразующее на неком языке не из LSB, так ещё и возьмём не лучшую реализацию этого языка %)

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