Jika kita membaca buku (atau versi lain dari spesifikasi bahasa jika Anda mau), berapa banyak daya komputasi yang dapat dimiliki oleh implementasi C?
Perhatikan bahwa "implementasi C" memiliki arti teknis: itu adalah contoh khusus dari spesifikasi bahasa pemrograman C di mana perilaku yang ditentukan implementasi didokumentasikan. Implementasi AC tidak harus dapat berjalan di komputer yang sebenarnya. Itu memang harus mengimplementasikan seluruh bahasa, termasuk setiap objek yang memiliki representasi bit-string dan tipe yang memiliki ukuran implementasi yang ditentukan.
Untuk keperluan pertanyaan ini, tidak ada penyimpanan eksternal. Satu-satunya input / output yang dapat Anda lakukan adalah getchar
(untuk membaca input program) dan putchar
(untuk menulis output program). Juga setiap program yang memanggil perilaku tidak terdefinisi tidak valid: program yang valid harus memiliki perilakunya yang didefinisikan oleh spesifikasi C ditambah deskripsi implementasi dari perilaku yang didefinisikan implementasi yang tercantum dalam lampiran J (untuk C99). Perhatikan bahwa memanggil fungsi perpustakaan yang tidak disebutkan dalam standar adalah perilaku yang tidak ditentukan.
Reaksi awal saya adalah bahwa implementasi C tidak lebih dari otomat terbatas, karena memiliki batasan pada jumlah memori yang dapat dialamatkan (Anda tidak dapat menangani lebih dari sizeof(char*) * CHAR_BIT
bit penyimpanan, karena alamat memori yang berbeda harus memiliki pola bit yang berbeda ketika disimpan dalam byte pointer).
Namun saya pikir implementasi dapat melakukan lebih dari ini. Sejauh yang saya tahu, standar tidak menetapkan batasan pada kedalaman rekursi. Jadi, Anda dapat membuat panggilan fungsi rekursif sebanyak yang Anda suka, hanya semua kecuali sejumlah panggilan yang terbatas harus menggunakan register
argumen yang tidak dapat dialamatkan ( ). Dengan demikian implementasi C yang memungkinkan rekursi sewenang-wenang dan tidak memiliki batasan jumlah register
objek dapat mengkodekan automata pushdown deterministik.
Apakah ini benar? Bisakah Anda menemukan implementasi C yang lebih kuat? Apakah implementasi C lengkap-Turing ada?