2

В this article, автор утверждает:Шаблон метапрограммирования: примитивный рекурсивный?

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

Я нашел это довольно интересным, так как я помогаю преподавать класс в Теории вычислений, который вникает в теорию примитивно-рекурсивных функций. Тем не менее, у меня создалось впечатление, что Template Metaprogramming был Turing-complete, что является строго более сильным утверждением, чем сказать, что оно примитивно рекурсивно ... И в конце концов, создать метапрограмму шаблона, которая не может остановить, не очень сложно ,

Я что-то упустил? Является ли шаблон метапрограммированием строго примитивного рекурсивного языка, или я верю, что считаю, что он охватывает более широкий спектр программ?

+0

Спасибо за исправления Коди ... В следующий раз я попытаюсь быть чистым :) –

+0

Несмотря на примитивную рекурсивность, метапрограммирование шаблона C++ также эквивалентно Тьюрингу. – Gabe

+0

Исправьте меня, если я ошибаюсь, но я считаю, что говорить, что язык является «примитивным рекурсивным», подразумевает, что вы можете запрограммировать очень определенный класс функций (а именно те, которые не используют неограниченные циклы). Примитивные рекурсивные языки гарантируют, что любая написанная в них программа остановится ... Конечно, эквивалентный язык Тьюринга также может запускать примитивно-рекурсивную функцию, но это не относится к делу. –

ответ

3

Я считаю, что вы просто слишком много читали в тексте, а «примитив» не означает «примитивный рекурсивный», а скорее «рекурсивный язык» (который звучит странно, я бы назвал это так: функциональный язык, но неважно), что является примитивным.

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

Но вы правы, TMP, безусловно, является Тьюрингом.

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

+0

Ahhh, я вижу ... Почему-то я даже не думал об этом :) Большое спасибо! –

1

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

+0

А, я вижу. Большое спасибо; это должно было что-то увидеть! –

+0

Да, такое волнение встречается редко на заседаниях комитета ИСО :) – Yttrill