LINUX.ORG.RU
ФорумTalks

Эрик Рэймонд неосилил лисп

 , , ,


0

7

Для (NOT NIL):

«CLOS уродская куча уродства», — сказал Эрик Рэймонд, после того, как обламался переписать свою тормозящую поделку с Python на Common Lisp, решив таким образом ускорить выполнение с помощью нативно-исполняемого кода.

Будучи, по его словам, гуру по лиспу в 80-х, он стал искать альтернативу и (внезапно, sic!) открыл для себя SBCL — одну из самых быстрых и популярных реализаций Common Lisp. До этого, по его признанию, после 80-х он писал исключительно только для Emacs-lisp. Для него это стало невероятно интересным снова погрузится в мир лиспа изучая мануал SBCL. Думая, что переписывание с Python на Common Lisp будет легким и быстрым, вскоре он столкнулся с отличиями обьектной системы CLOS от объектной системы Python, и вследствие этого, невозможностью перепистаь свою поделку без измениния ее архитектуры.

Он также пожаловался на отсутствие метода дампа объекта, аналогичного str() в питоне, и не смог найти его аналога (что уже подсказывает низкий уровень его владения CL) в лиспе. Ему намекнули на реализацию метода PRINT-OBJECT, но он привел какие-то мутные доводы, что это не то, хотя это то, что ему нужно было в первую очередь. Ну да ладно, недоучил — бывает.

Сам лисп и идея мультиметодов Эрику, по его словам, понравились, но не понравилась их реализация в виде CLOS.

Конец истории поучителен — Эрик соптимизировал алгоритмы в своей поделке, оставаясь на питоне, и производительность возросла в разы.

Для (NOT Т): http://esr.ibiblio.org/?p=4861

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

Питонисту на лиспе будет дольше писать ;)

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

Вместо нормальных мультиметодов слепили какую-то монстрообразнуюю ОО каку.

Были и другие, но прижился CLOS, так как более мощен.

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

LISP

Функцианальщина

О вашей экспертной оценке мы уже наслышаны ;-)

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

они поди всю ЦПУ-баунд логику в сишные дллки засунули, а потом из питона ручки дергают

Основа на C++ и С, на питоне - всякая мелочевка, вроде некритичных к скорости расширений, диалогов и пр.

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

а ты сначала скобки и пробелы расставь!

лисперы скобки не читают! (с)

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

на питоне - всякая мелочевка, вроде некритичных к скорости расширений

Ну вот и суровая правда о «скорострельном питоне в блендере»

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

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

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

Bioreactor> Функцианальщина в реальной жизни никому не нужна.

Странно. Почему тогда тот же Кармак начал её восхвалять?

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

LISP - это на слэнге специфическое произношение queer (faggot) публики (гуглите:))).

Поверхностное гугление говорит, что это не более чем стереотип. Так же, как и в русском слово «противный». Gimp вон на сленге вообще означает «анальный раб», и ниче же, живем :3

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

Ну вот и суровая правда о «скорострельном питоне в блендере»

скриптование и гуй - это разумное и правильное применение питона, вообще связка С и С++ плюс Python - классика

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

Ну вообще-то, это логично. Позволяет реализовать функции произвольной арности не через жопу - раз. Два - если я пишу (f arg1 ... argn), то почему я вдруг должен такую же функцию (+/-/*//) засовывать между аргументов? Мне так этого не хватает в не-лиспе.

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

Какая еще инфиксная нотация? ВОТ ТАК СЛИВ!11

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

если я пишу (f arg1 ... argn), то почему я вдруг должен такую же функцию (+/-/*//) засовывать между аргументов?

Такова математическая нотация: f(x), 2 + 3. Или вы, может, со своим лишпом, и математику неправильной хотите объявить? Математику переделать, людей заставить писать батарейки для этого скобкоужаса — все ради того, чтобы несколько наркоманов были довольны.

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

(+ 2 3) с моей субъективной точки зрения действительно удобнее и читабельней, чем 2 + 3, только я, в отличие от упомянутых выше фриков, не пытаюсь вдолбить это окружающим.

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

Отлично, осталось обосновать что между ЯП и математической нотацией должно быть что-то общее.

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

Или вы, может, со своим лишпом, и математику неправильной хотите объявить?

Нет. Я ответил на твой вопрос.

Такова математическая нотация: f(x), 2 + 3.

Ясненько.

Тут вот еще какое дело - s-expressions очень удобны для реализации не слишком ресурсоемкого разбора кода и обеспечения гомоиконности языка, наверное. Вот в Io & Tcl, например, обычная нотация, и там это достигается большими жертвами.

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

Вот в ... Tcl, например, обычная нотация, и там это достигается большими жертвами.

Если это про арифметику, то с какой-то там версии в добавок к expr появились функции tcl::mathop::+ и т.д.

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

заставить писать батарейки для этого скобкоужаса

скобкоужаса

Ваш панический страх перед чем-то незнакомым и необычным понятен. ;-) Надеюсь он не придет к вам ночью во сне.

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

осталось обосновать что между ЯП и математической нотацией должно быть что-то общее

Айверсон обосновал

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

