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

У аллегро КЛ тоже есть экспресс эдишн, что для института вполне хватит. Если какой-нибудь серьезный рисёч, то LW с Franz могут предоставить существенные скидки.

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

> открываем систему (пусть базовые функции, да хотя бы для институтов

LispWorks personal - полностью базовый LW, но с ограниченным хипом и продолжительностью непрерывной работы 5 часов.

это, простите, несерьёзно, эдак и Allegro CL Express Free Edition доступен, пока не появится что-нибудь уровня (я не про качество, а про функционал) Visual Studio Express + .Net, позволяющее без особых костылей реализовывать полный цикл разработки в несложных случаях - прогресса не будет

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

> хип-то ладно, но «продолжительностью непрерывной работы 5 часов.» ...

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

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

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

Пральна, CL - это для илиты.

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

У аллегро КЛ тоже есть экспресс эдишн, что для института вполне хватит. Если какой-нибудь серьезный рисёч, то LW с Franz могут предоставить существенные скидки.

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

вот попробуйте при том при всём побыть оппонентом у товарищей-экспертов, которые заявляют что С++ (а то ещё и дельфи какой, чур меня) достаточно для выполнения данной работы и париться совсем не надо - и ведь правы, по тьюрингу

в 90% начальство выбирает лёгкий путь, у него другие проблемы есть, чтобы ими заниматься

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

хип-то ладно, но «продолжительностью непрерывной работы 5 часов.» ...

Университетская пара 1.5 часа ;)

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

Вроде как, с шутаута убрали неудобный результат свизарда?

поэтому и говорю что не особо показатель :) но тенденция всё равно прослеживается

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

> прогресса не будет

только в ваших мечтах

что ты можешь знаешь о моих мечтах, анонимный комментатор?

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

> Даже майкрософт так не делает. Это просто жмодство.

Жмотство? Люди работают над совершенствованием продукта + 24/7 суппорт. Найди дурака который бесплатно все это сделает.

Школьник? Деньги начнешь зарабатывать, поймешь.

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

С шутаута убирают «альтернативные» варианты решений, что вполне логично. Сравнивать надо работу одинаковых алгоритмов.

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

Шутаут тестирует только арифметику и циклы. Неугодные тесты оттуда убирают. И даже в том, что осталось, SBCL по некоторым тестам быстрее явы.

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

> хип-то ладно, но «продолжительностью непрерывной работы 5 часов.» ...

Университетская пара 1.5 часа ;)

спасибо, Кэп, для обучение текущих версий с головой хватает, проблема в том чтобы мотивировать аспирантов всяких на исследования с использованием lisp

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

> что ты можешь знаешь о моих мечтах, анонимный комментатор?

мне пофиг. ты в обсуждаемой теме, как и в КЛ, не шаришь.

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

> SBCL по некоторым тестам быстрее явы.

По _некоторым_ - конечно, но в 90% случаев производительность SBCL с джавой не сравнить. Ну и кроме того, если аннотации типов в sbcl не расставить (после чего код начинает выглядеть как полное говно) то все совсем уж тухло.

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

это, простите, несерьёзно, эдак и Allegro CL Express Free Edition доступен, пока не появится что-нибудь уровня (я не про качество, а про функционал) Visual Studio Express + .Net, позволяющее без особых костылей реализовывать полный цикл разработки в несложных случаях - прогресса не будет

Другими словами, нет свободных имплементаций с красиво выглядящим IDE? ;)

Ну есть CCL, там IDE для мака. В омереке не макбук только у диких отсталых европейцев.

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

Люди работают над совершенствованием продукта + 24/7 суппорт. Найди дурака который бесплатно все это сделает.

вот и «ылита» подтянулась, ещё один маркетологический девственник :) посмотри как google распространяет свой пресловутый AppEngine - за копьё, а базовый аккаунт вообще задаром - и имеет профит нехилый с того, как же так?

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

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

ты в обсуждаемой теме, как и в КЛ, не шаришь.

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

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

поэтому и говорю что не особо показатель :) но тенденция всё равно прослеживается

Прослеживается тенденция, что 99% народа уверено в том, что все программы - строго вычислительного характера. Т.е. утром на работу пришёл, компьютер включил, хренотень запустил, она все доступные ядра на 100% загрузила, и так следующие 8 часов + 1 час на обеденный перерыв. Поэтому для написания хренотеней нужно использовать язык, для которого доступен максимально эффективный компилятор. Некоторые идут ещё дальше, и максимально эффективным компилятор с максимально эффективными установками пересобирают всю систему. Более того, находятся в творческом поиске лучших установок для конкретной софтины.

Но это всё бред, почти весь существующий софт - event-driven.

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

спасибо, Кэп, для обучение текущих версий с головой хватает, проблема в том чтобы мотивировать аспирантов всяких на исследования с использованием lisp

Што ты, родной! У аспирантов одна мотивация - в армию не загреметь.

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

