LINUX.ORG.RU
ФорумTalks

За что не любят Common Lisp?

 , ,


2

9

Следуя трaдициям, например SUBJ.

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

Дизайн:

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

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

Прошлое:

  • медленные реализации (медленное железо)
  • дорогие лисп-машины
  • дорогой лисп-софт
  • AI Winter
  • профуканы все полимеры еффективными манеджерами Symbolics

Настоящее:

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

В остальном все прекрасно и ситуация с библиотеками постепенно исправляется.

★★

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

П-большое - это и есть внутренняя функция с начальными значениями 1 и 1.

Это не функция, а способ записи.

я уже говорил, что итерация эквивалентна рекурсии

Теоретически любую программу можно записать в один цикл, и что?

Однако с рекурсией программа получается проще для анализа (меньше промежуточных состояний).

Ну посмотри на свою схемосишную портянку и сравни с этой:

int fac(int n){
 int res=1;
 for(;n>1;n--)
  res*=n;
 return res;}

Или даже этой:

int fac(int n){
 return n>1 ?n*fac(n-1) :1;}

И скажи, зачем ты изуродовал сишную реализацию факториала? SICPнутый, штоле?

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

ну вот счётчик пакетов, например

а в линуксовом ядре какие-то дураки только 32 бита под это отвели, а там и 64 то не хватит

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

В криптографии нужны, например.

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

wota ★★
()

Читабельность кода очень низкая.

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

Задают вопросы уровня «как вызвать функцию?» на канале #lisp часто. А потом совет почитать PCL воспринимается как хамство.

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

в любом случае - всегда есть потенциальная возможность переполнения

пример будет? конкретной библиотеки и места переполнения?

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

а в линуксовом ядре какие-то дураки только 32 бита под это отвели

а что происходит при переполнении? по нынешним временам - это копеешный траф, 6Тб каких-то.

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

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

я так понимаю регэкспы тебе тоже не нравятся и ты предпочитаешь получить тонну кода if ... then .. else вместо «^\D\d{20}\D*$»? и под «кто угодно» ты понимаешь дворника васильича, без образования и опыта? не бай б-г ему новую загогулину увидеть?

сомнительная радость.

зы. т.е. от регэкспов я тоже не в восторге, но вот как-то так.

Rastafarra ★★★★
()

Послушайте. Я читал несколько книжек по Common Lisp'у. И весёлые с картинками были, и серьёзные. Но то ли это все они так увлекательно написаны, то ли это сам язык такой, но при чтении нередко моё настроение резко менялось: бывало, казалось, что и правда Lisp — это Рукопись Войнича в мире программирования; магия, изучаемая в полутёмных, освещенных только факелами библиотеках; таинственная древняя инопланетная технология, которую стоит только постичь — и на мир с оглушительным грохотом обрушится счастье и благодать.

Но сто́ит прочитать ещё несколько страниц и впечатления уже́ совсем другие: уважение к старине сменяется презрением к архаизму. Common Lisp видится отвратительным уродцем, каким-то чудом дожившим до наших дней. Запах пыли и плесени, пожелтевшие страницы скучной документации, стопки гниющих перфокарт. Хотите почувствоать — зайдите на сайт любой реализации Lisp'а (sbcl.org к примеру): это не даже Web 1.0, это какой-то Web 0.02.104-PRE-ALPHA. Встречают как известно по одёжке, а у Lisp'а только драные лохмотья да автомобиль вместо головы (car вместо head, остроумно, не правда ли?). Lisp'у не нужны библиотеки, это дело наживное. Ему нужен официальный сайт (красочный, и чтоб кнопочки со скруглёнными уголками), ему нужны весёлые клипы наподобие http://www.youtube.com/watch?v=Mk3qkQROb_k. Ему нужна IDE, а не Emacs. Ему нужна документация, а не вырвиглазный HyperSpec. Тогда шанс на популярность появится.

