archimag
0
Думаю стоит указать в статье, что функция son создаёт простую hash-table, это просто такой сахар.
archimag
+1
> И что внутри там появилось что-то, отличное от списокв.

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

> что расширял себя сам, «вводя новые ключевые слова» через
> задание новых операций над списками

У вас всё в голове перемешалось.
archimag
0
> Мда, я думал интереснее будет, чего нового про лисп узнаю
> «да ти праграмиравать сам ни умииш и ничаво не знаиш!!!»

Я не знаю, чего у вас там за обычная аргументация, но говорить, что в лисп есть только списки списки, а всё остальное это операции над списками, это абсолютно полное невежество. Так было 50 лет назад. С тех пор лисп очень сильно изменился.

> Посмотрите ради интереса создание класса на plain c, на common lisp
> и на c++.

Где в этом коде вы увидели создание класса на plain C? Когда он создаёт объект?

> Ничего не напоминает?

Определение класса? о_О
archimag
+1
> Все навороты — CLOS, globals, dispatch — это операции над списками.

Ну что за невежество.
archimag
+2
> вы только что назвали 2000 незнакомых вам человек
> говном только за знание РНР

Вы что, читать не умеете?

Во-первых, я не называл никого говно, я говорил только о коде. Во-вторых, я специально подчеркнул, что некомпетентность большинства ищущих работу не связана с фактом использования PHP. Есть процент разработчиков, которым бы лучше было наверное заниматься чем-то другим. Это приводит к тому, что они постоянно ищут работу (либо не имеют работы в данный момент, либо имеют проблемы на текущей). в итоге, 95% кандидатов на рынке труда принадлежат именно к таким, хотя их общий процент на фоне всех разработчиков совсем не велик. И сделать правильный выбор небольшой не-IT компании очень трудно.
archimag
+4
Очень идеализировано и бесконечно далеко от практики. Говорить о взаимозаменяемости программистов на PHP имеет смысл только для больших организаций, с развитым IT-подразделением, или даже только для IT-компаний.

На деле оказывается, что когда PHP-программист увольняется, то надо делать выбор из 2000 кандидатов, большинство из которых совершенно не компетентны (не потому что, PHP, а потому что ищут работу). Кого в итоге возьмут — вопрос удачи (ведь контора не софтверная, с небольшим IT-подразделением).

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

В итоге, с точки зрения бизнеса, риски связанные с выбором CL просто меркнут на фоне рисков, связанных с постоянной ротацией якобы взаимозаменяемы PHP-программистов. Да, они взаимозаменяемы, но только для перемешивания говна, а бизнесу то надо совсем другое.

Теперь насчёт уникальных решений. Да, интернет-магазин задача типовая и можно использовать типовое решение. Только это вопрос вообще не имеет отношения к разработке, а исключительно к бизнесу. Если бизнес не хочет типового решения, а имеет амбиции и хочет развиваться, то он не будет делать ставку на типовое решение. У него есть набор своих требований, которые плохо ложатся на типовые решения.

Касательно конкретно этого магазина. Насколько я понимаю, там и был php до прихода автора. И, очевидно, описанная выше ситуация «круговорота говна в природе» настолько достала владельцев, что они согласились с аргументацией и дали возможность использовать CL. Да, риски велики. Но это дало шансы на изменения развития в сторону реальных интересов бизнеса. Собственно, это и есть задача бизнеса — оценивать риски, а программисты пускай лучше пишут код.
archimag
+1
> Лисп — инструмент художника.

Я не знаю про какой Лисп вы говорите, но CL это именно промышленная платформа, созданная по заказу МО США (финансированием проекта занималась DARPA). Я не знаю какой язык предпочитаю в Пентагоне сейчас, но в своё время для него было создана два языка — Ada (о чём все знают) для системного программирования, и CL (о чем знают уже не все) для всего остального. Т.е. CL изначально создавался именно как промышленный стандарт для широкого круга задач.
archimag
0
Хм, не считал, я женат ) Много работаю, поздно ложусь и мало сплю, нет необходимого задора )
archimag
0
> В таком случае аргументация посильней должна бы быть…

Я сегодня не в духе ))
archimag
0
> lisp vs pyhon.
> Троллить западло

Я сначал писал на Python, потом познакомился с CL и перешёл на него. При чём, это было в рамках задачи, для которой я работал на Python, но в итоге процесс разработки стал слишком тяжёлым: медленный язык и нет полноценного REPL. В итоге я полностью отказался от Python в пользу CL. Вот и вся моя аргументация )
archimag
0
> Проблема в том, что в большинстве случаев код нужно еще и легко читать.

Я регулярно читаю достаточно большие объёмы кода на разных языках и смею вас уверить, что код на CL читать и понимать гораздо проще. Правда, да, есть не совсем психически здоровые люди, которые налегают на мета и прочие амфитамины, и тут может быть засада. Но если код пишут вменяемые разработчики, то работать с ним очень и очень просто.
archimag
+2
> Чтож этот ваш ЛNSП не используется то нигде, кроме как в мокрых фантазиях этих умных парней?

Вы не поверите, но используют.
archimag
+1
> наслаждайся своей илитарностью.

О какой «илитарности» идёт речь? Вас кто-то обидел?
archimag
+2
> Ну я как бы не хочу на написание, отладку и комментирование тратить
> больше нескольких часов.

Я вас умаляю, вот код, который считает колличество разных тэгов на этой странице:

(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))
archimag
+1
> В lisp как в язык кроме car и cdr вообще мало что входит :).

Так было 50 лет назад.