По _некоторым_ - конечно, но в 90% случаев производительность SBCL с джавой не сравнить. Ну и кроме того, если аннотации типов в sbcl не расставить (после чего код начинает выглядеть как полное говно) то все совсем уж тухло.

Я вообще удивляюсь, как SBCL так близко к топу подобрался. Динамически типизированный язык, всё-таки, да и компилятор по степени навороченности лет так на 10-15 отстал.

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

> Visual Studio Express + .Net, позволяющее без особых костылей реализовывать полный цикл разработки в несложных случаях - прогресса не будет

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

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

Другими словами, нет свободных имплементаций с красиво выглядящим IDE? ;)

нет, пойнт в другом - нельзя, к примеру, просто так взять и выполнить мелкий фриланс на лиспе (какие-то можно, но в 90% случаев - высказывание верно), придётся попу рвать, придумывать во что это всё завернуть, а используя Visual Studio Express можно - нафига тогда париться?

Ну есть CCL, там IDE для мака.

вот платформенная фрагментация - это ещё один серьёзный бич CL

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

Прослеживается тенденция, что 99% народа уверено в том, что все программы - строго вычислительного характера. [..] Но это всё бред, почти весь существующий софт - event-driven.

Вы сравниваете «вычислительный» софт и EDD-софт? простите, но это вопрос из серии - что лучше: Windows или Assembler, event-driven софт или нет - это вопрос проектирования архитектуры, а свойство «вычислительности» - есть атрибут решения целевой задачи

//уж простите мне термин «вычислительность» :)

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

> Scheme - говно, недостойное внимания.

Common Lisp - говно, недостойное внимания.

C++ - говно, недостойное внимания.

Ну C#-то уж точно наше всё?

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

Што ты, родной! У аспирантов одна мотивация - в армию не загреметь.

а у говнарей - чтоб пиво подешевше было, и пофиг что с димедролом

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

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

вот платформенная фрагментация - это ещё один серьёзный бич CL

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

Ну и ваще, я его дней 10 писал, а на лиспе подобное за вечер написал бы. Оплата, правда, почасовая была, и я брал столько, во сколько себя оцениваю. Поэтому на лиспе заработал бы сущие копейки, а на крестах - о-го-го - ползарплаты наварил ;)

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

И ваще, это вы привыкли, что джава и gcc существует для всех популярных платформ и осей в любых, практически, сочетаниях. А вот попробовали бы лет 20 назад софтину с watcom/os2 с ваткомовскими заточками (ибо на ваткоме крутые хацкеры писали) на bcc/dos перетащить...

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

Вы сравниваете «вычислительный» софт и EDD-софт? простите, но это вопрос из серии - что лучше: Windows или Assembler, event-driven софт или нет - это вопрос проектирования архитектуры, а свойство «вычислительности» - есть атрибут решения целевой задачи

Хорошо, переформулирую вопрос: как часто вы в своих программах считаете Мандельброта?

И если ещё дальше пойти, в крутые-то вычисления, то на BlueGene каком-нибудь только голая сишечка, да фортран есть. В ипостаси gcc, плюс от IBM наборчик, который с gcc не то, чтобы очень совместим, но умеет генерировать код под второй мат.сопроцессор и т.п.

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

Ты неправильно рассуждаешь. Кто тебя заставляет быстро писать на лиспе? :). Наоборот, лисп позволяет набрать заказов побольше и всем лапшу вешать на уши про сложность реализации :)

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

> Visual Studio Express + .Net, позволяющее без особых костылей реализовывать полный цикл разработки в несложных случаях - прогресса не будет

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

во-первых, в случае поделки от MS ничего покупать не надо, просто она малец обрезанная (в части всевозможных профайлеров, систем тестирования, и т.д., на что всем покласть) и недоукомплектованная либами (как то - бесполезный mfc, полезный openmp и т.д.), но компилятор там ровно тот же что и в professional/team/ultimate/whatever edition

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

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

Всё продумано же.

Ну, вспомните сколько занимает реализация проекта среднего размера на 'C'. Это около 6 месяцев. Не достаточно долго чтобы парень с женой и детьми мог заработать себе на нормальное существование. Попробуйте тот же проект реализовать на C++ , и что получится? Вам понадобится 1-2 года. Не правда ли, это замечательно?

-- Бьерн Страуструп

http://cs.mipt.ru/docs/comp/rus/develop/other/stroustrup_interview/

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

> Динамически типизированный язык, всё-таки

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

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

> Ну C#-то уж точно наше всё?

Видимо, так.

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

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

А как же «ИЛИТИЗМ»? Не, лучше пускай все также останется. Лисп только для «илиты», остальные пускай в похапешном или плюсанутом говне копаются.

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

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

во-первых, BSD - это Вам не линукс

во-вторых, такой расклад явно свидельствует:
1. о недостаточной проработке проекта во время планирования
2. также о том что Вы относились к данной работе именно как к чему-то копеечному и несерьёзному
3. об отсутствии опыта написания портируемого софта между данными платформами (у Стивенса чего-то всё работает)
4. о том что Вы использовали системо-зависимые библиотеки в своём проекте

