В this article, автор утверждает:Шаблон метапрограммирования: примитивный рекурсивный?
... программа действительно показывают, что механизм шаблонов конкретизации является примитивно рекурсивным языком, который может выполнять нетривиальные вычисления во время компиляции.
Я нашел это довольно интересным, так как я помогаю преподавать класс в Теории вычислений, который вникает в теорию примитивно-рекурсивных функций. Тем не менее, у меня создалось впечатление, что Template Metaprogramming был Turing-complete, что является строго более сильным утверждением, чем сказать, что оно примитивно рекурсивно ... И в конце концов, создать метапрограмму шаблона, которая не может остановить, не очень сложно ,
Я что-то упустил? Является ли шаблон метапрограммированием строго примитивного рекурсивного языка, или я верю, что считаю, что он охватывает более широкий спектр программ?
Спасибо за исправления Коди ... В следующий раз я попытаюсь быть чистым :) –
Несмотря на примитивную рекурсивность, метапрограммирование шаблона C++ также эквивалентно Тьюрингу. – Gabe
Исправьте меня, если я ошибаюсь, но я считаю, что говорить, что язык является «примитивным рекурсивным», подразумевает, что вы можете запрограммировать очень определенный класс функций (а именно те, которые не используют неограниченные циклы). Примитивные рекурсивные языки гарантируют, что любая написанная в них программа остановится ... Конечно, эквивалентный язык Тьюринга также может запускать примитивно-рекурсивную функцию, но это не относится к делу. –