(+ 2 3) ты считаешь удобней и читабельней

Не читабельнее, но логичнее: функция «+» применяется к 2 и 3. Поэтому очень удобно писать:

(apply '+ '(2 3))

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

Или вы, может, со своим лишпом, и математику неправильной хотите объявить?

Программирование имеет довольно опосредованное отношение к математике. Лисп тем более. Что не значит, что на Лиспе нельзя написать вещи, полезные математикам - Maxima.

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

(+ 2 3) ты считаешь удобней и читабельней, чем 2 + 3

Это почти одинаково

А вот (/ (+ a b c d) e f g)) гораздо понятнее, чем (a+b+c+d)/e/f/g.

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

Такова математическая нотация: f(x), 2 + 3

А по-человечески всё равно говорят «Площадь треугольника равна отношению произведения его сторон к учетверенному радиусу описанной окружности», а не "... равна первая сторона умножить на вторую сторону умножить на третью сторону разделить на четыре разделить на радиус описанной окружности". На лиспе дословно (/ (* a b c) (* 4 r)). «/» = «отоншение», «*» = «произведение».

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

имеет чёрный пояс в тхэквондо

Лучше бы он имел пояс в CL.

no-such-file ★★★★★
()
Ответ на: комментарий от Deleted

Такова математическая нотация: f(x), 2 + 3

Это в арифметике. В алгебре часто пишут и так (+, a, b), т.к. операция может быть и не бинарной, а записывать нужно как-то унифицировано.

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

А как записать тренарную операцию?

Ну так ты же записал не тернарную операцию.

И, собственно, если речь заходит о тернарных операциях, слово «часто» уже не применимо.

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

Ну так ты же записал не тернарную операцию.

Ну так тут приводятся глупые арифметические примеры с бинарными операциями.

если речь заходит о тернарных операциях, слово «часто» уже не применимо

В общей алгебре вполне применимо. Да и в лиспе + многопозиционная операция.

no-such-file ★★★★★
()
Ответ на: комментарий от tailgunner

...тебе лично

Ты вслух как скажешь «отношение суммы a, b, c и d и произведения e, f и g» или «скобка открывается, a плюс b плюс c плюс d, скобка закрывается, разделить на e, потом на f, потом на g»?

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

Ты вслух как скажешь

Операция деления, у которой 4 аргумента, выглядит «гораздо понятнее» только для немногих.

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

А вот (/ (+ a b c d) e f g)) гораздо понятнее, чем (a+b+c+d)/e/f/g.

Я лишп конечно люблю, но арифметика ужасная. В некоторых высосанных из пальца случаев как у тебя запись может и похожая и понятная, но в реальности в коде редко складывают, умножают или делят более чем два аргумента, поэтому плюсов от (+ arg1 ... argN) мало, а скобок дофига.

a/(a+b*c-d/e) ==>
(/ a (+ a (* b c) (- (/ d e))))
или
(/ a (- (+ a (* b c)) (/ d e)))

Ну глаза же сломаешь!

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

Только в лицо ему это не говори

Он не распарсит смысл величайшего творения постсоветского новояза)))

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

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

naryl ★★★★★
()
Ответ на: комментарий от no-such-file

В точку. Это преимущество префиксного синтаксиса, кстати, Айверсон тоже упоминает.

Странно, вообще, что тов. Buddhist привёл эту статью в доказательство своей точки зрения. Она скорее доказывает обратную.

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

Только в лицо ему это не говори

имеет чёрный пояс в тхэквондо[2], он неоязычник[3], политический анархист[4] и выступает за право носить и использовать огнестрельное оружие[5].

Из этого как-то следует, что он еще и идиот? :)

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

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

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

Так с этим никто не спорит вроде бы.

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

Ну глаза же сломаешь!

У лисповой схемы есть ещё один плюс: если надо, работать, например с матрицами, то в лиспе я просто пишу (m- (m+ (m* a b) c) d), а в питоне это превращается в matrix.minus(matrix.plus(matrix.mult(a, b), c), d). Аналогично, операции с множествами. А ели нужна чистая арифметика, так в cl тоже можно (nfx (a / (a + b * c - d / e))), а в Racket (a . / . ((a . + . (b . * . c)) - (d . / . e))

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

а в питоне это превращается в matrix.minus(matrix.plus(matrix.mult(a, b), c), d)

А в С++ напишешь a*b+c-d :)

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

ЗЫ Запись в ракете совсем ужасна.

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

В Python есть перегрузка операторов.
Так что там тоже будет:
a * b + c - d
как и в C++
(тут многие ребята умные, конечно, но постоянно спотыкаются на своем ЧСВ: не знаю @ но критикую)

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

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

  1. При объявлении переменной. C++-way.
  2. При вызове операций. CL-way.
  3. При формировании значения переменной. Python-way.

С точки зрения очевидности кода, лично я бы отдал предпочтение чему угодно, но не 3.

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

В Python есть перегрузка операторов.

Во что будешь перегружать векторное произведение? x — не оператор. Или ⊗. Или операции над множествами: ∈, ⊕, ∩, ∪, \, ...

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