LINUX.ORG.RU

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


0

1

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

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


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

> В отличии от времени создания языка С (чувак! это было сорок лет назад) соотношение стоимости времени работы человека и машины сильно изменилось.

цэ стар. убийственный аргумент.

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

В Схеме (как и в CL, как и вообще везде) есть механизмы FFI, так что с библиотеками проблем быть не должно.

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

Например, чтобы не переписывать имеющиеся библиотеки. Какой-то не очень умный вопрос, мягко говоря.

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

> там те же самые костыли, только вид сбоку^W^W называются по-другому.

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

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

Скучненько. Больше технических подробностей украсят этот спор.

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

Хватит придумывать. Даже в википедии правильно написано.

In computer science, functional programming is a programming paradigm that treats computation as the evaluation of mathematical functions and avoids state and mutable data.

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

Ты парень умный, без вопросов. Но зачем придумывать новые значения старой терминологии? Она уже устоялась. ФП — парадигма программирования без побочных эффектов; а ФЯП — языки, которые поощряют парадигму ФП. Зачем тянуть за уши туда «взаимодействие элементов программы»? Чтобы потом так же за уши притянуть ООП? Не смешно.

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

> Что, простите?

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

а либы... что, никогда не получал закрытую so/dll для, скажем, коннекта к чужому серванту? счастливое детство...

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

а либы... что, никогда не получал закрытую so/dll для, скажем, коннекта к чужому серванту? счастливое детство...

Нет, у меня в таких вопросах правда опыта маловато. Но при чем здесь это?

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

В гибридных языках все несколько сложнее. Нет такой четкой границы. И противопоставления прямого тоже нет.

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

> при чем здесь это

при том, что лисп без сишных либ сосет, а си с сишными же либами рулит.

жабомашина рулит сама по себе.

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

А в реальном мире все наоборот - на лиспах можно писать то же самое, что на сишечке, а наоборот уже не получится.

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

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

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

> чем тебе не нравится FFI

сам по себе ffi/jni/etc мне параллелен, интересен контекст. если в одном случае для нормальных языков это нормальное положение дел (а для нормальных платформ — неизбежное зло), то в случае лиспа это жизненная необходимость.

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

> А в реальном мире все наоборот - на лиспах можно писать то же самое, что на сишечке

_можно_ писать хоть на брайнфаке.

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

Сказочный долбоёб, детектед.

>Waterlaz Да хацкелисты все врут про чистоту. Императивный этот ваш хацкель. Там даже цикл for есть Сынок, когда подрастёшь ты узнаешь что императивность не препятствует чистоте и это не «цикл for», а обычный мап по листу монад.

лор как всегда сверкает тупизной хомячков

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

Кстати, в Скале функция может быть чистой и при этом являться объектом (на уровне самого языка, а не только реализации), реализующим интерфейс (trait) Function, и иметь внутреннее изменяемое состояния для какой-нибудь хитроумной оптимизации, да той же мемоизации. Противоречия здесь не вижу.

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

> Римские числа, кстати, проще десятичного представления.

с чего бы это?

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

> то в случае лиспа это жизненная необходимость.

Что ты вообще об этом знаешь то? Зачем бредить о том, в чём не разбираешься?

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

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

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

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

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

не уверен, что в этой фразе есть смысл.

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

> т.е. пересылка сообщений и изменение внутреннего состояния -

это и есть фп?


Ну, дык, мысли правильно: ФП есть секс, секс есть любовь, любовь есть жизнь, а жизнь - начало начал, таким образом, ФП есть первооснова всего и ООП в том числе ;)

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

Для меня ссылка на книжку 20летней давности — это «старая, устоявшаяся терминология». Которая причем хорошо укладывается в Scheme.

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

> т.е. пересылка сообщений

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

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

Для меня ссылка на книжку 20летней давности — это «старая, устоявшаяся терминология». Которая причем хорошо укладывается в Scheme.

И что, там ставят знак «равно» между «функциональный» и «без сайд-эффектов»?

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

> там ставят знак «равно» между «функциональный» и «без сайд-эффектов»

Нет, там говорится о том, что «без сайд-эффектов» является один из следствий ФП.

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

>Наводящий вопрос: про foreign function interface слышал?

Наводящий ответ: библиотек нет, надо кругом самописные костыли воздвигать.

Кстати, ты небось и FFI'шить ручками собрался, а про swig и не слышал?

linuxfan
()
Ответ на: комментарий от CL-USER

>не надоело одну и ту же клоунаду со своей постoянной мантрой в каждом лиспотопике повторять?

Я не понимаю, как можно быть таким конченным слепцом, чтобы не видеть очевидного. Берем православный clisp — потоки (неполноценные, кстати) выглядят так. В sbcl уже по-другому. В коммерческих лиспах свое видение этой проблемы. borderaux-threads — унылое говно, предоставляющее кастрированный, зато типа «универсальный» интерфейс.

Не надоело из треда в тред одинаковые пуки в лужу издавать?

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

>В Схеме (как и в CL, как и вообще везде) есть механизмы FFI, так что с библиотеками проблем быть не должно.

Поди-ка, оберни мне Qt в FFI. Потом и поговорим.

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

> Наводящий ответ: библиотек нет, надо кругом самописные

костыли воздвигать.


Ответ неправильный.

Кстати, ты небось и FFI'шить ручками собрался,

а про swig и не слышал?



Для CL проще и быстрее делать ручками (ибо удобно), особенно с учётом того, что делать это приходится не часто

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

> Поди-ка, оберни мне Qt в FFI. Потом и поговорим.

Уже давно обернули.

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

> Берем православный clisp

В каком месте он православный?

В sbcl уже по-другому.


Можно пример языка с GC для которого есть несколько реализаций, которые предоставляют совместимые реализации потоков?

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

Paul Hudak: Conception, evolution, and application of functional programming languages

Imperative languages are characterized as having an implicit state that is modified (i.e., side effected) by constructs (i.e., commands) in the source language. As a result, such languages generally have a notion of sequencing (of the commands) to permit precise and deterministic control over the state. Most, including the most popular, languages in existence today are imperative.

As an example, the assignment statement is a (very common) command, since its effect is to alter the underlying implicit store so as to yield a different binding for a particular variable. The begin . . . end construct is the prototypical sequencer of commands, as are the well-known goto statement (unconditional transfer of control), conditional statement (qualified sequencer), and while loop (an example of a structured command). With these simple forms, we can, for example, compute the factorial of the number X:

(пример факториала на паскале с begin/end)

In contrast, declarative languages are characterized as having no implicit state, and thus the emphasis is placed entirely on programming with expressions (or terms). In particular, functional languages are declarative languages whose underlying model of computation is the function (in contrast to, for example, the relation that forms the basis for logic programming languages).

Да.

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

>делать это приходится не часто

Ой ли. Достаточно посмотреть на твой профиль в гитхабе, чтобы понять, что программирование на CL на 99% состоит из написания велосипедов. То, что в C работает годами и оттестировано миллионами пользователей, в лисп нужно тащить руками в лучшем случае через FFI и либо «писать на C с круглыми скобками», либо делать годные лисповые биндинги и ловить баги-баги-баги.

Если ты мне не веришь, попробуй cl-sql. Обматеришься от сношений с кодировками, когда весь запрос целиком обламывается, если в строке, полученной из базы, встретился «битный» символ. А еще в том же cl-sql взаимодействие с постгресом работает только через лисповую реализацию протокола. FFI биндинги к libpq есть, но почему-то не работают.

Заводить шарманку про xmpp в четвертый раз я не собираюсь.

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

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