Но вряд ли всё это призойдёт и кто-то поднимет ношу пиара. Размышляя о судьбе Common Lisp'а, я пришел к выводу, что этот язык не создавался для разработки. Это не язык программирования. На нём за все эти годы не создали ничего полезного. Правильное использование Lisp'а суть спор о нём. Это ЯС (язык срачей), и с этой ролью он справляется безукоризненно. Не надо писать на Lisp'е, спорьте о нём! И мы так и делаем, получая удовольствие. И поэтому всё не так плохо, а в завтрашний день можно смело смотреть, ничего не боясь.

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

а что происходит при переполнении?

считает с нуля, очевидно

по нынешним временам - это копеешный траф, 6Тб каких-то.

ну так и информация эта особенно не нужна, было бы критичным - поставили бы 64 бита

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

Запах пыли и плесени, пожелтевшие страницы скучной документации, стопки гниющих перфокарт.

То ли дело веселые хипстерский Руби или школьный Питон ;-)

а не вырвиглазный HyperSpec

ничего лучше в других языках не видел

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

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

Безумство - это ваше субъективное мнение, а насчёт скобочек я уже ответил где-то на первой странице.

За что не любят Common Lisp? (комментарий)

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

это не даже Web 1.0, это какой-то Web 0.02.104-PRE-ALPHA.

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

Ему нужна IDE, а не Emacs.

lispworks

На нём за все эти годы не создали ничего полезного.

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

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

На нём за все эти годы не создали ничего полезного.

Видишь суслика? А он есть!

