LINUX.ORG.RU

Lisp

 , , ,


1

7

Решил прокачать скиллы на CL. Несколько вопросов. 1)Ни одной вакансии.Почему? 2)Преимущества и недостатки для web? 3)Инфраструктура? 4)Есть идея проекта игровой тематики. Хочу использовать Lisp. Разумно? Если да то почему.Если нет то какие минусы и с какими сложностями и трудностями прийдется столкнуться?

Перемещено post-factum из web-development

Перемещено mono из talks

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

ФП это костыль в пайтоне

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

А вот скажите лучше, что такое есть в CL, для поддержки ФП, чего нет в питоне или перле?

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

что такое есть в CL, для поддержки ФП, чего нет в питоне или перле?

1. оптимизация хвостовых вызовов (не в стандарте, но почти во всех реализациях)

(defun iter (n) (when (> n 0) (...) (iter (- n 1))))

будет выполняться также эффективно, как цикл

2. Нормальные лямбды.

3. Нормальные замыкания.

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

что такое есть в CL, для поддержки ФП, чего нет в питоне или перле?

Выражения. Для стиля ФП должно быть важно, чтобы все или почти все было выражением, чтобы не было statement. Statement вынуждает использовать деструктивное присваивание.

И честно говоря, не понимаю этого ажиотажа вокруг ФП. Для стиля ФП не так уж и много надо: писать код, используя чистые функции. Раньше этим так не заморачивались. В том же PAIP слово «функциональный» встречается очень редко, хотя стиль ФП явно подразумевается. Обычно сначала пишется код в этом стиле, а потом код оптимизируется деструктивными операциями.

Действительно, очень много современных языков позволяют писать в стиле ФП. Они частично или полностью поддерживают этот стиль. Это абсолютно нормально. Это является результатом конвергенции и эволюции. Но тут возникает проблема самоидентификации у некоторых, и начинают придумывать ограничения, то да сё.

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

1. оптимизация хвостовых вызовов (не в стандарте, но почти во всех реализациях)

в перле есть

2. Нормальные лямбды.

тоже в перле есть

3. Нормальные замыкания.

и это в перле есть.

Перл - ФП язык?

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

Выражения. Для стиля ФП должно быть важно, чтобы все или почти все было выражением, чтобы не было statement. Statement вынуждает использовать деструктивное присваивание.

С этим я вынужден согласится

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

Вот об этом я и говорю. Если посмотреть, как тут уже предлагали, исходники библиотек для CL - такой уровень ФП легко достижим в любом современном языке. А кода на CL, с ФП как в хаскеле, например, я вообще не видел. Вот вы монады используете в CL?

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

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

можно. С этим я и не спорил.

А вот скажите лучше, что такое есть в CL, для поддержки ФП, чего нет в питоне или перле?

в отличие от CL, пайтон изначально не является языком с ФП. Там такое-же костыльное ФП, как ООП в C++. Только хуже, ибо синтаксис C достаточно гибкий и тупой, что позволяет легче костылить к нему костыли.

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

Выражения. Для стиля ФП должно быть важно, чтобы все или почти все было выражением, чтобы не было statement. Statement вынуждает использовать деструктивное присваивание.

++

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

с ФП как в хаскеле, например

Посмотри xmonad. Там ФП как в CL.

Вот вы монады используете в CL

Да. В виде блока (progn ...)

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

Statement вынуждает использовать деструктивное присваивание.

А монада ST не вынуждает?

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

Да.

Вот именно. А теперь вопрос: если ТС хотел ФП в вебе, зачем брать CL в котором полтора живых фреймворка, если с тем же успехом можно качать скилл ФП на перле, руби или (о боже) похапе?

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

пайтон изначально не является языком с ФП.

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

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

пайтон изначально не является языком с ФП.

Ну и кому до этого есть дело, если его все-таки можно использовать для ФП. Раз уж в язык запилили замыкания и функции-данные, то наверное это не с проста.

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

если ТС хотел ФП в вебе

Вообще-то в топике «Решил прокачать скиллы на CL.... Хочу использовать Lisp...». А ФП уже вторично как противопоставление основного подхода лиспа против мейнстримового ООП.

