LINUX.ORG.RU

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


0

1

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

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


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

Я не понял. Вопрос про широко известные _открытые_ проекты. Для ерланга их не больше - Ejabberd(игрушка для красноглазых), да RabbitMQ(для самих штанэрлангистов)

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

Или ты под функциональщиками подразумевал только хацкелистов-штангистов?

Он не просто не чистый, он суть АКТОРНЫЙ. Т.е. он ближе к объектным даже языкам (объектные и акторные все имееют корни у фреймовых языков)

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

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

>Ejabberd(игрушка для красноглазых)
Дорогой, друг, Еж где только не используется серьезными дядями и иногда тётями.

да RabbitMQ(для самих штанэрлангистов)

Что за глупость? Я тебя прошу, никому об этом не говори.

Для ерланга их не больше

Больше ;)

объектным даже языкам

ОО и ФП понятия оргональные.

Он не просто не чистый, он суть АКТОРНЫЙ.

Ты всеже хочешь сказать, что той фразой ты имел ввиду только хацкелистов?

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

>Дорогой, друг, Еж где только не используется серьезными дядями и иногда тётями.

Stumpwm тоже.

Что за глупость? Я тебя прошу, никому об этом не говори.


Аналогично про SBCL.

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

> ОО и ФП понятия оргональные.

SICP утверждает обратное.

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

Вообще, надо было вместо stumpwm Macsyma привести в пример скорее.

А так, я не понимаю - оценивать используемость и применимость языка на практике по количеству опенсорс проектов? Это смешно. Опенсорс, за редким исключением(конкретно, опенсорс, за который по тем или иным причинам платят крупные корпорации, как в случае с ведром линупса или тем же rabbitmq) - куча полуюзабельного недодокументированного хлама.
Я сомневаюсь, вернее, нет, даже знаю, что Erlang по количеству проектов подобного уровня CL уступает очень сильно:
http://www.itasoftware.com/products/shopping-pricing/
http://piano.aero/
http://www.google.com/search?q=SPIKE+scheduling+system

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

И, есть какие-то возражения на тему «Ejabberd - игрушка для красноглазых»? Кроме «используется серьезными дядями и тетями»(это Звучит, конечно! но меня не впечатляет).

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

>Я сомневаюсь, вернее, нет, даже знаю, что Erlang по количеству проектов подобного уровня CL уступает очень сильно

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

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

Love5an CL-USER надавать кучу ссылок могу я тоже. И на гитхаб, и на фэйсбук, и на церн с коучдб, и на сам ериксон с его железяками, и конечно не забуду, например, про гиганта Goldman Sachs.

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

Кстати, можно судить даже по ленте fprog, к примеру:
http://fprog.ru/planet/

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

Посты про «функциональные языки» - «класс типов монады», «тип классов стрелки», «как круто заменять итераторы паттернматчингом», «штанга»

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

Я со своей стороны, наблюдаю, что сообществу CL все меньше хочется чтобы его ассоциировали с т.н. ФП.

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

> Love5an CL-USER надавать кучу ссылок могу я тоже.

так, а что вам нужно-то? просили ссылок. дали. Что не так?

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

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

CL-USER вообще изначально речь шла о том, что фп нигде не используется кроме как написание факториалов, как утверждает dizza ;)

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

ОО и ФП понятия оргональные

Прекрати сыпать заученными фразами и включи мозг. Под ОО обычно имеют идею классов с наследованием, полиморфизмом ... ну вы понели. А я говорю про ОБЪЕКТНОСТЬ, суть объектности в ОБЪЕКТАХ, у которых есть состояние и идентичность как миниум (еще сюда адепты ООП приписывают поведение)

Так вот объектность и фп поняния диаметрально противоположные.

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

Кстати, можно судить даже по ленте fprog, к примеру:

http://fprog.ru/planet/

Почитал. Спасибо, поржал:

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

Что тут можно улучшить кстати в плане читабельности? И блядь до чего же уродский синтаксис для record....»

«Если все-таки разрешить проблему с экстенсиональностью в определении «n-равенства» (более точно — в алгоритме построения префиксного кода по ходу вычисления выражения), то можно ввести следующие два определения.»

«Система ввода-вывода на бинарных деревьях

Продолжим использовать обозначения, определения и утверждения, сделанные ранее и рассмотрим более детально предложенную систему ввода-вывода по схеме Out = (λi.Program) Input.»

«Недавно начал учить Эрланг, и вот возник такой вопрос.

Допустим, есть задача найти наибольшее произведение двух трёхзначных чисел, являющееся палиндромом »

Заебали теоретики-студенты с факториалами.

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

Можно поподробнее, с чем именно не согласны физики?

И хотелось бы отдельно услышать комментарии по поводу изменения состояния объектов. В терминах чистого ФП подобные side-эффекты недопустимы.

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

>Так вот объектность и фп поняния диаметрально противоположные.

А функция по-твоему может быть объектом? А объект функцией?

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

