Как Lisp (Clojure) и Tcl сравниваются с точки зрения возможностей абстракции и метапрограммирования? - PullRequest
9 голосов
/ 27 апреля 2011

И то и другое хорошо подходит для создания расширяемого API и генерации кода.

В чем основные различия между ними?

Какими вы видите их сильные и слабые стороны, ...

Ответы [ 2 ]

13 голосов
/ 28 апреля 2011

Отказ от ответственности: я больше знаком с Clojure, чем с Tcl, поэтому извиняюсь перед любыми Tclers, если я искажу что-либо. Однако вот некоторые моменты, о которых я обычно знаю:

  • Оба чрезвычайно гибки - вы можете использовать метапрограммирование для генерации и исполнения практически любого кода, который вам нравится во время выполнения.
  • Clojure - это язык JVM , тогда как Tcl относительно автономен.
    • Преимущества нахождения в JVM включают возможность генерировать совместимый код и работать в качестве DSL для библиотек на других языках JVM, таких как Java и Scala. Также вы получаете доступ к огромному количеству библиотек Java.
    • Недостатком участия в JVM является относительно значительное время запуска. Поэтому вы, вероятно, предпочтете Clojure для более длительных серверных приложений, а не для инструментов командной строки, которые должны выполняться быстро.
  • В метапрограммировании Clojure будет скомпилировано с собственным кодом (через JIT в JVM). Будет зависеть от вашего приложения, но я ожидаю, что в большинстве случаев это будет работать быстрее, чем Tcl
  • Оба языка динамические (что хорошо для метапрограммирования в среднем!) И поддерживают функциональное программирование
  • Clojure содержит некоторые интересные абстракции, которые очень полезны для метапрограммирования - в частности, значительную поддержку последовательностей в языке
  • Я лично считаю, что простота синтаксиса Lisp является большим преимуществом для метапрограммирования - гораздо проще генерировать код, когда есть только одна синтаксическая конструкция (s-выражение), о которой нужно беспокоиться

В среднем оба языка отлично подходят для метапрограммирования, но если бы я выбирал между ними:

  • Я бы выбрал Clojure, если бы я создавал приложение на стороне сервера или если у меня была особая потребность в совместимости JVM
  • Я бы выбрал Tcl, если бы хотел DSL для управления скриптами / инструментами в командной строке
8 голосов
/ 28 апреля 2011

Я думаю, что ответ Микеры превосходен.

Я хотел бы добавить только то, что в метапрограммировании clojure, имеющем тенденцию фокусироваться на макросах, грандиозном унифицированном решении метапрограммирования без одноранговой сети, в tcl есть несколько небольших острых инструментов, доступных для метапрограммирования, среди которых есть «неизвестная» команда, которая может бытьРаньше делали всякие хитрые трюки.Также интересно то, что хотя у clojure есть только небольшое количество ключевых слов или «специальных форм», tcl фактически не имеет ни одного, что делает tcl его собственным dsl, и изменение (или расширение) поведения любой команды возможно.

Одна вещь, с которой я должен не согласиться с ответом Микеры, - это то, что синтаксис clojure более поддается метапрограммированию.Один из неприятных сюрпризов для меня, когда я подхожу к clojure, заключается в том, насколько синтаксические вариации существуют в clojure, с различными вариантами использования () [] {} "" ^ {} # ': key ... и так далее, и так далее.Я полностью оправдываю этот тип синтаксического сахара, но на самом деле я нахожу синтаксис tcl более легким в использовании для «запутанного» метапрограммирования и генерации кода.А природа tcl «все является строкой» добавляет простоты.

Что касается возможностей многопользовательской обработки, неизменяемых структур данных, чисто функциональной природы и многих других примеров отличительных особенностей clojure, в tcl действительно нет ничего сопоставимого.

Я не мог согласиться с выводом Микеры.

...