LINUX.ORG.RU

Какашки в Common Lisp


7

4

Предлагаю учёным мужам в этом топике собрать и обсудить проблемы в языке Common Lisp. Кому что не нравится?

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

Не нравится неполная интеграция CLOS в язык: распознавание класса в CLOS для стандартных лисповских типов ещё работает, но не для своих типов, объявленных через deftype.

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

Не нравится реализация пакетов (неймспейсов). Удобно иметь вложенные пакеты, но их нет. Возможность задания никнейма для пакета в самом пакете - членовредительская, ибо каждый гомо сапиенс для своей мегабиблиотеки задаёт двух-, трёхбуквенный никнейм. Букв в общепринятой латинице и так мало (опустим перечень адских пыток, которым после смерти будут подвергнуты те, кто пишет комментарии не на английском языке или вообще использует не-ASCII алфавит для идентификаторов), так ещё количество их кобминаций ограничено любовью человеков к акронимам и красивым сокращениям.

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

loop - какашка. Это не лисп. Точка.

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

unwind-protect - хорошо, но от попыток человеком сэмулировать продолжения для CL хочется икать. Такие trade-off вполне понятны, но лучше бы unwind-protect ограничили.

Ну и более мелкие ляпы в стандарте, типа (elt sequence index), но (nth index list).

Да, этот пост написан в Емаксе, запущенно под лисповым оконным менеджером человеком, получающем деньги за написание лиспокода :)

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

> Ну а как же пофиксить? Если в каталог положить сорец библиотеки, которая глючит на бзд/другой версии гцц, то она ж от этого магически не исцелится?

это уже другая проблема, и к ЯП она отношения не имеет - с тем же CL точно такие же фокусы

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

это уже другая проблема, и к ЯП она отношения не имеет - с тем же CL точно такие же фокусы

Ну я вот про то же.

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

>лет 10 надо поработать чтобы нормально код писать

Ага и за эти 10 лет понять, что С++ никакого отношения к ООП не имеет

имеет, не имеет, кого это имеет, если задачи решает?

//пуризм - это основная характеристика некоторых лисперов

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

> //пуризм - это основная характеристика некоторых лисперов

Как раз функциональщиков, коим Macil и является.

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

>имеет, не имеет, кого это имеет, если задачи решает?

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

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

>вообще-то достаточно в самом начале прочитать труп страуса и узнать

Ну, когда Страус создавал свой C++, никакого ООП и не было. Он появился в начале 90-х стараниями маректологов. Так что Страус несовременен.

Нужно читать Александреску.

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

Назовите 5 существенных отличий бзд от линукса для обычной программы?

ядра разные, и уже хватит

а вот что Вы называете «обычной программой» и почему у Вас она сломала ноги (ведь ничего ж не отличается :)) - это тема для отдельного исследования

>1. о недостаточной проработке проекта во время планирования

1. В чём это выразилось? :)

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

3. об отсутствии опыта написания портируемого софта между данными платформами (у Стивенса чего-то всё работает)

4. о том что Вы использовали системо-зависимые библиотеки в своём проекте

3. Ой-вей! Почему люди до сих пор думают, что Моисей неправильно евреев по пустыне водил?

4. Нет. Исходя из чего этот вывод был сделан? Для и для других пунктов....

потому что у меня «простые программы» работают на связке windows/linux будучи писанными под одной из платформ, как Вы умудрились увалиться на linux/bsd, учитывая Ваш опыт, у меня в голове не помещается, значит скорее всего писали по-привычке, на скорую руку, ну или юзали хаки, у меня другого объяснения нет, а у Вас?

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

При чём здесь вычисление Мандельброта и эффективность компилятора? При чём здесь Ява и массивные вычисления?

вот и ответьте, а потом ответьте как это всё связано с event-driven моделью

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

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

не поясните плиз, как же неправильные применения С++ связаны с чистотой реализации парадигмы ООП в С++? а то Ваша логика от меня ускользает

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

Ну, когда Страус создавал свой C++, никакого ООП и не было. Он появился в начале 90-х стараниями маректологов.

я правильно понял, что smalltalk-80 написали маркетологи в 90-м году? :)