Он наверное имеет ввиду такое фп, каким упарываются штангисты и иже с ними. Функция в CL том же - объект.

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

>>Так вот объектность и фп поняния диаметрально противоположные.

А функция по-твоему может быть объектом? А объект функцией?

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

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

Чем раньше они об этом узнают, тем лучше для них же.

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

>dizza да, он не чистый. И? Или ты под функциональщиками подразумевал только хацкелистов-штангистов?

Да хацкелисты все врут про чистоту. Императивный этот ваш хацкель. Там даже цикл for есть http://www.haskell.org/ghc/docs/6.12.2/html/libraries/base-4.2.0.1/Control-Mo...

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

> практически любой функциональный язык автоматически является

объектно-ориентированным


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

Объектный подход и функциональный являются противоположными, а не ортогональными. Не надо гнать.

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

>Объектный подход и функциональный являются противоположными, а не ортогональными

«Объектный» и «Объектно-ориентированный» не уверен что синонимы но на всякий случай буду считать синонимами.

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

Таким образом ФП - частный случай ООП, как и многие другие, в том числе уродсва из C++ и Java.

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

> «Объектный» и «Объектно-ориентированный» не уверен что синонимы

А они и не синонимы, но ООП это такая технология программирования, основанная на объектной декомпозиции.

Назови любую единицу декомпозиции объектом


Может лучше сразу страусом? Что бы из всего могло получиться страус-ориентированное программирование?

Таким образом ФП - частный случай ООП


У... Да, это круто. Трава нынче хороша!

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

Вот уж не знал, что присутствие слова «for» в стандартной библиотеке делает язык императивным. Но в чем-то ты все-таки прав, ведь известно, что хацкель — это же лучший среди императивных языков.

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

Что делает функциональный язык объекто-ориентированным автоматически? А так же реквестирую пример функционального языка без полиморфизма, это интересно.

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

> мир императивен.

Это не так. И дело не в неимперативности мира, но в принципиальной невозможности делать утверждения в терминах реальности и существования.

изучать C пока не поздно.

Зачем писать на примитивном макроассемблере в 21-м веке?

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

>> «Объектный» и «Объектно-ориентированный» не уверен что синонимы

А они и не синонимы, но ООП это такая технология программирования, основанная на объектной декомпозиции.

Я так и подозревал что объектный подход это подход основанный на декомпозиции на уровне структур, только структуры тут назвали объектами чтобы ввести в заблуждение. Собственно это только частный случай хоть и широко распостранённый.

Назови любую единицу декомпозиции объектом

Может лучше сразу страусом? Что бы из всего могло получиться страус-ориентированное программирование?

Если есть определение или описание страуса то почему бы и нет? Если оно выгладит как страус, бегает как страус и шашлыки из него как из страуса, то вчём проблема?

Конечно я понимаю что тут должна возникнуть ассоциация с одной очень известной фамилией и соответствующим языком программирования... Да это действительно можно и так назвать.

Таким образом ФП - частный случай ООП

У... Да, это круто. Трава нынче хороша!

Тоесть, аргументировать больше не чем? Ну это и понятно :)

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

>Что делает функциональный язык объекто-ориентированным автоматически?

Инкапсуляция + Наследование + Полиморфизм

Это всё элементарные операции над замыканиями.

реквестирую пример функционального языка без полиморфизма

Допустим, в haskell и ocaml полиморфизм есть, но реализуется в некоторых местах по разному. Так что сделал допущение что могут быть языки совсем без полиморфизма. Хотя таких не знаю, а если бы знал, то на практике не использовал бы.

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

Потому что мир императивен

мир параллелен, распределён, и основывается на обмене сообщениями; императивного в нём не больше, чем функционального или логического

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

>Зачем писать на примитивном макроассемблере в 21-м веке?

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

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

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

Зачем писать на примитивном макроассемблере в 21-м веке?

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

Я обеими руками за высокоуровневые языки, но С надо оставить для работ близких к железу.

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

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

Купите себе велосипед, чтобы лучше чувствовать.

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

>Что делает функциональный язык объекто-ориентированным автоматически?

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

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

>Но в чем-то ты все-таки прав, ведь известно, что хацкель — это же лучший среди императивных языков.

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

ЗЫ Я тут поискал, у хацкелистов и переменные есть!!! http://www.haskell.org/ghc/docs/6.12.2/html/libraries/base-4.2.0.1/Data-IORef...

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

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

А ещё он сложен для людей и это гораздо важнее. В отличии от времени создания языка С (чувак! это было сорок лет назад) соотношение стоимости времени работы человека и машины сильно изменилось.

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

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

Возможно, тебе просто нравится заниматься рутиной. Это нормально, многие люди делают это.

С надо оставить для работ близких к железу.

т.е. около 0.001% рынка.

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

>А ещё он сложен для людей

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

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

>> С надо оставить для работ близких к железу.

т.е. около 0.001% рынка.

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

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

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

Чувак! Лисп создали 50 лет назад!

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