Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Lisp vs C++

153 views
Skip to first unread message

Michael N. Kuleshov

unread,
Jun 28, 2007, 9:38:05 AM6/28/07
to
Добрый день!

Вот что удивляет.
Вакансий для С++ программистов много, з/пл предлагается довольно высокая.

Решил изучить С++, занимался.

Однако, если поискать в поисковиках "функциональное или императивное", "Лисп
С++",
то можно узнать удивительные вещи.

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

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

Что же такое, почему, Лисп, как масонство, - удел избранных?
Почему мощь его и красоту скрывают? :)


И еще.
Можете кратко, для общего взгляда, сравнить С++ и ООП и фунцкциональный
подход, Лисп?


И Лисп против Форта. Последнего, как мне кажется, больше реализаций, он шире
портирован.
В чем Лисп превосходит Форт?

Спасибо!
Михаил

Alexey Desyatnik

unread,
Jun 28, 2007, 10:46:04 AM6/28/07
to
28.06.07, Michael N. Kuleshov<K...@stk.mmtel.ru> написал(а):
MK> Что же такое, почему, Лисп, как масонство, - удел избранных?

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

MK> Почему мощь его и красоту скрывают? :)

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

MK> Можете кратко, для общего взгляда, сравнить С++ и ООП и фунцкциональный
MK> подход, Лисп?

Лисп =/= функциональный подход. Главное его отличие и преимущество
совсем в другой области, в нормальном метапрограммировании, с помощью
которого можно хоть функциональный, хоть объектный, хоть какой другой
подход реализовать.

--
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru

Michael N. Kuleshov

unread,
Jun 28, 2007, 2:11:43 PM6/28/07
to
Привет, Alexey!
"Alexey Desyatnik" <fi...@desyatnik.info> сообщил/сообщила в новостях
следующее:
news:db0008b0706280645w3a6...@mail.gmail.com...

> 28.06.07, Michael N. Kuleshov<K...@stk.mmtel.ru> написал(а):
...

> MK> Можете кратко, для общего взгляда, сравнить С++ и ООП и
> фунцкциональный
> MK> подход, Лисп?
>
> Лисп =/= функциональный подход. Главное его отличие и преимущество
> совсем в другой области, в нормальном метапрограммировании, с помощью
> которого можно хоть функциональный, хоть объектный, хоть какой другой
> подход реализовать.


Вот, сам поискал ихосу поделиться:

Re[13]: Metaprogramming et al - Философия программирования - RSDN
http://www.rsdn.ru/Forum/message/1271544.flat.1.aspx

...

В результате я посмотрел на Common Lisp, и быстро понял, что на самом деле
C++'у
никакие костыли не помогут, т.к. это не Лисп Почему именно - можно почитать
можно
в целом ряде мест, например, тут --
http://www.gigamonkeys.com/book/introduction-why-lisp.html
(не говоря уже про товарища Грэхэма и пр.) Мощный компилируемый язык, с
лучшей
поддержкой метапрограммирования и DSL, ох**тельной объектной системой
(CLOS),
лексическими замыканиями, интерактивным стилем разработки (REPL), GC,
развитой
системой исключений и т.д. и т.п. Проблема у этого языка одна: Лисп есть
могучий
усилитель мысли, и тем, у кого мысли, как правило, отсутствует, он ничем не
поможет
(т.к. нечего усиливать). Так что если человек собирается всю жизнь
зарабатывать себе
на хлеб, таская контролы мышкой по формам, подобный инструмент пользы не
принесёт.
С этим связана и сравнительно низкая распространённость языка и его странная
репутация
(якобы медленный/трудный/нечитабельный/только AI/чисто
академический/непригодный для
реальных приложений/интерпретируемый/чисто функциональный/без поддержки
ОО/прочий БРЕД),
из-за которой я, ёлки-палки, столько лет программировал (и до сих пор
программирую
по долгу службы) на всякой [ерунде].

Как следствие, мне стало ясно, почему C++'у не светит радикальное улучшение
в области
того же метапрограммирования, расширяемых компиляторов и пр. Когда люди
начинают
углублённо заниматься подобными вещами, пытаясь усовершенствовать язык, они
неминуемо
обнаруживают, что нечто гораздо более _простое_ и удобное уже изобретено до
них,
и нызывается оно Лиспом.

