Apakah secara teori dimungkinkan untuk menentukan bahasa pemrograman yang tidak dapat diterapkan? Bahasa pemrograman adalah cara mendefinisikan fungsi. Implementasi berarti metode untuk menjalankan program yang diberikan dalam bahasa itu pada input yang diberikan ke output fungsi yang sesuai dengan program pada input tersebut.
Apa persyaratan minimal dari bahasa seperti itu?
Jawaban:
Biasanya, menerapkan bahasa pemrograman setidaknya memberikan juru bahasa (atau kompiler ke bahasa) yang tidak lebih dari Turing-complete.
Dengan menggunakan "definisi" ini, kita dapat menentukan bahasa pemrograman seperti ini:
hanya ada satu program yang mungkin yaitu
HALT
;spesifikasi
HALT
: itu adalah fungsi yang memecahkan masalah terputus - putus .Menerapkan bahasa pemrograman ini membutuhkan pemecahan masalah yang terhenti dengan implementasi. (Yang tidak mungkin karena implementasi kami seharusnya tidak lebih kuat daripada mesin Turing).
Spesifikasi menangani logika dan dengan demikian dapat meminta lebih banyak. Spesifikasi lain yang tidak mungkin diterapkan adalah "false". (Atau kalimat yang bertentangan dalam spesifikasi) Tapi ini tidak terasa seperti spesifikasi, itulah sebabnya saya menggunakan contoh masalah penghentian.
sumber
1/0
let loop = loop in loop
Hanya catatan samping yang ingin tahu: mesin template C ++ sudah menyelesaikan Turing
Teorema 1: Dengan tidak adanya batasan instantiasi, templat C ++ lengkap-Turing.
Akibat wajar 1: Dengan tidak adanya batas instantiation, apakah kompiler C ++ akan berhenti ketika mengkompilasi program yang diberikan tidak dapat ditentukan.
... jadi C ++ itu sendiri dapat dianggap sebagai bahasa pemrograman yang tidak ada "implementasi" bisa ada ... :-D
sumber
Tidak jelas apa yang Anda maksud dengan "bahasa pemrograman" dan "implementasi bahasa". Anda perlu memberikan definisi yang ketat dari keduanya untuk mendapatkan jawaban.
Tapi ini bukan jenis bahasa spesifikasi yang orang maksud ketika mereka menggunakan frasa "bahasa pemrograman". Sebuah bahasa pemrograman biasanya dimaksudkan untuk menjadi bahasa untuk mengekspresikan fungsi dihitung (proses, ...) dan untuk berkomunikasi instruksi untuk mesin dan oleh karena itu ada TM yang dapat mensimulasikan program-program dan output hasil mereka. Jadi dalam arti memiliki bahasa pemrograman yang tidak dapat diimplementasikan tidak bermakna.
(Dugaan saya adalah bahwa Anda mungkin membingungkan bahasa pemrograman baik dengan bahasa spesifikasi atau bahasa formal . Dalam kasus apa pun, kami dapat menentukan bahasa yang tidak dapat dihitung.)
sumber
Ada banyak bahasa yang ditentukan tanpa implementasi, misalnya Algol 60 seharusnya menjadi bahasa untuk menulis algoritma, bukan untuk diimplementasikan. Beberapa dari banyak bahasa "hanya untuk bersenang-senang" telah ditentukan jauh sebelum implementasi, Intercal datang ke pikiran.
sumber