2012-02-04 спонсируется словом "homoiconicity" http://en.wikipedia.org/wiki/Homoiconicity.
Справочная информация: я собираюсь выбрать, какую книгу о Clojure купить- либо «Clojure in Action» , либо (поступающий в конце апреля) «Программирование Clojure» (вы можете прочитать его через O'Reilly Rough Cuts , половина страницвиден).Что меня поразило, так это то, что в обеих книгах это свойство - гомойконичность - получило такое большое внимание.
Поскольку корни Clojure основаны на Лиспе, я сослался на «мертвую сексуальную» книгу это действительно так важно.Хорошо, я вижу макросы, объясненные подробно, но я не уловил упомянутый акцент.Теперь сравните с этим (цитата из «Clojure в действии»)
Эта гомойконичность также делает возможной макросистему Clojure.
Она выглядит почти без макросовбыло бы невозможноДаже утверждение Википедии (ссылка выше) более сбалансировано, но ни один из этих источников (*) не учитывает человеческий фактор в пользу английского синтаксиса.
Если я не ошибаюсь, макросинтаксис (подобный Lisp) мог бы быть возможенв C # (например), только с большим усилием команды C #.Но это стоимость команды дизайнеров, а не пользователей (?).Второе - привычки имеют значение.Если в реальной жизни вы думаете «a + b», а в компьютерном мире вы постоянно переводите его на «+ ab», производительность страдает (я могу убедиться в этом сам, когда перешел от функторов C ++ к лямбдам C #).
Эта похвала, что программист Clojure пишет программы почти напрямую как AST, пугает меня как чтение, что «благодаря написанию кода непосредственно в шестнадцатеричном коде вы не только изучаете шестнадцатеричную систему наизусть, но вы ближе к машине».
Подводя итог - я люблю метапрограммирование, я люблю макросы, похожие на Лисп (хотя я не Лиспер), но я вижу здесь две вещи - макросы и гомойконичность.Первый, без сомнения, великолепен, второй - не так много (как я понимаю), потому что он отвечает потребностям компьютера в компьютерах, и должен быть наоборот.
Вопрос
Является ли гомоконичность действительно полезной для людей (конечных пользователей языка) или она практически полезна для разработчиков языков?Примеры очень приветствуются!
Или, на всякий случай, я перефразирую - если предположить, что в данном языке есть макросы Lisp, «добавление» гомоиконичности улучшит производительность конечного пользователя?Expresiveness?Или совсем наоборот?
(*) Я не могу быть на 100% уверен, потому что я вижу только часть книг Clojure, и я не читаю их, просто оцениваю их для покупки.
Обновление
Спасибо всем за ответы, жаль, что мне пришлось выбрать только один в качестве решения :-), это не значит, что я ценю других меньше, этот самый полный для меня.