Ya, troff sudah selesai Turing. Ini mendukung rekursi sewenang-wenang dan percabangan bersyarat, yang cukup. Ini juga memiliki register dan berbagai cara lain untuk menyimpan data, yang memberi Anda jalan lain lagi.
Kelengkapan Turing tidak menyiratkan bahwa program yang sangat kompleks itu praktis - hanya saja mereka secara teoritis mungkin, entah bagaimana, pada tingkat penghapusan tertentu - dan tidak juga ketiadaannya menyiratkan bahwa mereka tidak, sehingga tidak ada troff yang menjadi Turing-lengkap atau pun tidak. tidak adanya program yang rumit tidak menyarankan banyak hal tentang hal itu.
Turing kelengkapan bukan, umumnya, properti yang berarti sesuatu yang bermanfaat bagi Anda pengguna. Maksudnya adalah Anda dapat mensimulasikan mesin Turing dengan itu, bukan yang Anda inginkan, dan bukan bahwa output yang Anda dapatkan dari itu adalah sesuatu seperti apa yang Anda harapkan untuk dibaca. Input atau output mungkin hanya berupa angka, atau bahkan berapa kali sesuatu muncul, daripada sesuatu yang bermanfaat, dan jenis mesin yang Anda akhirnya simulasikan dan program-program mereka seringkali sulit dipahami.
Banyak bahasa dan sistem yang kebetulan Turing-lengkap tetapi tidak cukup berlaku untuk setiap pemrograman yang sebenarnya di bagian itu (misalnya, permainan Conway of Life atau CSS), dan beberapa bahasa yang sangat berguna untuk pemrograman nyata tidak Turing-lengkap (misalnya, Agda). Karakteristik yang menentukan sebenarnya adalah Anda bisa
- terus berjalan selamanya
- ingat sebanyak mungkin data yang Anda inginkan
- pilih apa yang harus dilakukan selanjutnya
Seringkali sifat-sifat tersebut - terutama non-pemutusan hubungan kerja - sebenarnya tidak diinginkan, mungkin termasuk untuk troff. Di luar ilmu komputer teoretis dan desain bahasa, kelengkapan Turing bukanlah properti yang sangat menarik pada saat itu, meskipun menarik.
mov
instruksi Turing-lengkap. (Karena mode pengalamatan yang memungkinkan Anda menggunakan tabel pencarian, dan mnemonic yang sama digunakan untuk memuat, menyimpan, dan langsung bergerak untuk mendaftar.) Pada banyak SPA lainnya yang memilikimov
instruksi (misalnya ARM) itu hanya perpindahan reg-reg dan tidak turing-lengkap. (Meskipun pada ARM dapat melakukan shift / rotate.) Juga, Anda sebenarnya perlujmp
membuat loop di sekitar blokmov
instruksi Anda, kecuali jika Anda berada dalam mode 16-bit di mana pointer instruksi dapat membungkus dalam segmen kode 64k untuk loop secara implisit.push {r4, lr}
/pop {r4,pc}
Umum dalam fungsi yang perlu menyimpan / mengembalikan satu register yang diawetkan dengan panggilan dan menjaga stack tetap selaras: mereka juga menyimpan reg tautan dan mengembalikannya ke penghitung program untuk kembali. (32-bit ARM's store / load-multiple instructions menggunakan bitfield untuk menunjukkan register mana yang akan disimpan / load.) Dan ya, Anda dapat menggunakan PC sebagai tujuan darimov
atau instruksi apa pun. Tapi saya tidak tahu itu biasa di masa lalu. Tapi saya pernah mendengar tentang ISA yang dipicu transportasi.