> CLOS и прочие радости жизни — это уже как бы «библиотеки», нэ?

Нет.

> Которые будут разные в common lisp, emacs lisp, autocad lisp, iron bank что-то-там
> lisp и прочих

Разные лиспы очень сильно между собой отличаются, схожесть между ними в основном за счёт «скобочек», да старых унаследованных команда. Они похожи между собой не больше, чем C/C++/Java/C#.
archimag
0
> Предлагаю что-нибудь простое

Ну что-то вы совсем просто предложили ))
archimag
+1
> а что если устроить такой поединок:

Нет, спасибо, я такой ерундой не занимаюсь. Если что, то мой открытый код на CL здесь: github.com/archimag
archimag
0
> Если вообще работаете с этим языком на дневной работе!

Если бы не работал, то вообще бы ничего не говорил на эту тему.
archimag
+4
> Но для решения практических задач-то хватает?

Отвечу только на это (не хочу сильно увлекаться дискуссией) — нет. То, что в CL делается легко и изящно в С++ приходится решать через боль и мучения. Вообще, аргументация про то, что «хватает», она ущербна по своей сути. Хватает для всех зада и ассемблера, ведь все языки тьюринг-полные.

На эту тему могу порекомендовать вот эту статью: www.nestor.minsk.by/sr/2003/07/30710.html, там где про парадокса Блаба.
archimag
+3
Сори, ответ сорвался (

> Большинство практических применений мультиметодов
> в C++ решаются шаблонам

Нет. Нормальной реализации мультиметодов для С++ даже Александреску не смог сделать.

> Если для контроля ошибок и отладки, то как бы в C++ есть исключения.

Рестарты намного круче исключений.

>> динамических переменных
> Если очень надо, то есть QVariant / boost::variant

Это вообще не из той области.

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

Я больше 7 лет писал C++ и около 3 на Python, плюс были ещё разные другие языки в меньших масштабах. Сейчас я пишу только на двух — JavaScript и Common Lisp. И по моим ощущения преимущества CL совершенно не оспоримые.

> DSL писать так же удобно как на LISP

А при чём тут DSL?
archimag
0
>> динамических переменных
> Если очень надо, то есть QVariant / boost::variant

> Но практика показывает, что для большинства прикладных
> задач это не так уж и важно :(.
archimag
0
> Думаю, что AST (или макросы) и есть та вакуумная пушка

Нет, макросы всего лишь один из элементов CL. Это делают жизнь лучше. Но даже без них CL был бы лучше больше современных языков.
archimag
+6
> ИМХО, преувеличение, вызванное недостаточным
> знанием других языков программирования

А у вас кажется не хватает знаний о CL ))

> динственное отличие современного C++ от Lisp в плане встроенных в язык
> функций — это отсутствие доступа к AST.

Ну что вы такое говорите. Как насчёт мультиметодов, рестартов, динамических переменных, MOP? Поверьте, разница огромна.
archimag
0
блин, куда-то не туда коммента пошёл (
archimag
0
Что такое «массовые лиспы»? Какие у них общие недостатки.

Ну да пустой разговор. Вряд ли кто-либо из программистов на CL согласится с тем, что Clojure хоть что-нибудь исправляет.
archimag
0
Вряд ли можно говорить о том, что Clojure исправляет «слабости», скорей это просто несколько другой язык с заметно отличающейся идеологией.
archimag
0
> написание собственной велосипедной реализации

О чем речь?
archimag
0
Думаю, что это удобная, но наивная точка зрения )
archimag
0
Да Грэм это вообще отдельная история.

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

Естественно, когда встал вопрос о другой нагрузке, то приложение надо было переписывать фактически полностью. На чём переписывать? Поскольку Грэма уже не было, то язык выбирали заново. Выбрали что знали лучше и что знали, что будет работать.

Ну, конечно, Грэм подаёт эту историю несколько по другому.
archimag
0
Да. Ну да они все примерно одинаковые )
archimag
0
Я когда писал lisper.ru, то дизайнера у меня не было и я сначала делал именно на встроенном языке. По результатам этого опыта и я пришел к шаблонам, как к оптимальному решению )
archimag
+1
Ну так на шаблонах и получается же лаконичнее!

У генерации контента с помощью встроенного eDSL фактически вообще нет никаких преимущества. Я только для демонстрационных приложений объёмом в 10 строк использую cl-who.
archimag
+2
Дизайнеру, как и самому программисту, проще и удобней редактировать код, максимально приближенный к целевой разметке.

Кроме того, в данном приложении автор использует библиотеку cl-closure-template. которая имеет ещё и совсем другие преимущества (хотя это и не важно для данного приложения), я писал об этом здесь
archimag
+1
Ну так шаблоны же позволяют тоже самое, только они не забивают мусором основной код и их могу править дизайнеры.
archimag
+1
Я пробовал так. В итоге когда перешёл на шаблоны, то был просто счастлив от того, насколько всё стало проще и яснее.

Вообще, с мнением, что контент надо генерировать через шаблоны я думаю согласится любой нормальный веб-разработчик, не зависимо от используемого им языка.
archimag
+1
> Можно было и шаблоны описывать лисповыми конструкциями

На практике получается просто жуть.
archimag
+1
Безусловно. Только это другие языки. Не такие как CL. И сделано там метапрограммирование совсем по другому. Я говорю о том, что конкретно CL практически не реально сделать на основе другого синтаксиса.
archimag
0
Гипотеза неверная, проверенно на опыте.
archimag
+1
Например, на этот основано метапрограммирование. Ньюансов много разных.