LINUX.ORG.RU
ФорумTalks

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

 , ,


2

9

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

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

Дизайн:

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

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

Прошлое:

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

Настоящее:

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

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

★★

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

сишные «*» и «&» в разных количествах и порядках просто образец читаемости

тут не поспоришь, но таки жить можно, это же не (()()((())))

жабское многословие

есть благо для читаемости(кроме случаев с анонимными классами, ждем лямбд)

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

дело именно в жирном рантайме (что на диске, что в памяти)

При правильной сборке конечного образа: puify и toplevel для sbcl например, в памяти и будет 1-2 мег для простых случаев.

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

ты точно упорот: в твоём любимом ЯП ты как конец оператора обозначаешь?

\n обычно.

Я вот голову ломаю

Гм. Не пробовал применять её по назначению?

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

таки жить можно, это же не (()()((())))

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

жабское многословие есть благо для читаемости

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

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

«Паблик статик файнал Борщ борщ нью Борщ, пожалуйста.»

«Структ суп ньюсуп структ суп маллок сайзоф структ суп, пожалуйста».

Miguel ★★★★★
()

CL это функциональный язык, но

1) Много скобочек

2) выражения в лиспе внешне мало похожи на математическую запись и куда труднее читаются, в том числе и из-за п 1)

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

\n обычно.

бэйсик или пайтон? Если пайтон, то ты ещё за отступы не ответил (:

Гм. Не пробовал применять её по назначению?

вот в лиспе её и применяешь по назначению - код пишешь. А операторы отделяются скобками. Всегда. Лисп конечно УГ для инопланетян, но синтаксис там логичный и единообразный, а ни как в перловках/сишечках.

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

и нечитаема, заодно.

наглое 4.2, прекрасно читаема, как и лисп, в общем-то. хотя у лиспа есть некоторая специфика, это да.

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

CL это функциональный язык, но

уже первый пункт неправильный, как и все остальное ;-)

CL это пластилин

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

Хамят иногда за попытку задать вопрос, который есть в одной из первых пяти глав PCL. Например, «как вызвать функцию?» Да, такое бывает. Часто.

Хамят иногда. Часто.

Браво.

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

а что это за скобки? CL намекает на рукожопие написавшего. Или это из вашей жабы?

это просто скобки, ваш CL разве не так выглядит?

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

Вот поэтому берём питон и быстро пишем.

Artificial_Thought ★★★★
()

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

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

ну да, главное потом руки вымыть хорошо

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

наглое 4.2, прекрасно читаема

в области преобразования колекций все эти map, flatMap, foldLeft и прочие плюшки ужасно читаемы.

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

в той же сишке скобок порой и больше.

это какой такой порой?

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

все эти map, flatMap, foldLeft и прочие плюшки ужасно читаемы.

бугага, что я могу сказать. башевый «cat | grep |sort | sed» тебя не смущает, а скалевый «list filter sort map» уже ужас-ужас.

жабскую версию на итераторах даже и не напишешь вот так вот, в одну строчку-то...

ню ню ;)

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

это просто скобки, ваш CL разве не так выглядит?

нет. Не так. В сишечке в конце каждого оператора ставится (}|;|,), а в лиспе - всегда ). Потому «лишних» символов в CL нет.

вот например сравни две эквивалентные программы:

(defun factorial (x)
  (defun iter (y c x)
	(if (> c x)
	  y
	  (iter (* y c) (+ c 1) x)))
  (iter 1 1 x))

(print (factorial 6))
#include <stdio.h>


int factorial_iter(int y, int c, int x)
{
	if(c > x)
		return y;
	return factorial_iter(y * c, c + 1, x);
}


int factorial(int x)
{
	return factorial_iter(1, 1, x);
}

int main()
{
	printf("%d\n", factorial(6));
	return 0;
}
заметь, что везде, где в LISP'е надо закрывать скобку, в сишечке тоже надо как-то закрывать, только всегда по разному.

ЗЫЖ и сравни сложность кода...

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

жабскую версию на итераторах даже и не напишешь вот так вот, в одну строчку-то...

зато понятно все будет.

башевый «cat | grep |sort | sed» тебя не смущает

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

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

