Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
И тут на сцену выходит Lisp. Lisp для ума, как рычаг для руки. Он увеличивает вашу силу и делает возможным работу над проектами, которые за пределами возможностей таких языков как C. Писать на C — это как собирать мозаику из чечевицы используя пинцет и клей. Lisp — это как обладать пневматическим оружием, сильным и точным. Он открывает целые миры, недоступные другим разработчикам.
(append list1 list2)вместо какого-нибудь
apr_list_add( list1, list2 )Это не настолько большое преимущество, как кажется на первый взгляд. ИМХО.
Подход C/C++ совсем другой. Так трудно сделать что-нибудь с пинцетом и клеем, что любой результат является достижением. Тебе хочется это задокументировать. Тебе придется искать помощи, для более-менее больших проектов. Нужно быть социальным, и работать с другими если хочешь чего-то достичь.
А у вас кажется не хватает знаний о CL ))
Как насчёт мультиметодов
рестартов
динамических переменных
MOP
Поверьте, разница огромна.
Нет. Нормальной реализации мультиметодов для С++ даже Александреску не смог сделать
динамических переменных
Если очень надо, то есть QVariant / boost::variant
Это вообще не из той области.
(setf var 1) (setf var "text")
(defvar *var* 10)
Я больше 7 лет писал C++ и около 3 на Python, плюс были ещё разные другие языки в меньших масштабах. Сейчас я пишу только на двух — JavaScript и Common Lisp. И по моим ощущения преимущества CL совершенно не оспоримые.
А при чём тут DSL?
С другой стороны, ваш оппонент, нахваливая гибкость С++ на примере boost замалчивает тот факт, что boost не только не входит в сам язык, но и изрядно усложняет и без того непростую базу
(html:with-parse-html (doc #U"http://habrahabr.ru/blogs/lisp/114981/")
(let ((map (make-hash-table :test 'equal)))
(iter (for node in-xpath-result "//*" on doc)
(incf (gethash (xtree:local-name node) map 0)))
map))QWebView web;
web.load( QUrl( "http://habrahabr.ru/blogs/lisp/114981/" ) );
QEventLoop waiter;
connect( & web, SIGNAL(loadFinished(bool)), & waiter, SLOT(quit()) );
waiter.exec();
QMap< QString, int > results;
waiter.exec()
foreach( QWebElement item, web.page()->mainFrame()->findAllElements("*") )
{
results[ item.tagName() ] ++;
}
int PointClass = class_new( pool );
(defclass PointClass () (slot))
class PointClass {};
но говорить, что в лисп есть только списки списки, а всё остальное это операции над списками, это абсолютно полное невежество. Так было 50 лет назад. С тех пор лисп очень сильно изменился.
Структуры, массивы, хэш-таблицы, FFI
Если вы читали SICP то должны отлично понимать преимущества Scheme над C. Саарказм ваш я понимаю, но не понимаю почему вы считаете что Lisp немногим лутше C.
придерживаюсь только того что Lisp предоставляет больше возможностей и человек с прямыми руками и работающим мозгом напишет на Lisp-е более короткое и элегантное решение всякой задачи чем на C/C++.
Lisp разработчик: две стороны одной медали