Se seguirmos o livro (ou qualquer outra versão da especificação da linguagem, se você preferir), quanta energia computacional pode uma implementação C?
Observe que “implementação C” tem um significado técnico: é uma instanciação específica da especificação da linguagem de programação C em que o comportamento definido pela implementação é documentado. A implementação de CA não precisa ser executada em um computador real. Ele precisa implementar o idioma inteiro, incluindo todos os objetos com uma representação de cadeia de bits e tipos com um tamanho definido pela implementação.
Para os fins desta pergunta, não há armazenamento externo. A única entrada / saída que você pode executar é getchar
(ler a entrada do programa) e putchar
(gravar a saída do programa). Além disso, qualquer programa que invoque um comportamento indefinido é inválido: um programa válido deve ter seu comportamento definido pela especificação C mais a descrição da implementação dos comportamentos definidos pela implementação listados no apêndice J (para C99). Observe que chamar funções de biblioteca que não são mencionadas no padrão é um comportamento indefinido.
Minha reação inicial foi que uma implementação C não passa de um autômato finito, porque tem um limite na quantidade de memória endereçável (você não pode endereçar mais que sizeof(char*) * CHAR_BIT
bits de armazenamento, pois endereços de memória distintos devem ter padrões de bits distintos quando armazenados em um ponteiro de bytes).
No entanto, acho que uma implementação pode fazer mais do que isso. Tanto quanto posso dizer, o padrão não impõe limite à profundidade da recursão. Assim, você pode fazer quantas chamadas de função recursivas quiser, apenas todas, exceto um número finito de chamadas, devem usar register
argumentos não endereçáveis ( ). Assim, uma implementação C que permite recursão arbitrária e não tem limite no número de register
objetos pode codificar autômatos de empilhamento determinístico.
Isso está correto? Você consegue encontrar uma implementação C mais poderosa? Existe uma implementação C completa de Turing?