Какие полные макроязыки Тьюринга доступны для C / C ++ - PullRequest
2 голосов
/ 06 сентября 2011

Преамбула

Одним из основных моментов, которые Лисперс заявляет в качестве бонуса по сравнению с более "основными" языками, является то, что макроязык на самом деле завершен по Тьюрингу (я не могу вспомнить, был ли это Пол Грэм в ВLisp или, если это был Конрад Барски в Land Of Lisp ) 1 , и для постороннего, по крайней мере, это кажется правдой - директивы препроцессора в C / C ++не кажется, что Тьюринг завершен (если честно, они больше похожи на синтаксис аннотаций).

А теперь ... вопрос

  1. Это точная оценка?Будучи только баловаться C, это поражает меня как еще один момент, когда Лисперс чрезмерно усердствует
  2. Существуют ли какие-либо полные языки макроопределения Тьюринга (для C / C ++), на которые стоит обратить внимание?
    • Есть ли какие-нибудь находящиеся в работе или неудачные попытки, которые, возможно, стоит искать в будущем?
    • Я слышал, что Python теперь может служить основой для компиляции C / C ++ (подразумевая, что Python может использоваться для написания макросов), но я не видел подтверждения этому.Это правда?

(я воздержусь от вопросов о мнении типа «что лучше ...»)

1.Кстати, обе эти книги действительно хороши, просто скажу:

Ответы [ 2 ]

4 голосов
/ 06 сентября 2011
Макросы

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

Но да, это обманИспользуемое там решение настоятельно подразумевает, что макросы C на самом деле не являются завершенными по Тьюрингу.

3 голосов
/ 06 сентября 2011

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

Шаблоны C ++ являются признанным преемником магии препроцессораи немного легче понять, чем те.Итак, Лисперы снова совершенно правы и упускают суть, как всегда: -).

...