Действительно ли гомоиконность необходима для наличия макросов?

2012-02-04 спонсируется словом "homoiconicity" http: // en. wikipedia.org/wiki/Homoiconicity.

Справочная информация: я собираюсь выбрать, какую книгу о Clojure купить - либо «Clojure in Action» , либо (выйдет в конце апреля) «Программирование на Clojure» (вы можете прочитать его через O'Reilly Rough Cuts , половина страниц видна). Что поразило меня, так это то, что в обеих книгах этому свойству - гомоиконности - уделялось столько внимания.

Так как корни Clojure основаны на Lisp, я сослался на "мертвенно сексуальную" книгу , это действительно так важно. Я могу видеть подробное объяснение макросов, но я не уловил упомянутого акцента. А теперь сравните с этим (цитата из «Clojure in Action»)

Эта гомоаконичность также делает возможной макросистему Clojure.

Похоже, что без нее макросы были бы невозможны. Даже заявление википедии (li nk выше) более сбалансирован, но ни один из этих источников (*) не учитывает человеческий фактор в пользу английского синтаксиса.

Если я не ошибаюсь, макросинтаксис (подобный Lisp) мог бы быть возможен в C # (например), только с большими усилиями со стороны команды C #. Но это затраты команды дизайнеров, а не пользователей (?). Во-вторых, имеют значение привычки.Если в реальной жизни вы думаете «a + b», а в компьютерном мире вы постоянно переводите это в «+ a b», производительность страдает (я сам в этом убедился, когда перешел от функторов C ++ к лямбдам C #).

Эта похвала тому, что программист Clojure пишет программы почти напрямую как AST, пугает меня, так как я прочитал, что «благодаря написанию кода непосредственно в шестнадцатеричном коде вы не только изучаете шестнадцатеричную систему наизусть, но и становитесь ближе к машине».

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

Вопрос

Действительно ли гомоиконность так полезна для людей (конечных пользователей языка), или она на самом деле почти исключительно полезна для разработчиков языков? Примеры очень приветствуются!

Или, на всякий случай, перефразирую - если в данном языке есть Lisp-макросы, улучшит ли «добавление» гомиконности продуктивность конечного пользователя? Экспрессивность? Или наоборот?

(*) Я не могу быть уверен на 100%, потому что я вижу лишь часть книг по Clojure и не читаю их, а просто оцениваю их для покупки.

Обновление

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

8
задан greenoldman 5 February 2012 в 13:06
поделиться