gensym ★★
() автор топика
Ответ на: комментарий от wota
(defun factorial (x)
  (flet ((iter (y c)
           (if (> c x) y (iter (* y c) (1+ c))))
    (iter 1 1))

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

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

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

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

Я понимаю программиста васю с нашим дипломом. Потому как, смешно вспоминать, мне один начальник отдела разработки очень большой и серьезной конторы жаловался на жабу, что она слишком сложная, потому что (sic!), регистрозависимый синтаксис у нее. Так вот он без образования был и за свою жизнь только pl/sql и видел

RedPossum ★★★★★
()

Давно не заходил на ЛОР, но в стороне от эпического треда остаться не могу :)

За что не любят Common Lisp?

Мне кажется, тут происходит подмена понятий. Когда, скажем, подвергают критике веганов - критика же идет не в адрес веганской еды, верно? Или гомеопатия - чем провинились все эти нехитрые травки? Адрес критики немного другой; так и с лиспом.

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

Вот ведь какое дело. Индустрия и экономика устроены так, что по-настоящему удачный и качественный инструмент никогда не окажется за ее бортом. Качественный инструмент, реально повышающий производительность труда и дающий конкурентное преимущество, будет глобально принят и получит распространение. Подтверждений этому сотни тысяч, в то время как «против» свидетельствуют исключительно теории заговора. И лисп здесь не исключение. Сколько раз доводилось слышать о том, что, дескать, масоны жидомасоны мировая закулиса древние астронавты Джигурда проджект-менеджеры и производители железа сговорились и специально медленно клепают жручий бажный код, чтобы содрать побольше за разработку и поддержку, а заодно впарить новое железо. При этом авторы мифа деликатно забывают об огромном классе предприятий - о тех, которые разрабатывают софт для себя. Достаточно привести парочку имен - IBM, Oracle - чтобы миф разлетелся в прах.

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

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

ну вот счётчик пакетов, например

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

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

а не вырвиглазный HyperSpec

ничего лучше в других языках не видел

На мой взгляд причесать HyperSpec не помешало бы. У того же LispWorks просто великолепная документация, шрифты в их собственных PDF и HTML на загляденье - всегда любуюсь, а, вот, HyperSpec выглядит действительно несколько старомодно. Это я сравниваю с MSDN, Scala Docs, Java Docs, Haskell Docs. Кстати, у Haskell Platform тоже очень приятная документация, как и у LispWorks (LW).

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

самое прямое - из-за нечитаемости сами фанаты хаскеля спутали алгоритм...

Если ты не заметил, то этот «алгоритм» привёл почему-то ты.

есть другой? давай в студию, я не смог найти.

Я ещё раз прошу тебя объяснить, нафиг ты вообще об этом вспомнил.

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

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

В криптографии нужны, например.

ещё один школьник... Ну и в какой «криптографии» нужны числа сравнимые с 100500! ?

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

лучше посмотри видео, как ставить плагины к emacs, оно полезнее. Давеча было на ЛОРе.

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

П-большое - это и есть внутренняя функция с начальными значениями 1 и 1.

Это не функция, а способ записи.

у меня тоже «способ записи». Тебя в школе не учили, что такое «формула» в алгебре?

Теоретически любую программу можно записать в один цикл, и что?

ЩИТО? запиши что-ли qsort одним циклом...

И скажи, зачем ты изуродовал сишную реализацию факториала? SICPнутый, штоле?

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

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

Тогда шанс на популярность появится.

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

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

Но вряд ли всё это призойдёт и кто-то поднимет ношу пиара. Размышляя о судьбе Common Lisp'а, я пришел к выводу, что этот язык не создавался для разработки. Это не язык программирования. На нём за все эти годы не создали ничего полезного.

поразмышляйте: разве это плохо? не создали очередной домашней странички очередного васи пупкина? Это плохо? За то gcc умеет хвостовую рекурсию...

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

оставайся на второй год в своём пятом классе.

6й уже

Или посчитай на калькуляторе, сколько миллиардов лет потребуется для переполнения такого счётчика, если в секунду будет 100500 миллиардов пакетов.

в случае магистрального провайдера - совсем не миллиардов

Правда ты всё равно не умеешь пользоваться калькулятором (bc например).

а что там уметь?

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

Эмоции вызывают безосновательные заявления о якобы превосходстве лиспа надо всеми другими языками по всем параметрам; в то же время, ситуация в индустрии свидетельствует об обратном.

40 лет прошло, а оно ещё живо. По человеческим меркам это как минимум 500 лет...

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

а что там уметь?

ппц... научись считать факториалы, и посчитай 100500!

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

у меня тоже «способ записи»

Короче, твой «способ записи» не имеет ничего общего с математическим «способом записи». Я не знаю, что такое «формула» в алгебре, я знаю, что такое «функция». Факториал - одна функция, на картинке было два способа ее записи, там нет ни второй функции, ни хвостовой рекурсии.

ЩИТО? запиши что-ли qsort одним циклом...

Я не буду тебе ничего записывать, но по твоему удивлению могу судить, что ты сам не понимаешь своего тезиса о том, что итерация и рекурсия - суть одно и то же, твое понимание этого крутится где-то на уровне оптимизации хвостовой рекурсии, ее механизм, вероятно от тебя тоже скрыт. Подсказка: любую программу можно записать с использованием операций: следования (в си это блок {}), условия (if) и перехода (goto), это разбирается и доказывается на первом курсе ВУЗа.

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

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

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

На самом деле, они различаются не только синтаксически, но и по производительности, к тому же ты используешь специфичную оптимизацию TCO, которая может быть в языке/реализации, а может и нет, в чем ты успел убедиться, отсасывая у clisp.

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

есть другой? давай в студию, я не смог найти.

Есть Data.List.sort. Исходники - вот: http://www.haskell.org/ghc/docs/latest/html/libraries/base-4.6.0.0/src/Data-L...

Интересно, где ты искал?

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

Покажи, пожалуйста, где именно Я выдал этот «однострок».

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

Ты подарил мне лучшую форму троллинга лисперов

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

Короче, твой «способ записи» не имеет ничего общего с математическим «способом записи». Я не знаю, что такое «формула» в алгебре, я знаю, что такое «функция». Факториал - одна функция, на картинке было два способа ее записи, там нет ни второй функции, ни хвостовой рекурсии.

это тебе так кажется. Просто ты знаешь, что такое «п-большое», и знаешь, как считать произведение 1*2*3... Ну я рад за тебя, жаль только, что ты позабыл азы: математическая функция === алгоритм. Все эти твои записи с картинок требуют пояснений и изучений, но попробуй выразить факториал _только_ умножением. Это не так уж и сложно, если использовать рекурсию, а именно n! = n*(n-1)!, при дополнительном условии, что 1! = 1. По этой формуле мы с лёгкостью можем вычислить любой факториал чисел не меньших 1. (предполагается, что умножение и декремент мы считать уже умеем).

К сожалению, данная формула (n!=n*(n-1)!) мало годна для практики, ибо требует n ячеек дополнительной памяти. Однако, её можно преобразовать так, что-бы дополнительно требовалось не n, а всего 3 ячейки. Так и получается программа на lisp'е. А записывать её можно по разному, мне нравится так

	for(y = 1, c = 1; c <= x; c++)
		y *= c;
но эта запись абсолютно эквивалентна формуле LISP'а.

Я не буду тебе ничего записывать, но по твоему удивлению могу судить, что ты сам не понимаешь своего тезиса о том, что итерация и рекурсия - суть одно и то же

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

твое понимание этого крутится где-то на уровне оптимизации хвостовой рекурсии, ее механизм, вероятно от тебя тоже скрыт. Подсказка: любую программу можно записать с использованием операций: следования (в си это блок {}), условия (if) и перехода (goto), это разбирается и доказывается на первом курсе ВУЗа.

кстати, это неверно. Не любую. IRL у функции есть свой контекст, причём этот контекст может меняться при входе в функцию, и восстанавливаться при выходе. Что касается ХР, то тут нет ничего сложного - при входе в ХР сохраняется адрес возврата, и одни и те же переменные, которые _не_ используются после выхода(т.к. рекурсия хвостовая). Адрес возврата тоже один и тот же. Потому, ХР эквивалентна простому бесконечному циклу, и я не вижу тут ничего сложного.

На самом деле, они различаются не только синтаксически, но и по производительности, к тому же ты используешь специфичную оптимизацию TCO, которая может быть в языке/реализации, а может и нет, в чем ты успел убедиться, отсасывая у clisp.

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

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

Есть Data.List.sort. Исходники - вот: http://www.haskell.org/ghc/docs/latest/html/libraries/base-4.6.0.0/src/Data-L...

хм... не намного короче чем на сишечке...

я, правда, всё равно ничего не понял, кроме одного: никакой такой «магии хаскеля» нет, и программа на нём записывается также, как на любом другом ЯП.

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

не намного короче чем на сишечке

Чем что на сишечке?

я, правда, всё равно ничего не понял

Это заметно.

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

ура, Кука вернулся!

Да Кука никуда особо и не пропадал, тащемта. Правда, писать времени почти нет, знаете ли, преподавание да научная деятельность. Что у вас тут новенького? Давненько ott'а не видно, да и ПФП не анонсируется. Уж я бы тряхнул стариной, выдал бы рецензийку.

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

она в декрете третий года, преподаёт физрук

мда...

может любезный кинет пруфлинком?

начни с вики что-ли... Раз у тебя в школе такая беда:

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

Как наука, алгебра стала существовать благодаря мусульманскому учёному из Средней Азии Аль-Хорезми. Впервые термин «алгебра» встретился в 825 году в сочинении этого учёного «Краткая книга об исчислении аль-джабра и аль-мукабалы». Слово «аль-джабр» при этом означало операцию переноса вычитаемых из одной части уравнения в другую и его буквальный смысл «восполнение»

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

математическая функция === алгоритм

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

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

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

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