Кстати, о DSL (Domain Specific Languages), одной из наиболее сильных сторон
Лиспа,
занятно пишет, надеюсь, небезызвестный товарищ Martin Fowler:
http://martinfowler.com/articles/languageWorkbench.html
Тов. Rainer Joswig (знаток Лисп-машин приводит пример решения задачи,
описанной Fowler'ом, на Лиспе:
http://lispm.dyndns.org/news?ID=NEWS-2005-07-08-1
http://groups-beta.google.com/group/comp.lang.lisp/msg/4fe888b58ffa83b8

Возникает вопрос -- если Лисп столь удобен, то почему же вещи типа Java, C#,
C++,
Delphi используются гораздо более широко?.. Наиболее полный ответ на данный
вопрос
дан Станиславом Лемом в произведении "О выгодности дракона" ("Звёздные
дневники
Ийона Тихого") - http://lib.ru/LEM/lemitdr.txt, описывающий планету, на
которой
жил, казалось бы, всесторонне вредный Дракон (занимал территорию, жрал
туристов,
вонял и т.д.), от которого, тем не менее, не спешили избавиться:

"Если бы не дракон, для кого мы производили
бы трубопроводы, которыми в него качают мучной отвар? А ведь это - и
металлургические комбинаты, и трубопрокатные станы, и сварочные автоматы,
и транспортные средства, и так далее. Дракон имеет реальные потребности.
Ну, теперь понимаете? Производство должно на кого-то работать!
Промышленники не производили бы ничего, если бы готовый продукт
приходилось выбрасывать в море. Реальный потребитель - Другое дело. Дракон
- это громадный, необычайно емкий заграничный рынок, с колоссальным
спросом..."

Точно такая же ситуация оформилась в IT - если заменить дракона - миллионные
армии не
желающих чему-либо учиться квазипрограммеров, ваяющих формочки и не желающих
слышать не то что про Лисп, но и даже про те же элементарные Design
Patterns,
несколькими defmacro, то погибнет целая развитая индустрия по производству
красивых
и удобных средств "разработки" для тех, кто в действительности по просту не
умеет
программировать и, вместо того чтобы честно махать на улице метлой,
протирает до дыр
ни в чём неповинные мышиные коврики.

...
В общем и целом могу сказать следующее. У тех, кто сейчас пишет на плюсах,
под .NET,
Java, Delphi и пр., есть только два пути не тратить почём зря своё время:

1. Смириться. Не пытайтесь расширить свою среду. У этих расширений есть
потолок, и
не очень высокий. Кропайте методы, пишите message maps, не нравится -
используйте
Qt/moc и пр. Не тратьте зря время на создание радикальных расширений. Да,
работа
так и останется нудной, но что ж поделаешь, жрать-то надо. Создание крутых
фреймворков
вместо реальной работы - хороший способ срыва проектов. И т.д., и т.п.

2. Учиться. Если у Вас есть немного свободного времени, потратьте его часть
на изучение
языков, которые заставляют человека _думать по другому_. Изучите Lisp,
Prolog, Haskell,
SML, Smalltalk, Erlang (особое внимание стоит уделить Common Lisp'у, как
языку
расширяемому и наиболее практичному). Не давайте мозгам заржаветь, учитесь
мыслить шире.
Для начала, это поможет Вам стать хорошим программистом, даже если на хлеб
себе вы будете
зарабатывать, программируя на других языках. Все мейнстримные языки
построены,
как правило, по принципу "те же яйца, вид сбоку". Осознайте, что мир на
самом деле
не сошёлся на лежащем в их основе наборе стандартных парадигм.
...

Да и сам, хоть и начинающий, натыкался на раздражающие ограничения С++.

Выходит, -ЛИСП?
ЛИСП?!
ЛИСП!!!

Да?


Михаил

ЗЫ. Надеюсь, что не нарушил правила таким длинным копипастом?
МК

Alex Mizrahi

unread,
Jun 28, 2007, 5:39:06 PM6/28/07
to
(message (Hello 'john)
(you :wrote :to '("Michael N. Kuleshov") :on '(Thu, 28 Jun 2007 20:00:13
+0000 (UTC)))
(

MNK>> Точно такая же ситуация оформилась в IT - если заменить
MNK>> дракона - миллионные
MNK>> армии не
MNK>> желающих чему-либо учиться квазипрограммеров, ваяющих
MNK>> формочки и не желающих

jg> юзерам нужны формы и отчеты. их нафиг не интересна крутизна
jg> лиспа. все это пустые распальцовки.

так речь идёт о том, чтобы "заменить .. defmacro". то есть, конечно, от
ваяльщиков формочек никуда не деться. но для них можно сделать DSL, в рамках
которого они не смогут сильно навредить -- и пусть ваяют себе.. потому что
обезъяна с С++ -- страшная сила.. хотели получить отчёт, ввели неправильно
циферку -- и вместо сообщения об этом -- segfault.
на C# тоже не особо лучше -- это general purpose язык программирования, и на
нём можно наваять сильно много разного.. люди, не имеющие представления о
design patterns, могут ТАКУЮ архитектуру придумать.. так что желательно дать
им как можно меньшую свододу выбора.
но при этом, конечно, неплохо и иметь возможность в некоторых случаях иметь
полнофункциональный язык. и как раз embedded DSL Lisp'а это отлично
позволяет

)
(With-best-regards '(Alex Mizrahi) :aka 'killer_storm)
"scorn")


john gladkih

unread,
Jun 29, 2007, 4:05:59 AM6/29/07
to
>>>>> "AM" == Alex Mizrahi <udod...@users.sourceforge.net> writes:

AM> нём можно наваять сильно много разного.. люди, не имеющие представления о
AM> design patterns, могут ТАКУЮ архитектуру придумать.. так

это справедливо для абсолютно любого иструмента

--
john, http://john.kak-sam.to

Alex Mizrahi

unread,
Jun 29, 2007, 6:57:12 PM6/29/07
to
(message (Hello 'john)
(you :wrote :to '("Alex Mizrahi") :on '(Fri, 29 Jun 2007 08:05:59 +0000
(UTC)))
(

AM>> нём можно наваять сильно много разного.. люди, не имеющие

AM>> представления о design patterns, могут ТАКУЮ архитектуру придумать..
AM>> так

jg> это справедливо для абсолютно любого иструмента

отнюдь, если пользователям предоставить ограниченный DSL, который конкретно
решает их задачи, и ещё и объяснить как им пользоваться, то отклониться от
предусмотренных паттернов использования им будет весьма сложно. разумеется,
мы отталкиваемя от предположения, что существует по крайней мере один
человек, который хорошо знает, как нужно решать задачи в определённой
области -- и он может создать инструменты, спомощью которых "широкие массы"
тоже смогут решать подобные задачи просто подставляя свои параметры, грубо
говоря.

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

но как раз лисп позволяет строить такие инструменты просто и эффективно.

0 new messages