LINUX.ORG.RU

Почему на Common Lisp пишут в императивном стиле?


0

1

Недавно начал читать PCL (до этого изучал Scheme) - не могу привыкнуть к императивщине. По-моему, Лисп просто создан для того чтобы быть функциональным языком программирования :)

Связано ли это как-нибудь с тем фактом, что CL является «промышленным стандартом» Лиспа?


Почему на Common Lisp пишут в императивном стиле?

- Why does a dog lick its genitals?
- Because it can! :)

shty ★★★★★
()

> Лисп просто создан для того чтобы быть функциональным языком программирования :)

В стандарте про это ничего не сказано. Зато есть про необязательность хвостовой рекурсии.

ugoday ★★★★★
()

Я пробовал писать на CL в функциональном стиле.

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

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

Ну вот лично у тебя много кода в функциональном стиле?

power
() автор топика

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

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

dizza ★★★★★
()

> Лисп просто создан для того чтобы быть функциональным

языком программирования


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

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

Отож. А профита от IDE, OOD, подпорок и костылей к жабе оказалось значительно больше чем от всех функциональный языков вместе взятых

дискас

Karapuz ★★★★★
()

«Не стреляйте в пианиста! Он играет, как умеет...»//

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

Примеры кода, которыми мерятся обычно это что-то вроде вычисленния факториала. А тут на ФЯ код выглядит красивым и пушистым. В общем те самые функциональщики, которые пиарят ФП обычно ничего сложнее и не пишут. Да это и сразу видно на 10 страничных срачах, где народ меряется пипетками кто круче числа фибоначи на хаскеле напишет.

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

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

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

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

>тогда кой чёрт функцианальщики пиарят свою парадигму?

Я, как боевой Scala-программист не могу не влезть. Действительно, писать только в функциональном стиле не всегда удобно. Частенько гибрид — лучший выбор. И тут я могу выделить 2 вида гибридов: императивщина за функциональным интерфейсом и куски функциональщины в императивном коде. Первый тип используется для библиотек и прочей реюзабельной фигни, второй — для значительного сокращения размера императивного кода.

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

Zenom ★★★
()

>Недавно начал читать PCL

1. Лисп НЕ декларативен.
2. Лисп НЕ подходит для создания DSL.

От книжек до практики — громадных размеров пропасть.

Функциональность != декларативность. В функциональном стилие можно и на C++ программировать. Или на яве. Вон гугл выпускал библиотечку коллекций на яве. Функциональненько так: map, filter, идиома Functor.

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

Ну... кто ж тебе виноват, что у тебя такое ограниченное виденье ФП.

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

>2. Лисп НЕ подходит для создания DSL.

Почему?

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

Waterlaz ★★★★★
()

что-то не видно в треде лоровских апологетов лиспа :)

Deleted
()

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

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

Функциональность != декларативность.

В точку. У меня вот на жаве есть декларативный код. Конфиг модулей Guice.

Я давно спалил эту нелепицу с декларативностью ФП :) Потом интерес как-то поугас.

Вон гугл выпускал библиотечку коллекций на яве. Функциональненько так: map, filter, идиома Functor.

Ага, использую. Комбинаторов только не хватает (сам написал) а так, да вещь.

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

>из лиспа каждый может сделать себе подходящий ему язык

Допустим. Ты делал? Мне хватило ровно одного раза, чтобы понять что концепция S-выражений в том виде как она сделана в лиспе ущербна по своей сути.

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

В любом языке, где есть алгебраические типы, ты можешь программировать «в терминах DSL» (C). Это несколько сложнее, чем в лиспе, но более эффективно с точки зрения разработчика. Гибкость, увы, тоже страдает. Но зато на химер начинает аццки ругаться компилятор, но не рантайм или конечные пользователи.

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

> Это несколько сложнее, чем в лиспе, но более эффективно

с точки зрения разработчика


Чем докажешь? И этот многозначительный вывод сделан на основе «одного раза» использования?

Гибкость, увы, тоже страдает.


Т.е. для практической разработки не годится?

Но зато на химер начинает аццки ругаться компилятор,

но не рантайм или конечные пользователи.



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

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

>что я делаю не так

Наверно DSL не пытаешься написать? А используешь лисп по назначению.

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

