?

Log in

Почему LISP? - Жить не можем без проблем! [entries|archive|friends|userinfo]
Жить не можем без проблем!

[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Почему LISP? [Jan. 13th, 2011|02:05 pm]
Жить не можем без проблем!

ru_lisp

[aralex]

Как говорил Ворошилов, вопрос к Знатокам (к знатокам LISP-а в данном случае)! Почему таки LISP? Или, если конкретнее, вопроса три:

  1. Для каких именно задач LISP подходит больше, чем другие языки?
  2. За счёт чего для них он подходит больше?
  3. В чём именно выражается его преимущество?

Если не в лом, приведите, pls, коротенькие иллюстрации на LISP-е (или ссылочку на них). Заранее благодарен!

Исходно данный пост был размещён в сообществе ru_programming, но там Знатоков, способных ответить внятно и по сути, увы, не нашлось :(

linkReply

Comments:
[User Picture]From: love5an
2011-01-13 10:28 pm (UTC)
Common Lisp(когда говорят просто "лисп" - обычно имеют ввиду именно его) - мощный мультипарадигмальный язык программирования.

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

Он крайне динамичен по своей сути - классы, функции, и так далее - все можно определять и переопределять в рантайме. В рантайме можно компилировать и подгружать код(компилятор входит в состав стандартной библиотеки).

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

В нем присутствует совершенно офигительная система обработки исключений, похожая на Windows SEH или синхронные сигналы Unix - намного более продвинутая, чем системы обработки исключений из мейнстримных языков.

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

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

У меня в жж есть тег lisp - посмотрите там по нему.

Единственный возможный недостаток - в силу относительно небольшого размера сообщества и относительно небольшой популярности, открытых библиотек для CL меньше, чем для других языков, особенно таких популярных, как Python или Java(впрочем, это отчасти решаемо - существуют библиотеки-интерфейсы к сишным библиотекам, к платформе Java или к .NET или для интероперабельности с COM).
(Reply) (Thread)
[User Picture]From: 13_49
2011-01-14 01:47 am (UTC)
Лисп-машины, для которых 100% софта было написано на лиспе, не согласны, что низкоуровневое программирование - не удел лиспа.
(Reply) (Parent) (Thread)
[User Picture]From: love5an
2011-01-14 02:41 pm (UTC)
Lisp machines are dead. Long live lisp machines!
(Reply) (Parent) (Thread)
[User Picture]From: aralex
2011-01-14 06:54 am (UTC)
Спасибо! Буду переваривать :)
(Reply) (Parent) (Thread)
From: (Anonymous)
2011-01-14 07:53 am (UTC)
> фактически, можно добиться уровня производительности программ на Си

Следует быть честным до конца - в этом случае программа на CL будет на порядок длиннее и намного менее понятна, чем аналогичная программа на Си.

> но в CL метапрограммирование на самом высшем уровне

Ну может уже хватит этого троллинга?
(Reply) (Parent) (Thread)
[User Picture]From: love5an
2011-01-14 09:41 am (UTC)
>Следует быть честным до конца - в этом случае программа на CL будет на порядок длиннее и намного менее понятна, чем аналогичная программа на Си.

Макросами это можно компенсировать.
http://love5an.livejournal.com/357147.html?thread=1716507#t1716507

>Ну может уже хватит этого троллинга?

Нет, я таки останусь при своем мнении.
(Reply) (Parent) (Thread)
From: (Anonymous)
2011-01-14 11:40 am (UTC)
> Макросами это можно компенсировать.

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

> Нет, я таки останусь при своем мнении.

Ради бога, продолжай писать кодеволкеры на несколько тысяч строк, которые выражаются в пару сотен строк при помощи паттернов.
(Reply) (Parent) (Thread)
From: (Anonymous)
2011-01-14 11:45 am (UTC)
Вообщем, я считаю, что не следует говорить о сравнимости с сишкой, правильнее сказать, что при охуенной выразительности он обладает достаточной производительностью, обгоняя всякое скриптовое говнецо уж точно, а если вдруг есть какие-то критичные ботлнеки - то лучше их и писать на си, благо ффи есть и благодаря макросам умеет выглядеть достаточно няшно.
(Reply) (Parent) (Thread)
[User Picture]From: andy128k
2011-01-14 02:34 pm (UTC)
Можно даже говорить о превосходстве над C. Пример: PCRE и CL-PPCRE. Первый написан на C, второй -- на Common Lisp и работает в два раза быстрее.
(Reply) (Parent) (Thread)