Всё-таки в CL основной инструмент цикла в стандартной библиотеке mapcar, а в Perl for(...). Также как регекспы удобней учить на Perl, несмотря на то, что соответствующие библиотеки уже даже в Си есть. А если именно «ФП в вебе», то брать надо Haskell (плюс какой-нибудь Happstack).

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

Да. В виде блока (progn ...)

Оценил ваш юмор.

Посмотри xmonad. Там ФП как в CL.

Что лишний раз показывает проблемы ФП.

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

Вообще-то в топике «Решил прокачать скиллы на CL.... Хочу использовать Lisp...». А ФП уже вторично

Вы плохо читали тему. Я специально спросил у ТСа - «почему лисп». На что был ответ: «Считаю что ФП гораздо разумнее использовать в своих проектах если заказчик и один из исполнителей ты сам. Стоит выбор: Haskell или Lisp. С Лиспом не знаком,но мой преподаватель советует Lisp так как вроде как лучше распараллеливать логику. »

Всё-таки в CL основной инструмент цикла в стандартной библиотеке mapcar, а в Perl for(...).

Во-первых в CL есть do и loop как основные инструменты цикла. mapcar делает не for, а foreach по списку, что, согласитесь, является частным случаем цикла.

Во-вторых в перле есть map, grep и т.п.

А если именно «ФП в вебе», то брать надо Haskell (плюс какой-нибудь Happstack).

Ну, если цель теоретическая - пощупать чистое ФП в вебе, то можно согласиться.

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

Вот об этом я и говорю. Если посмотреть, как тут уже предлагали, исходники библиотек для CL - такой уровень ФП легко достижим в любом современном языке. А кода на CL, с ФП как в хаскеле, например, я вообще не видел. Вот вы монады используете в CL?

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

Кстати, cl-cont частично снимает остроту нехватки монад и синтаксиса do, но я cl-cont почти и не использую. Потом, никто не сказал, что Haskell - это пример для подражания. В нем такое встречается порою, что сразу хочется развидеть. Вообще, я - сторонник компромиссов, и редко ограничиваюсь одним стилем или одной парадигмой, стараясь применять нужное по необходимости. Мне, например, нравится CLOS.

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

Некоторые говорят, что функциональный язык должен не только поддерживать стиль ФП сам по себе, но и чуть ли не принуждать писать в этом стиле. Утрирую немного, но примерно так. Это называется self-reinforcing loop.

Действительно, и Haskell, и clojure бьют по рукам, если не писать в стиле ФП. Scala же, напротив, очень либеральна. В ней можно писать в разных стилях. Она почти как Common Lisp. В последнем мне очень нравится то, что здесь можно писать в разных стилях. Язык не ограничивает свободу (это является причиной, почему на CL трудно писать в стиле ФП, если нет самодисциплины, и если человек почти ничего не знает об ФП).

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

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

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

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

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

Ну и кому до этого есть дело, если его все-таки можно использовать для ФП.

микроскопом тоже можно забивать гвозди.

Раз уж в язык запилили замыкания и функции-данные, то наверное это не с проста.

их уже везде запилили, жду вот в bash'е и в sed.

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

не. Я жду в стандарте bash. Такое я могу и в pure C накостылять. Не интересно.

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

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

Действительно, и Haskell, и clojure бьют по рукам, если не писать в стиле ФП.

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

Мне тоже непонятна такая тенденция, но она, увы, уже сложилась в некую традицию. Говорят ФП - подразумевают какой-нибудь ML или что-нибудь еще более жесткое.

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

Если кто-то в языке, который знает более-менее глубоко не может использовать ФП, значит ему есть еще чему поучиться. Лучше углубить свои знания на том, что ты уже прилично изучил - пользы будет гораздо больше, да и процесс пойдет быстрее, т.к. не нужно будет разбираться с синтаксисом, стандартными библиотеками и прочими мелочами.

Мне нравится CL. Я считаю, что это очень мощный, выразительный и красивый язык, но увы, он сейчас находится на обочине индустрии и я не могу рекомендовать изучать его тем, кто только начинает свою карьеру программиста. Быстро начать зарабатывать на CL не получится, поучаствовать в каких-то крупных, заметных проектах, чтобы получить хотя-бы опыт и признание - тоже. Пилить что-то свое годами? Для этого нужен другой источник дохода, т.е. человек должен уже занять какое-то место с другим языком.