>Допустим. Ты делал? Мне хватило ровно одного раза, чтобы понять что концепция S-выражений в том виде как она сделана в лиспе ущербна по своей сути.

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

ЗЫ опять же, это все мои ощущения и нифига не объективно =)

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

>> изкаробки лисп мало кому пригоден.

Бу-га-га, очень смешно.

«У меня как раз сложилось впечатление, ...»

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

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

>> Гибкость, увы, тоже страдает.

Т.е. для практической разработки не годится?

Ну... вот весь ынтырпрайз ужс, какой не гибкий. И не скажешь, что это не «практическая разработка»

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

> При этом есть люди, которые вроде как таки прошли этот этап

и чувствуют себя уютно в том, что из лиспа запилили.


Что за люди? В списках рассылки, насколько я понимаю, они не фигурируют?

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

> Если можешь рассказать, почему я не прав и как ты доволен

лиспом искаробки, я буду только рад.


Потому что CL очень хороший язык «из коробки» и я им очень доволен.

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

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

Это не ко мне. Это к архимагу.

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

>Да ну? Кстати, что за язык такой «ынтырпрайз»

Ну.. когда говорят ынтырпрайз, мне слышится java. =)

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

>1. Лисп НЕ декларативен.

2. Лисп НЕ подходит для создания DSL.


А мужики то и не знают!
Вот тебе и декларативность, и DSL(описания «сишных» типов, из которых генерируется код для маршалинга данных):

http://github.com/Lovesan/doors/blob/master/system/console.lisp

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

>Что за люди? В списках рассылки, насколько я понимаю, они не фигурируют?

В каких списках?

Потому что CL очень хороший язык «из коробки» и я им очень доволен.

Ну, ладно. А тебе не кажется, что тот же asdf-install - костыль страшный?

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

> А тебе не кажется, что тот же asdf-install - костыль страшный?

Просто убогий, никогда им не пользовался и другим не советовал. И о чём это говорит?

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

>Просто убогий, никогда им не пользовался и другим не советовал. И о чём это говорит?

Понял, спасибо =)

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

>Вот тебе и декларативность, и DSL

Сложно оценить. И главное, предложить 10 способов отстрелить себе ногу. Могу сказать только то, что DSL достаточно простой. Такого уровня DSL не обязательно делать на лиспе. Только синтаксическая простота — рулит.

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

>Такого уровня DSL не обязательно делать на лиспе.
Если eDSL(Как там. Кстати, там можно увидеть куски обычного кода на лиспе), то обязательно - мы ведь не хотим, чтобы маршаллинг тормозил как говно(у меня все компилируется, при возможности - т.е. когда типы известны статически).

Если говорить о внешнем DSL - то, опять же - композиция типов из s-выражений штука очень простая и приятная, как на вид, так и в плане реализации(хотя в бэкенде у меня не s-выражения - спецификации типов парсятся в объекты CLOS, и вся механика кодогенерации(или интерпретации типов, если статически они не известны) построена на обобщенных функциях).

Love5an
()

Императивщина - проще. Факт. Фунциональщина сложнее, менее читабильна, требует поддержку чаще всего того, кто писал данный код. Common Lisp давно уже мультипарадигменный. Пиши как удобнее и не парься. А лучше - продолжай ковырять схему=), может что-нибудь для сообщества напишешь полезное и расширяющее функционал.

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

>> Понял, спасибо =)

Чего понял то?

Что asdf-install убог =)

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

>. В общем те самые функциональщики, которые пиарят ФП обычно ничего сложнее и не пишут.
Ну вот зачем ты обманываешь? На том же ерланге пишут больше чем на цлиспе. И оно даже работает и применяется ;)

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

>На том же ерланге пишут больше чем на цлиспе.
Чем на clisp - возможно, а чем на коммонлиспе - сомнительно. Кто тебе такое сказал?

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

На том же ерланге пишут больше чем на цлиспе.

Да он какой-то императивный. Посылка сообщения - чем не сайд эффек?

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

Love5an давай ты сейчас назовешь парочку широкоизвестных открытых проектов на цл? А мы послушаем.

Хотя мне почему-то кажется, что ты скажешь, про то что пишут очень-очень много — просто, но все закрытое.

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

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

пс. против цл ничего не имею

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