LINUX.ORG.RU

CL быстрее прочих :)


0

3

Новый, и как всегда красивый, пример кодогенерации от swizard

http://swizard.livejournal.com/158763.html

на этот раз решение задачи http://shootout.alioth.debian.org/u32q/benchmark.php?test=fannkuchredux&lang=...

★★★★★

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

Да и вряд ли я чего-то нового тебе расскажу, потому мартышкин труд.

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

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

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

Особенно это ярко ощущается, когда пытаешься писать макросы.

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

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

Это проблема автора, а не языка. Отсутствие продолжений - это цена unwind-protect, который комитет посчитал более полезным для реального мира.

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

Буквы, вроде, все знакомые, а смысл непонятен.

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

Щито?

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

> Твоя(и не только) пропаганда CL заставила меня внимательно изучить

«On Lisp» и напрочь выбить из мозгов любое желание писать на этом

достойнешем языке :)



Хм, «On Lisp» я не читал, так что затрудняюсь сказать в чём причина подобной реакции. Если честно, то я смог осилить только половину PCL (ибо стало скучно), а дальше читал только код актуальных, развивающихся проектов и пробовал сам работать.

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

Кхм, посмотрел про Felix. Это даже маргинальщиной язык не поворачивается назвать :) А про HN0 или Prop вообще не удалось нагуглить.

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

Это просто proof of concept или этим реально пользуются?

NH0 в разработке, Felix и Prop теоретически вполне рабочие. сам я применять их не пробовал, т.к. нашёл их уже после знакомства с языками, в которых ADT есть из коробки

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

> Отсутствие продолжений - это цена unwind-protect, который комитет

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


Скажу больше: продолжений в CL нет, любая попытка их эмитировать - грубый хак. «Игры с продолжениями» это часть ложного мифа о всемогуществе метапрограммирования в CL. И вообще, тема макросов через мерно раздута. CL был бы отличным языком и без макросов. Макросы делают его лучше, но не стоит слишком сильно ими увлекаться. А «Let Over Lambda» вообще лучше не читать (по крайней мере, начинающим).

И да, Грэхэм, хотя и написал пару книг о CL, Cl не любит, а сообщество не любит его.

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

> Например? Макросы сложно писать, потому что сложно думать этапами компиляции. Крестовые шаблоны тоже этим сложны (плюс синтаксис у них внатуре уёжищный), но в лиспе с его многостадийными метакомпиляциями ещё сложнее.

Шаблоны в C++ я даже близко не осилил. Особенно, когда решил boost::spirit потыкать. Несколько ошибок от gcc со строчками длиной в 3000 символов быстро сделали свое дело.

Буквы, вроде, все знакомые, а смысл непонятен.

Скажу по-другому. Большинство используемых структур данных не прямо описаны в коде, а строятся различными комбинациями cons-ячеек. Поэтому носят характер «соглашения между программистами».

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

> Всё просто. «Ниасилил».

Лучше бы почитал PCL. Тем более, что OnLisp это как бы продолжение «ANSI Common Lisp», т.е. если сразу читать OnLisp, то вообще мало кто осилит.

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

PCL скучный. А OnLisp-то в принципе осилил, но не осилил понять «ЗАЧЕМ ЭТО ВСЕ НУЖНО?»

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

Хм, похоже, что все они предназначены для того, чтобы писать С++ не на С++ :) Интересные примеры, да. Буду их иметь в виду.

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

> Скажу по-другому. Большинство используемых структур данных не прямо

описаны в коде, а строятся различными комбинациями cons-ячеек.

Поэтому носят характер «соглашения между программистами».



Это не соответствует реальной практике программирования. Если так писал Грэхэм - то это его личные проблемы. Большинство реального кода активно использует CLOS.

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

> а также что на её появление повлияло (знакомство со штангой, etc).

Кстати, штангой балуюсь, но начал баловаться совсем недавно(сильно после попыток освоить CL). Пока что чрезвычайно доволен.

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

Короче, ты чего-то не того начитался. Я тут ничем помочь не могу. Основные для меня преимущества CL я описывал как-то здесь: http://archimag-dev.blogspot.com/2010/06/blog-post_11.html. Ещё на тему зачем можно почитать вот это: http://lisper.ru/articles/common-lisp-technologies. Ну и http://lisper.ru/pcl/introduction-why-lisp, конечно. Не заинтересует - значит не твоё, в мире много других языков.

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

