2011-01-30 3 views

ответ

14

Вопрос должен быть скорее: если вы хотите сделать вычисления с помощью Ant, можете ли вы это сделать? Давайте ограничимся чем-то простым, например, с помощью упрощенного калькулятора командной строки. Если вы можете это сделать, Ant наверняка квалифицируется как язык программирования, даже если это не было целью инструмента изначально.

пожалуй, наиболее простой язык, который мы могли бы определить это "Huttons Бритва", которая состоит из

  • Константы, как 5, 37, и так далее, все натуральные числа (считая от 0)
  • A + (37 + 5) + 15 + (42 + 0)

Не полезный язык любым способом, но великолепный старт, если вы попытаетесь использовать Ant для выполнения вычислений; если вы даже не можете сделать Бритву, вы, вероятно, не можете сделать что-то более продвинутое. Имейте в виду, что другие средства вычисления, такие как лямбда-исчисление, значительно отличаются от этого, так что может быть, что другие пути также жизнеспособны. Примечание: я не знаю, может ли Ant это сделать. В последний раз я смотрел на нее в 2006 году и решил никогда больше не смотреть на нее.

Обратите внимание, что язык не обязательно должен быть Turing Complete, чтобы быть языком программирования. У нас есть несколько, очень полезных языков программирования, которых нет.


Для не-Тьюринга полезных языков:

  • языков, которые только принимают Всего программы (то есть программы, которые заканчиваются). Это необходимо для многих языков программирования, которые используются в качестве теоретических операторов: Coq, Agda и т. Д. Другим примером является просто типизированное исчисление лямбда (простое типирование делает невозможным определение Y-комбинатора и получение рекурсии).

  • Языки, которые сильно зависят от домена. Одним из примеров является троллей,

    http://www.diku.dk/hjemmesider/ansatte/torbenm/Troll/

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

+0

Спасибо! Не могли бы вы привести примеры полных языков программирования без Тьюринга. –

+0

Набросился на него еще несколькими комментариями. –

+0

AFAIK Y-combinator можно определить в нетипизированном лямбда-исчислении, я ошибаюсь? –

4

Nope, Ant не является языком программирования. Это инструмент построения, написанный на Java.

+1

Даже если это может быть не намерение, возможно, вы можете злоупотреблять Ant и принуждать его к расчету для вас. –

0

Язык программирования? Я бы сказал, что Ant - это ограниченный скриптовый язык для сборки. Это управляемый XML-код.

Если вы решите выбрать, я бы сказал, что это не функциональный язык - он ближе по духу к императивному/процедурному.

+0

Через год, и это получает понижение? Если вы считаете, что такой шаг необходим, пожалуйста, объясните, где вы думаете, что этот ответ пошатнулся. – duffymo

3

Apache Ant - это декларативный язык для определения процесса сборки с использованием XML. Базовые конструкции AFAIK не полностью дополняют Turing, поэтому я не буду описывать его как язык программирования. Конечно, через выполнение других программ вы можете добиться того, что могут сделать эти программы.

+0

Я не думаю, что Turing Completeness является критерием для языка, который является языком программирования. Такой язык, возможно, не сможет заменить другой язык ТС, но они могут часто быть полезными сами. –

+1

@ Я ДАВЛЯЮТ CRAP ANSWERS: Мне нравится TC, потому что для меня язык программирования - это язык, который можно использовать для создания любой программы (любого алгоритма). Другие формальные языки, исполняемые/декларативные, обрабатываемые компьютером также имеют смысл, но я предпочитаю называть их доменными языками, потому что без TC они ограничены определенной областью программ. (btw. awesome nick :)) –

+1

Да, это обычно суровое ограничение. В случае хорошей проверки завершения, однако, удивительно, сколько полезных программ, которые могут быть записаны как итоговые. (Ник - это небольшая игра, в которой используется большинство сторонников SO Erlang. У всех нас есть глупые имена :) –

2

Как правило, язык программирования считается формализмом для описания алгоритмов. Тьюринговая машина считается наиболее общим механизмом для выполнения алгоритма.

Ant (без расширения, например Ant-Contrib) не завершен, потому что свойства неизменяемы после присвоения им значения. Каждое свойство должно быть явно указано по крайней мере один раз во всем скрипте. Каждый скрипт ant является конечным, поэтому число свойств конечно, и поэтому число состояний конечно. Следовательно, муравь не совершенствуется.

Следовательно, невозможно описать какой-либо алгоритм в муравье, и, таким образом, ant не является языком программирования.

2

Да, но только просто.

Я должен был на самом деле запрограммировать в мураве. Я работаю в магазине Java, и мы используем ant для его правильной цели, что-то вроде make-файла для Java, на самом деле это просто вещь. Но у нас есть полезные вещи, которые мы хотели сделать с ним, а скрипт ant был логичным местом для рассматриваемой сложности.

(Официальный метод выполнения произвольного программирования в ant - это написать расширение на Java. Проблема заключается в том, что в скрипте, который вы просматриваете, не так, и для этого требуется этап компиляции. писать в муравьях это было.)

муравей, как эзотерический язык программирования, чье тщеславие состоит в том, что все это правильно сформировано XML. Выполнение даже довольно простых вещей требует нескольких часов мысли о том, как решить эту проблему. Вы можете скрыть некоторые ужасы за макродефтом.

В основном вы можете делать вещи только с базовым муравьем, но необходим муравейник, если вы хотите сохранить драгоценный отброс вашего здравомыслия. Он включает в себя несколько полезных вещей, таких как переменные, арифметика и управление потоком.

Следовательно, мое правило: никогда не создавайте свой доменный язык Turing-complete; потому что один раз вы может код в нем, у вас будет есть, чтобы закодировать в нем.

муравьиное программирование - это умение, которого я не буду перечислять на своем резюме.

Смежные вопросы