//назвали, наверное, в честь олимпиады в СССР

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

ядра разные, и уже хватит

Понятно.

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

Вообще не уделял. Справедливо предположил, что проблем особых не возникнет - так, обычные несовместимости версий библиотек, да заморочки с boost. Всё так и вышло.

потому что у меня «простые программы» работают на связке windows/linux будучи писанными под одной из платформ, как Вы умудрились увалиться на linux/bsd, учитывая Ваш опыт, у меня в голове не помещается, значит скорее всего писали по-привычке, на скорую руку, ну или юзали хаки, у меня другого объяснения нет, а у Вас?

Мой опыт говорит, что когда человек утверждает о полной безпроблемности работы программы, написанной под одной платформой и запущенной под другой, то, скажем так, он чего-то не договаривает.

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

вот и ответьте, а потом ответьте как это всё связано с event-driven моделью

Я уже много лет на этом сайте говорю, что практически весь софт - event-driven, и качество компилятора или скорость работы vm/рантайма ни на что не влияет.

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

>не поясните плиз, как же неправильные применения С++

Есть такая прикольненькая библиотечка MFC. Потрясающий пример того во что выливается написание кода на С++ в smalltalk-стиле. wxWindows/wxWidgets из той же оперы.

Можно сравнить с широко известной в очень узких кругах библиотечкой InterViews.

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

> wxWindows/wxWidgets из той же оперы.

оно глючное, но по другой причине, а что именно вам не нравится в том, как она устроена?

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

> Ну, когда Страус создавал свой C++, никакого ООП и не было. Он появился в начале 90-х стараниями маректологов. Так что Страус несовременен.

4.2

Нужно читать Александреску.

4.2

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

>Есть такая прикольненькая библиотечка MFC. Потрясающий пример того во что выливается написание кода на С++ в smalltalk-стиле.

Ну и во что же выливается? У неня за годы кодинга на С++ как-то выработалось больше доверия к майкросовтовской инфраструктуре нежели к говнецу из std::. Неэстетично, зато дешево надежно и практично.

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

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

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

ну, вот практика и показала некоторую ошибочность Ваших суждений

//не знаю насчёт «особости» проблем, но когда сравнительно простую программу отлаживают неделю - это как-то уже не очень

> потому что у меня «простые программы» работают на связке windows/linux будучи писанными под одной из платформ,

Мой опыт говорит, что когда человек утверждает о полной безпроблемности работы программы, написанной под одной платформой и запущенной под другой, то, скажем так, он чего-то не договаривает.

не, ну реально простая программа была :) там самое сложное что было - троичное дерево (TST), писалась для бенчмарка под windows, после чего посторонние люди взяли этот кусок и без модификаций (!) начали использовать в своём коде, у которого таргет-платформой был linux, всё скомпилилось, заработало и проблем не было, ы?

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

>Я уже много лет на этом сайте говорю, что практически весь софт - event-driven, и качество компилятора или скорость работы vm/рантайма ни на что не влияет.

Перефразирую в более ЛОРовском стиле: практически весь софт а) 99,99% процентов своего времени не делает ВООБЩЕ НИЧЕГО, б) основное замедление в его работу вносит прослойка между стулом и монитором, в) абсолютно пофиг сколько выполняется действие: 0,001 или 0,0001 сек (а ведь разница на ПОРЯДОК), г) основной задачей языка/библиотеки/фреймворка становится обслуживание event-driven модели (привет Smalltalk!).

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

Я уже много лет на этом сайте говорю, что практически весь софт - event-driven

так он практически весь event-driven, если посмотреть под определённым углом, мне непонятно только зачем Вы начали отделять софт для интенсивных вычислений в отдельную ветку? :)

качество компилятора или скорость работы vm/рантайма ни на что не влияет.

ну знаете, это, мягко говоря, сильное преувеличение, если бы всё так было как Вы говорите, рынка development tools не было бы и в помине

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

Расслабься, Симулу сделали еще раньше Смаллтолка.

и её, конечно, тоже «написали маркетологи в 90-м году»?

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

Перефразирую в более ЛОРовском стиле: практически весь софт а) 99,99% процентов своего времени [..]