Мне, например, нравится CLOS.

Ну это вообще отдельная история. Лучшей объектной системы я вообще не видел.

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

микроскопом тоже можно забивать гвозди.

Таки можно.

их уже везде запилили, жду вот в bash'е и в sed.

Ты что, на баше и так код-лапша. Не хватало еще на это ФП навернуть.

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

Таки можно.

но не нужно.

Ты что, на баше и так код-лапша.

ну это у кого как.

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

Согласен с тобой. Добавлю от себя, что имеет смысл учиться функциональному стилю на других более жестких языках, а потом применять в CL. И если автор темы желает писать на лиспе из-за ФП, то ему будет сложно, о чем многие здесь предупредили.

Теперь о лиспе (для тех, кто будет нас читать).

Мне нравится, что в LispWorks недавно добавили хорошую графику. Там есть anti-aliasing, продуманные графические порты (аля Graphics в .NET), метафайлы и прочие вещи. Есть неплохие нативные контролы, т.е. которые используют WinAPI, Cocoa или GTK и являются родными для каждой целевой платформы. Все это позволяет использовать лисп для серьезных проектов на десктопах (уже давно зачитываюсь презентацией InspireData). Более того, lispworks умеет отлично готовить разумных размеров бинарники приложений, удаляя оттуда все лишнее (удивился по первой, когда получил в бектрейсе что-то вроде одних DUMMY-SYMBOL на пятом уровне delivery :))

Потом, LispWorks и Allegro CL успешно применяют Prolog, развивая область представления и обработки знаний. Видимо, есть те, кому это очень нужно.

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

Что касается свободных реализаций, то они тоже неплохо выглядят, особенно в области серверных и консольных приложений.

К чему это я все веду? Я считаю, что у Common Lisp есть своя ниша. Технология постоянно развивается. Язык всегда найдет своих новых сторонников. Пусть их и не так много. Но сам язык и среды разработки под него - просто удивительные!

З.Ы. Ну, все. Мне пора включаться в рабочий режим. Поэтому могу долго не отвечать.

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

то такое есть в CL, для поддержки ФП, чего нет в питоне
или перле?

1. оптимизация хвостовых вызовов

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

2. Нормальные лямбды.

Анонимные лямбды просто вредны.

3. Нормальные замыкания.

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

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

Анонимные лямбды просто вредны.

Ну это проблема общелиспа, в нормальных ЯП с этим все в порядке, т.к. у лямбды есть source location и имя не нужно.

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

Попробуй поискать «ECLM08-InspireData» (без кавычек). В гугле что-то находится, но я не проверял. Там должны быть фотки лисперов на странице Clozure Developers. Например, там есть бородатый Gary Byers :)

По-моему я брал с сайте Edi Weitz как материал к какой-то конференции.

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

спасибо! выглядит интересно)

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

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

Я не понимаю, зачем вообще ты пишешь на CL? Макросы тебе не нравятся, анонимные функции не нравятся, DSL не нравится, синтаксис лиспа тоже не нравится...

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

Я не понимаю, зачем вообще ты пишешь на CL? Макросы тебе не нравятся, анонимные функции не нравятся, DSL не нравится, синтаксис лиспа тоже не нравится...

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

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

Вообще-то все не так. Лямбды - лучший способ запутать код до полной нечитаемости.

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

Лямбды - лучший способ запутать код до полной нечитаемости.

Твой год с говнолямбдами кроме тебя никто не сможет прочитать.

И после этого мне будут рассказывать, что «разговаривать матами» - это нехорошо? Как хотите - буду тогда просто молчать.

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

Какая связь между блямбдой и матами?!? Кроме разве что того, что лямбда в приличном обществе тоже табу.

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

зачем вообще ты пишешь на CL?

Прежде всего интерактивная разработка, потом: CLOS, динамические переменные (в Python даже лексических нет), нет GIL, производительность (правда для Python я сейчас для некоторых задач использую PyPy и разница в производительности уже не так велика), SLIME, ну и наверное ещё разных мелочей набёртся.

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

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

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

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

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

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

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

там пример правильного использования лямбд есть и сравнение с тем что без лямбд.

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

с Java 5 неправы

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

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