> Да, у него CLOS'а я вообще в коде не видел. Или видел, но не обратил внимания.

в его коде нет, есть немного структур. а про CLOS он чуть-чуть пишет в последней главе.

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

> > В-четвертых, практически невозможно написать функции, которые будут валидны при любых входных данных. Что в принципе характерно для большинства современных языков, к сожалению.

Щито?

Вот тут-то чего не ясно? Имеется в виду partial function. http://en.wikipedia.org/wiki/Partial_function

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

Теперь точно ничего не понимаю.

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

> Это не соответствует реальной практике программирования. (...) Большинство реального кода активно использует CLOS.

Смотрю сейчас программу swizard'а, тоже не блещет CLOS'ом. Сплошной макрос на макросе, погоняющий макросом.

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

ОК. Оставлю ссылки в заначке. При случае почитаю.

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

> Сплошной макрос на макросе, погоняющий макросом.

ну так епт, метапрограммирование же.

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

> Смотрю сейчас программу swizard'а, тоже не блещет CLOS'ом.

Сплошной макрос на макросе, погоняющий макросом.


Чем занимается swizard лично мне плохо понятно, он ещё и weblocks использует, что на мой взгляд вообще ни в какие ворота не лезет.. «Лиспотроли» и книги типа «Let Over Lambda» раздули тема метапрограммирования и dsl до абсурда. Могу только сожалеть об этом (( И ещё раз: подобный подход не соответствует реальной практике программирования на Common Lisp насколько я могу об этом судить на основе кода открытых проектов.

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

«Лиспотроли» и книги типа «Let Over Lambda» раздули тема метапрограммирования и dsl до абсурда.

Дай определение своего, «правильного» Коммон Лиспа?

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

> Дай определение своего, «правильного» Коммон Лиспа?

Определение, естественно, не дам, но могу выделить ключевые значимые свойства:

1. Впечатляющий набор средств декомпозиции
2. Чрезвычайно эффективный интерактивный процесс разработки
3. Не сравнимые ни с чем переживания и впечатления от процесса разработки (о чём и говориться в http://lisper.ru/pcl/introduction-why-lisp)

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

То есть получается, что те программы на CL, которые выделяются чем-то из массы, в реальности написаны с использованием нетрадионных практик программирования на CL? Как на зло, то 4х-уровневый DSL, то 40строчные макросы. Ну и по каким программам тогда судить о мощи CL?

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

Ну и по каким программам тогда судить о мощи CL?

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

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

> переживания и впечатления от процесса разработки

Ну это уже вопрос концентрации природно вырабатываемых в-в в программисте, который разработкой занимается.

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

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

Ого, да это же речь про perl!

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

> И метапрограммированию куда-нибудь притесниться совсем нельзя?

В пункт 3, например?


Нет, в пункт 1. Это один из инструментов декомпозиции. Важный и эффективный, если применять с умом, но всего лишь один из.

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

подобный подход не соответствует реальной практике программирования на Common Lisp насколько я могу об этом судить на основе кода открытых проектов.

Код SBCL - вполне реальный проект? Там вроде есть конструкции пострашнее swizad-овсик или LOL-овсих.

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

> Ну и по каким программам тогда судить о мощи CL?

Сейчас 2010 год и есть много развитых языков. Да, в CL есть мультиметоды, система условий, макросы, динамические переменные и т.п., но ни одна из этих возможностей не является настолько убийственной, что бы затмить другие языки. В сумме, есть брать всё вместе, то набегает довольно много. Но всё же главной отличительной и наиболее мощной чертой CL я считаю процесс разработки, основанный на REPL и сопутствующих инструментах, сопоставимых которым в других языках нет. Т.е. смотреть надо в первую очередь не на программы, а на то, как они пишутся.

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

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

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

Есть такая штука как стиль, мне кажется (крещусь) что если принимать его во внимание - то и в CL будет «один способ сделать это». Но это пока только моё подозрение.

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

Нет, код SBCL это как раз «академическая разработка», хоть и хорошая.

Чувак, приближенный к истокам CMUCL, говорит, что «академическая разработка» начиналась, как весёлая развлекуха для студентов. Типа, мы щас крутой конпелятор нафигачим.

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

> Чувак, приближенный к истокам CMUCL, говорит, что «академическая разработка» начиналась, как весёлая развлекуха для студентов.

Ну вот они и оттягивались по полной в коде %)

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

>...Т.е. смотреть надо в первую очередь не на программы, а на то, как они пишутся.

Так какого хера ты цепляешься к макросам, DSL-ям, всяким CLSQL, кривому iter-у, макро-из[ыскам|вращениям] swizard-а и всему, что тебе «не по душе», если главное процесс, а не результат («результат» - не результат работы программы, а сам код)?

А если чуть более серьёзно, то ты очередной раз пытаешься доказать, что CL - удел самураев^W задротов-одиночек^W^W уникумов, и для коллективной работы непригоден.

ладно, каждый находит в CL то, что хочет/ищет. Ты нашёл «процесс разработки». С чем тебя и поздравляю =)

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

> ты очередной раз пытаешься доказать, что CL - удел самураев^W

задротов-одиночек^W^W уникумов, и для коллективной работы

непригоден.



Что за бред, из чего же это следует?

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

> Ну то есть amateur разработка, а iolib или slime - mature ?)