к софту не прменимо понятие «своего времени», привет «оналитегам»

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

>а что именно вам не нравится в том, как она устроена?

Да всем она мне нравится... Только вот не на С++ она написана ;)

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

ну, вот практика и показала некоторую ошибочность Ваших суждений

И в чём же они были ошибочные? Проблем-то особых и не возникло же ;) Так, обычная галиматья, присущая вещам по их природе.

не, ну реально простая программа была :) там самое сложное что было - троичное дерево (TST), писалась для бенчмарка под windows, после чего посторонние люди взяли этот кусок и без модификаций (!) начали использовать в своём коде, у которого таргет-платформой был linux, всё скомпилилось, заработало и проблем не было, ы?

Посмотрите в кишки boost'у: каждый ifdef компилятор_версия кровью выплакан.

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

> Да всем она мне нравится... Только вот не на С++ она написана ;)

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

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

>и её, конечно, тоже «написали маркетологи в 90-м году»?

Ты разницу между языком и парадигмой не ощущаешь?

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

так он практически весь event-driven, если посмотреть под определённым углом, мне непонятно только зачем Вы начали отделять софт для интенсивных вычислений в отдельную ветку? :)

Я намекаю, что shootout от реальной жизни оторван чуть более, чем полностью.

ну знаете, это, мягко говоря, сильное преувеличение, если бы всё так было как Вы говорите, рынка development tools не было бы и в помине

Рынок dev.tools - это рынок flexibility. Джава/дотнет из-за обширного числа уже готовых фенечек любимы, а не каких-то эпических скоростных характеристик.

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

> ну, вот практика и показала некоторую ошибочность Ваших суждений

И в чём же они были ошибочные? Проблем-то особых и не возникло же ;) Так, обычная галиматья, присущая вещам по их природе.

ну знаете, отладка в течении недели - это многовато имхо, можно было бы денёк потратить и сократить отладку с недели до 1-2 дней

Посмотрите в кишки boost'у: каждый ifdef компилятор_версия кровью выплакан.

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

ifdef'ы чаще всего разруливают платформозависимые места, ну и частенько встречаются ifdef'ы, сглаживающие, скажем, особенности мировоззрения программистов microsoft compiler team

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

>и её, конечно, тоже «написали маркетологи в 90-м году»?

Ты разницу между языком и парадигмой не ощущаешь?

а, месье немного слоупоковат... поясню: раз в Симуле в 76 году (она Вам так нравится) появились зачатки объектной ориентрованности, раз smalltalk в 80 году уже был объектно-ориентированным по самые помидоры не могли ООП придумать маркетологи в 1990 году, компренде ву?

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

ну знаете, отладка в течении недели - это многовато имхо, можно было бы денёк потратить и сократить отладку с недели до 1-2 дней

Отладка целую неделю? :-o Да вы плохо о Common Lisp думаете! То, что на CL писать вечер, на крестах 10 дней ваять.

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

Это называется «платформа». Да, хреновенькая, но в мире крестов - не самый плохой вариант.

ifdef'ы чаще всего разруливают платформозависимые места, ну и частенько встречаются ifdef'ы, сглаживающие, скажем, особенности мировоззрения программистов microsoft compiler team

ifdef'ы в реальных библиотеках говорят о том, что в мире крестов нет общего понимания и согласия. Поэтому CL со своими #+ #- и наличием/отсутствием фич на сочетаниях платформы/компилятора/его версии ничем не выделяется.

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

Я намекаю, что shootout от реальной жизни оторван чуть более, чем полностью.

я знаю это, более того, я это указал в своём исходном сообщении :)

Рынок dev.tools - это рынок flexibility. Джава/дотнет из-за обширного числа уже готовых фенечек любимы, а не каких-то эпических скоростных характеристик.

рынок dev.tools несколько больше, иначе все бы уже давно сидели на фенечках, а не ~70-80% как сейчас

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

> То, что на CL писать вечер, на крестах 10 дней ваять.

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

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

То, что на CL писать вечер, на крестах 10 дней ваять.

да, а на assembler ещё дольше, но это же не значит что он никуда не годится :)

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

Это называется «платформа»

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