и причём тут фрагментация?

И ваще, это вы привыкли, что джава и gcc существует для всех популярных платформ и осей в любых, практически, сочетаниях. А вот попробовали бы лет 20 назад софтину с watcom/os2 с ваткомовскими заточками (ибо на ваткоме крутые хацкеры писали) на bcc/dos перетащить...

вот Вас не смущает всего-то 20-ти летнее отставание инфраструктуры, причём на ровном месте?

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

MFC/ATL и пр. - в майкрософтовских SDK есть(в winddk, если конкретно)

ну, это и openmp можно выдрать, поставив себе триалку msvc professional :)

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

>тем больше людей пойдёт развивать открытые системы - профит же

А илитизм как же? Нет, что ты, даже вполне разумное предложение считать CL самым обычным языком общего назначения натыкается на волну критики.

Да еще наверняка вышеупомянутые компании не готовы к росту популярности CL, им в таком случае придется перестраивать модель деятельности ;)

Да и лисп-программистам, степенно ковыряющим какую-нибудь бизнес-логику, древнюю как экскременты мамонта (на то она и бизнес-логика), совершенно ни к чему чтобы их заоблачный прайс падал до реальных значений, как у тех же программистов, ковыряющих бизнес-логику (такую же древнюю) на PL/SQL.

А еще, всем вышеперечисленным совершенно ни к чему чтобы лисп соревновался с той же JVM/.NET/C++ в ПО-НАСТОЯЩЕМУ ЧЕСТНОЙ борьбе, идентичной предметной области, идентичной (преимущественно низкой) квалификации участников проекта, маркетинговых требований и т.п. А то ведь может получиться так что метапрограммирование, широко используемое в JVM, напрочь зарулит лисповское, или что штатные средства мониторинга JVM напрочь зарулят REPL.

Кто же его знает? Ведь честной борьбы еще не случалось, правда ведь?

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

> Мало того, что с версиями библиотек полная порнография была: кое-что пришлось переписывать под старую версию, кое-какие библиотеки пришлось на фре обновлять

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

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

Да и лисп-программистам, степенно ковыряющим какую-нибудь бизнес-логику, древнюю как экскременты мамонта (на то она и бизнес-логика), совершенно ни к чему чтобы их заоблачный прайс падал до реальных значений, как у тех же программистов, ковыряющих бизнес-логику (такую же древнюю) на PL/SQL.

придётся Кобол учить и прочие упоротые языки и сдвинутые диалекты С++ для мейнфреймов - бида, бида :)

А еще, всем вышеперечисленным совершенно ни к чему чтобы лисп соревновался с той же JVM/.NET/C++ в ПО-НАСТОЯЩЕМУ ЧЕСТНОЙ борьбе, идентичной предметной области, идентичной (преимущественно низкой) квалификации участников проекта, маркетинговых требований и т.п.

да пофиг с ней с высокой квалификацией, вон с С++ тоже поди разберись, лет 10 надо поработать чтобы нормально код писать, однако ж пишут

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

Кто же его знает? Ведь честной борьбы еще не случалось, правда ведь?

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

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

А как же «ИЛИТИЗМ»?

он несъедобный

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

Давай только ты вместо «Лисп» будешь использовать «CL»?

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

Хорошо, переформулирую вопрос: как часто вы в своих программах считаете Мандельброта?

последний раз лет 10 назад было :)

И если ещё дальше пойти, в крутые-то вычисления, то на BlueGene каком-нибудь только голая сишечка, да фортран есть. В ипостаси gcc, плюс от IBM наборчик, который с gcc не то, чтобы очень совместим, но умеет генерировать код под второй мат.сопроцессор и т.п.

всё так, но причём тут EDD/non-EDD?

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

>да пофиг с ней с высокой квалификацией

Вроде как у CL программистов в среднем квалификация выше. Хотя и это может быть тоже миф. А может быть дело в том что CL программисты являются более сильными экспертами предметный области (иначе весь смысл применения CL теряется).

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


Ага и за эти 10 лет понять, что С++ никакого отношения к ООП не имеет ;) Вот тогда можно получить высокое звание «новичок в С++» ;))

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

во-первых, BSD - это Вам не линукс

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

во-вторых, такой расклад явно свидельствует:

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

2. также о том что Вы относились к данной работе именно как к чему-то копеечному и несерьёзному

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

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

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

2. Недостаточно морщил лоб? :)

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

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

вот Вас не смущает всего-то 20-ти летнее отставание инфраструктуры, причём на ровном месте?

Ну возьмите, напишите SSA для SBCL, раз вас это так смущает?

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

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

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

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

всё так, но причём тут EDD/non-EDD?

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

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

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

вообще-то достаточно в самом начале прочитать труп страуса и узнать, что С++ это такой «C with Classes», сам автор сам термин ООП практически и не упоминает ЕМНИП, хотя если начинать с цветастых книжек про «ООП в С++», то да - возможно придется 10 лет учиться ;)

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