бэйсик или пайтон? Если пайтон, то ты ещё за отступы не ответил (:

Haskell

вот в лиспе её и применяешь по назначению - код пишешь.

Маленький секрет: код чаще читают, чем пишут. И голову при этом приходится применять тоже чаще.

синтаксис там логичный и единообразный, а ни как в перловках/сишечках.

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

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

Если пайтон, то ты ещё за отступы не ответил (:

Haskell

хых.

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

«В конце каждого оператора» - что-то непонятное. Правильно говорить, что в конце каждого выражения ставится точка с запятой, а в конце блока - закрывающая фигурная скобка. В этом плане синтаксис си очень прост. ИМХО в си можно запутаться только в комбинациях *, & и const.

И вообще ты перечитал SICP и зачем-то неправильно тянешь его в CL.

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

считаешь, что запись функции на CL внешне похожа на математическую?

Внешне она только в mathcad-образных похожа, но ни как не в обычных ЯП основаных на тексте. С другой стороны, будучи студентом, достаточно много писал символьные преобразования на Maple и после такого опыта понимаю почему в лиспе делали именно так как сделали.

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

ЗЫЖ и сравни сложность кода...

(defun factorial (x)
  (defun iter (y c x)
	(if (> c x)
	  y
	  (iter (* y c) (+ c 1) x)))
  (iter 1 1 x))
factorial (x) {
    int iter(y, c) {
        return c > x ? y : iter(y * c, c + 1);
    }
    return iter(1, 1);
}

да - на С (хоть и чуть нестандартном - под gcc с nested functions) попроще будет

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

CL это функциональный язык

арчимага на тебя нет. :)

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

Haskell

facepalm

Маленький секрет: код чаще читают, чем пишут. И голову при этом приходится применять тоже чаще.

я в курсе. вот тебе пример на твоём любимом ЯП

qsortOneLine s = case s of{[]->[];(x:xs)->qsortOneLine [y | y<-xs, y<x] ++ x : qsortOneLine [y | y<-xs, y>=x]}
который жрёт O(N) памяти, и работает медленнее пузырька. Реализация на сишечке конечно громоздкая, но зато памяти жрёт таки O(log(N)) и работает таки обычно O(N*log(N)). А всё потому, что это у тебя на хаскеле совсем и не qsort... Такие дела...

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

мда...

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

В этом плане синтаксис си очень прост. ИМХО в си можно запутаться только в комбинациях *, & и const.

конечно. Только твои const, *, & в сишечке встречаются чуть более, чем везде.

И вообще ты перечитал SICP и зачем-то неправильно тянешь его в CL.

какая разница? В схеме скобок что-ли меньше?

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

в с так не пишут. «лишние» символы имеют разную семантику и повышают читабельность.

если это не однострок, то лишние символы вообще не нужны. А если однострок, то всё и так непонятно.

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

да - на С (хоть и чуть нестандартном - под gcc с nested functions) попроще будет

чем проще-то? Строк меньше? Ну запиши (if одной строкой, будет столько же. А вот скобок столько же. Да и нестандартно это...

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

а посчитай-ка мне таким макаром факториал 100500

а сделай-ка бинарник размером в 760 байт из кода на CL - я сразу дам тебе код для факториала 100500, да - в C для этого надо использовать библиотеки, зато это возможно, в отличие от

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

конечно. Только твои const, *, & в сишечке встречаются чуть более, чем везде.

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

какая разница? В схеме скобок что-ли меньше?

Просто прокомментировал твой CL-код. Не говоря даже, что на си так не пишут.

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

ЕМНИП clisp не умеет оптимизировать хвостовую рекурсию.

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

тут разные юзкейсы.

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

понимать они будут чуть менее чем ничего.

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

ну либо покажи как ;)

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

дык

 (defun factorial (x)
  (defun iter (y c)
(if (> c x)
  y
  (iter (* y c) (+ c 1))))
  (iter 1 1))

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

На С вообще можно было не выеживаться, gcc отптимизирует рекурсию и в «обычной» реализации факториала.

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

Когда я (правда несколько лет назад) сравнивал сколько места в памяти отжирает запущенный лисп с рядом часто используемых модулей - что sbcl, что ecl отожрали по 5-7 Гб,

Учитывая что у меня на 128 мб. ОЗУ в одном образе крутятся XSLT и морды на mcclim и tk и вская всячина из зависимостей, то твой набор из «часто используемых модулей» на «5-7 Гб» - достточно безумен.

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