Да, хреновенькая, но в мире крестов - не самый плохой вариант.

да нормальная она вполне, если не ожидать наличия кнопки - «сделать хорошо»

Поэтому CL со своими #+ #- и наличием/отсутствием фич на сочетаниях платформы/компилятора/его версии ничем не выделяется.

каждый раз как я собираюсь начать реализовать очередной проект на CL моё желание убивает именно этот вопрос, и CL сильно выделяется в этом вопросе, в отличие от того же O'Caml например

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

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

Мы негодуем: треклятые библиотекари нифига по нашей тематике не написали, самим приходится городить :( А то всякую фигню ненужную лепят, типа обёртку на wx.

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

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

каждый раз как я собираюсь начать реализовать очередной проект на CL моё желание убивает именно этот вопрос, и CL сильно выделяется в этом вопросе, в отличие от того же O'Caml например

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

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

> Мы негодуем: треклятые библиотекари нифига по нашей тематике не написали, самим приходится городить :( А то всякую фигню ненужную лепят, типа обёртку на wx.

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

Впрочем, сишникам/крестовикам ещё хуже: они обёртки над лиспом, хацкелем, да даже жавой сделать не могут


во-первых 4.2, как минимум обертку вокруг Java написать проблем нет, во-вторых - писать обертку над лиспом просто бессмысленно, это ж рекурсия получится ;)

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

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

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

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

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

нет, затем что:

а) данные обертки быстро забрасываются, обрастают мохом, на их месте вырастают новые и т.п.
б) лисперы не способны родить в своей среде что-то полноценное

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

> раз в Симуле в 76 году (она Вам так нравится) появились зачатки объектной ориентрованности

В 67, не 76-м. Да и вообще Симула была DSL - языком для имитационного моделирования :)

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

> раз в Симуле в 76 году (она Вам так нравится) появились зачатки объектной ориентрованности

В 67, не 76-м.

да, Вы правы, писал по памяти и не того :) но зато цыферки правильно помню

Да и вообще Симула была DSL - языком для имитационного моделирования :)

1. но всё же в неё были заложены некоторые ООП идеи
2. дальнейшие вопросы по этой теме к Macil, это он за Симулу ратовал

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

> 1. но всё же в неё были заложены некоторые ООП идеи

Были, да. Но она прошла почти незамеченной, и в 70-х все исследования были направлены на нормальные АТД («А» в данном случае «абстрактные», не алгебраические). А потом «something, somwhere has gone terribly wrong» (с), и ублюдочная хрень Смоллтока завладела умами.

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

> данные обертки быстро забрасываются, обрастают мохом,

на их месте вырастают новые и т.п.

лисперы не способны родить в своей среде что-то полноценное



Разруха, как известно, не в компиляторах/инфраструктуре/библиотеках, а в головах (с). И всему виной одна единственная вещь - структура сообщества. Т.е. не лисп, а именно «лисперы». Которые вовсе не находятся на острие прогресса, а по большей части застряли в прошлом. И это единственная, достойная упоминания «какашка» в Common Lisp. Всё остальное - полная ерунда, если посмотреть вокруг на то, какие языки пользуются большой популярностью.

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

>А потом «something, somwhere has gone terribly wrong»

+1 А откуда такая цитата?

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

в 70-х все исследования были направлены на нормальные АТД («А» в данном случае «абстрактные», не алгебраические)

про то что такое АТД я знаю :) исследования, Вы не поверите, и сейчас ведутся, только как проведение исследований связано с тонкой областью компиляторостроения?

А потом «something, somwhere has gone terribly wrong» (с), и ублюдочная хрень Смоллтока завладела умами.

значит уже 2 преимущества у неё есть: она липкая и живучая :)

а серьёзно, раз развитие в эту сторону пошло, значит были основания, не считаете?

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

И кто после этого захочет стать лиспером?

тред с таким заголовком должен агитировать ньюфагов? ОМГ!

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

Перезапусти, и делов-то. На сам рантайм ограничений нету.

Вы невнимательно читаете

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

> тред с таким заголовком должен агитировать ньюфагов? ОМГ!

Да, ладно. Признавать, что программируешь на C++, уже давно не солидно.

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