Не понял, при чём тут любительская разработка?

Отличие академической разработки в том, что академическая ведётся в первую очередь для исследования и базируется на других принципах.

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

> Чувак, приближенный к истокам CMUCL, говорит, что «академическая

разработка» начиналась, как весёлая развлекуха для студентов.


Угу, его для того и фокнули, что бы всё разгрести. До сих пор разгребают.

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

> ладно, каждый находит в CL то, что хочет/ищет.

Моя точка зрения основанна на коде на CL, который я читал. Коде, написанным после 2003 года. Да, был старый лисп и ещё остались представители «старой школы». Но он прогнил и умер. В новых проектах отчётливо видна новая школа, язык обогатился идеями из других языков и принятых практик программирования и обрёл новую жизнь. Но, если хотите, можете оставаться в 80-ых.

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

Не понял, при чём тут любительская разработка?

Ну ты назвал CMUCL «академической» разработкой - нет спору, делали-то при университете. Но с чем это противопоставляется? С профессиональной разработкой, вот я и увидел в таком противопоставлении оттенок «любительский» у слова «академический». Что тогда является серьёзной но не академической разработкой в CL? И почему серьёзный академический и серьёзный не академический - это обязательно два разных подхода?

Многие серьёзные программы пишутся при университетах. Но, скажем, если такая программа написана на С++ то никакого противопоставления серьёзным промышленным программам (при компаниях) не делается. Наверно потому что нет «всяких там макросов и дслэей» которые бы можно было игнорировать :)

Угу, его для того и фокнули, что бы всё разгрести. До сих пор разгребают.

Это сомнительно - именно чтобы что-то разгрести? Многие возможности добавили, многое выпилили, а если пойти на ланчпад сбцля и попробовать его баги компилятора в кмукле, то (странно) многие из них не будут иметь место быть.

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

Моя точка зрения основанна на коде на CL, который я читал. Коде, написанным после 2003 года. Да, был старый лисп и ещё остались представители «старой школы». Но он прогнил и умер. В новых проектах отчётливо видна новая школа, язык обогатился идеями из других языков и принятых практик программирования и обрёл новую жизнь. Но, если хотите, можете оставаться в 80-ых.

Ты случаем нигде не писал про это подробно - какие именно вещи нужно читать? Что является признаками старого стиля а что нового?

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

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

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

> какие именно вещи нужно читать?

Исходный код, и не только на CL, но и на C, и на Python, и на PHP, и даже на Perl, в общем, код хороших проектов.

Что является признаками старого стиля а что нового?


Посмотри код, который писал Питер Норвинг и сравни его с кодом postmodern, hunchentoot или iolib. Я не знаю как точно описать. Но возможно современный код более «технологичен» (что бы это не означало) и больше эксплуатирует идеи, которые являются общими для всех языков.

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