Mungkin pemahaman saya yang terbatas tentang subjek ini tidak benar, tetapi sejauh ini yang saya mengerti:
Pemrograman fungsional didasarkan dari Lambda Calculus, yang dirumuskan oleh Gereja Alonzo.
Pemrograman imperatif didasarkan pada model mesin Turing, yang dibuat oleh Alan Turing, siswa Gereja.
Kalkulus Lambda sama kuat dan mampu dengan Mesin Turing, yang
berarti mereka setara dalam kekuatan komputasi.
Jika pemrograman fungsional didasarkan pada Lambda Calculus dan bukan mesin Turing, lalu mengapa beberapa (atau semua) dari mereka dijelaskan sebagai Turing lengkap, dan bukan Lambda lengkap atau semacamnya? Apakah istilah "Kelengkapan Turing" khusus untuk mesin Turing, atau hanya sebuah kata?
Terakhir, jika bahasa imperatif didasarkan pada Mesin Turing, dan komputer pada dasarnya adalah mesin Turing, tanpa memori tak terbatas, apakah itu berarti mereka berkinerja lebih baik daripada bahasa pemrograman fungsional pada PC modern kita?
Jika itu masalahnya, lalu apa yang setara dengan mesin kalkulus lambda?
Saya tahu ini tampaknya menjadi 3 pertanyaan terpisah, tetapi mereka semua terkait erat, dan masing-masing tergantung pada pertanyaan sebelumnya menjadi pertanyaan yang valid untuk memulai.
sumber
(a -> a) -> a
.Jawaban:
Singkatnya :
Apa yang mencirikan bahasa pemrograman imperatif yang dekat dengan mesin Turing dan komputer biasa seperti PC, (lebih dekat dengan mesin akses acak (RAM) daripada mesin Turing) adalah konsep memori eksplisit yang dapat dimodifikasi untuk disimpan (hasil antara ). Ini adalah tampilan automata dari komputasi, dengan konsep keadaan (terdiri dari kontrol keadaan hingga dan konten memori) yang dapat berubah saat proses komputasi berlangsung.
Sebagian besar model lain lebih abstrak. Meskipun mereka dapat mengekspresikan perhitungan sebagai suksesi langkah-langkah transformasi struktur asli, transformasi ini diterapkan dalam semacam semesta intemporal makna matematika. Ini dapat mempertahankan properti, seperti transparansi referensial, yang dapat membuat analisis matematika lebih sederhana. Tetapi lebih jauh dari model fisik alami yang mengandalkan pada ingatan akan hal itu.
Jadi tidak ada mesin fungsional alami, kecuali dalam arti yang lebih besar seperti yang dijelaskan di bawah ini, karena perangkat lunak tidak benar-benar dapat dipisahkan dari perangkat keras.
Referensi Turing sebagai tolok ukur kemampuan komputasi mungkin berasal dari kenyataan bahwa modelnya, mesin Turing paling dekat dengan batasan realisasi fisik ini, yang menjadikannya model komputasi yang lebih intuitif.
Pertimbangan lebih lanjut :
Ada banyak model komputasi, yang dirancang untuk menangkap dengan cara yang paling umum konsep komputasi. Mereka termasuk mesin Turing, sebenarnya dalam banyak rasa yang berbeda, kalkulus lambda (rasa juga), sistem penulisan ulang semi-Thue, fungsi rekursif parsial, logika kombinasional.
Mereka semua menangkap beberapa aspek dari berbagai teknik yang digunakan oleh matematikawan untuk mengekspresikan atau melakukan perhitungan. Dan sebagian besar telah digunakan sampai batas tertentu sebagai dasar dari beberapa desain bahasa pemrograman (misalnya Snobol untuk sistem penulisan ulang, APL untuk kombinator, Lisp / Skema untuk kalkulus lambda) dan sering dapat dikombinasikan dalam berbagai cara dalam bahasa pemrograman modern.
Salah satu hasil utama adalah bahwa semua model perhitungan ini terbukti setara, yang mengarah pada tesis Church-Turing bahwa tidak ada model komputasi yang dapat direalisasikan secara fisik yang dapat melakukan lebih dari model-model ini. Sebuah model perhitungan dikatakan Turing lengkap jika dapat dibuktikan setara dengan salah satu model ini, karenanya setara dengan semuanya.
Namanya bisa saja berbeda. Pilihan mesin Turing (TM) sebagai rujukan mungkin karena fakta bahwa itu mungkin yang paling sederhana dari model-model ini, meniru dengan cermat (walaupun secara sederhana) cara manusia menghitung dan cukup mudah diimplementasikan (dalam bentuk terbatas yang terbatas). ) sebagai perangkat fisik, sedemikian rupa sehingga mesin Turing telah dibangun dengan set Lego . Ide dasarnya tidak memerlukan kecanggihan matematika. Mungkin kesederhanaan dan realisasi model yang memberikannya posisi referensi ini.
Pada saat Alan Turing menciptakan perangkat komputasinya, proposal lain berada di atas meja untuk berfungsi sebagai definisi formal kemampuan komputasi, masalah penting bagi dasar matematika (lihat Entscheidungsproblem ). Proposal Turing dianggap oleh para ahli saat itu sebagai karya yang paling meyakinkan mencakup apa yang harus dihitung (lihat Computability and Recursion , RI Soare, 1996, lihat bagian 3.2). Berbagai proposal terbukti setara, tetapi Turing lebih meyakinkan. [dari komentar oleh Yuval Filmus]
Perlu dicatat bahwa, dari sudut pandang perangkat keras, komputer kita bukan mesin Turing, melainkan apa yang disebut Random Access Machines (RAM) , yang juga Turing lengkap.
Bahasa yang murni imperatif (apa pun artinya) adalah formalisme yang digunakan untuk model paling dasar, seperti mesin Turing, atau bahasa rakitan (melompati kode binernya) komputer. Keduanya terkenal tidak dapat dibaca, dan sangat sulit untuk menulis program yang penting. Sebenarnya, bahkan bahasa rakitan memiliki beberapa fitur tingkat yang lebih tinggi untuk memudahkan pemrograman sedikit, dibandingkan dengan penggunaan instruksi mesin secara langsung. Model imperatif dasar tertutup bagi dunia fisik, tetapi tidak terlalu berguna.
Hal ini menyebabkan pengembangan model komputasi tingkat tinggi secara cepat, yang mulai mencampurkan berbagai teknik komputasi, seperti subprogram dan panggilan fungsi, penamaan lokasi memori, pelingkupan nama, kuantifikasi dan variabel dummy, sudah digunakan dalam beberapa bentuk dalam matematika dan logika, dan bahkan konsep yang sangat abstrak seperti refleksi ( Lisp 1958).
Klasifikasi bahasa pemrograman ke dalam paradigma pemrograman seperti imperatif, fungsional, logika, berorientasi objek didasarkan pada keunggulan beberapa teknik ini dalam desain bahasa, dan ada tidaknya beberapa fitur komputasi yang memberlakukan beberapa properti untuk program. atau fragmen program yang ditulis dalam bahasa.
Beberapa model nyaman untuk mesin fisik. Beberapa yang lain lebih nyaman untuk deskripsi algoritma tingkat tinggi, tergantung pada jenis algoritma yang akan dijelaskan. Beberapa ahli teori bahkan menggunakan spesifikasi algoritma non deterministik, dan bahkan itu dapat diterjemahkan dalam istilah pemrograman yang lebih konvensional. Tetapi tidak ada masalah ketidaksesuaian, karena kami mengembangkan teknologi kompiler / juru bahasa yang canggih yang dapat menerjemahkan masing-masing model ke model lain sesuai kebutuhan (yang juga merupakan dasar dari tesis Church-Turing).
Sekarang, Anda tidak boleh melihat komputer Anda sebagai perangkat keras mentah. Itu memang mengandung sirkuit boolean yang melakukan pemrosesan yang sangat dasar. Tetapi sebagian besar digerakkan oleh program mikro di dalam komputer yang tidak pernah Anda ketahui. Kemudian Anda memiliki sistem operasi yang membuat mesin Anda tampak berbeda dari apa yang dilakukan perangkat keras, Selain itu Anda mungkin memiliki mesin virtual yang mengeksekusi kode-byte, dan kemudian bahasa tingkat tinggi seperti Pyva dan Jathon, atau Haskell , atau OCaml, yang dapat dikompilasi menjadi kode byte.
Di setiap tingkat Anda melihat model perhitungan yang berbeda. Sangat sulit untuk memisahkan tingkat perangkat keras dari tingkat perangkat lunak sehingga untuk menetapkan model komputasi tertentu ke mesin. Dan karena mereka semua dapat diterjemahkan, gagasan model perhitungan perangkat keras utama adalah ilusi.
Mesin kalkulus lambda memang ada: ini adalah komputer yang dapat mengurangi ekspresi kalkulus lambda. Iklan yang mudah dilakukan.
Tentang arsitektur mesin khusus
Sebenarnya, melengkapi jawaban Peter Taylor , dan menindaklanjuti masalah hardware / software intertwinning, mesin-mesin khusus telah diproduksi untuk lebih disesuaikan dengan paradigma tertentu, dan perangkat lunak dasar mereka ditulis dalam bahasa pemrograman berdasarkan paradigma itu.
Ini termasuk
The Burroughs B5000 dan penerusnya (1960), yang diadaptasi untuk implementasi yang efisien dari rekursi, diwakili pada saat itu oleh bahasa Algol 60 .
The Western Digital WD / 9000 Pascal MicroEngine , sebuah mesin didasarkan pada bytecode microprogrammed specialied untuk Pascal bahasa pemrograman, pada awal tahun 1980.
Beberapa merek Lisp Machines pada 1980-an.
Pada dasarnya, ini juga merupakan struktur perangkat keras yang penting, tetapi dimitigasi dengan fitur harware khusus atau interpreter yang diprogram untuk lebih beradaptasi dengan paradigma yang dimaksud.
Sebenarnya, perangkat keras yang dikhususkan untuk paradigma tertentu tampaknya tidak pernah berhasil dalam jangka panjang. Alasannya adalah bahwa teknologi kompilasi untuk mengimplementasikan paradigma pada perangkat keras vanilla menjadi lebih dan lebih efektif, sehingga perangkat keras khusus tidak begitu dibutuhkan. Selain itu, kinerja harware meningkat dengan cepat, tetapi biaya perbaikan (termasuk evolusi perangkat lunak dasar) lebih mudah diamortisasi pada perangkat keras vanila daripada perangkat keras khusus. Perangkat keras khusus tidak bisa bersaing dalam jangka panjang.
Namun demikian, dan meskipun saya tidak memiliki data yang pasti mengenai hal ini, saya akan curiga bahwa usaha ini meninggalkan beberapa ide yang mempengaruhi evolusi mesin, ingatan, dan arsitektur perangkat instruksi.
sumber
Turing-complete hanyalah sebuah nama. Anda bisa menyebutnya Abdul-lengkapi jika Anda mau. Nama diputuskan secara historis dan sering dinamai dengan nama orang yang "salah". Ini adalah proses sosiologis yang tidak memiliki kriteria yang jelas. Nama itu tidak memiliki arti di luar semantik resminya.
Bahasa imperatif tidak berdasarkan pada mesin Turing. Mereka didasarkan pada mesin RAM. Komputer Anda adalah mesin RAM. Mesin Turing adalah model teoretis yang bagus, tetapi mereka bukan model komputer aktual yang sangat bagus.
Memprogram bahasa berdasarkan paradigma lain bisa sangat sukses, meskipun CPU yang mendasarinya tidak mendukung mereka secara asli; misalnya, printer menjalankan bahasa stack. Ada lebih banyak pemrograman daripada kode mesin.
sumber
A[x]
. Mesin Turing tidak dapat melakukan ini dalam waktu yang konstan. Itu sebabnya bahkan dalam ilmu komputer teoretis, waktu berjalan algoritma dianalisis pada model mesin RAM daripada pada model mesin Turing.Karena "Turing-complete" berarti "dapat menghitung apa pun yang dapat dihitung oleh mesin Turing."
sumber
Salah satu pertanyaan Anda tampaknya belum dijawab:
Sebuah mesin Lisp . Perangkat keras yang dirancang khusus agar sesuai dengan model perhitungan LISP. Artikel Wikipedia berbicara tentang produk komersial, tetapi direktur studi saya di universitas memiliki satu buatan tangan di kantornya.
sumber
bahasa fungsional dalam bentuk kalkulus lambda ditemukan oleh Gereja terbukti Turing lengkap. ini adalah bukti matematika aktual yang dapat ditemukan dalam makalah ilmiah yang diterbitkan oleh "mengurangi" lambda kalkulus untuk operasi / perhitungan pada mesin Turing. sekitar waktu makalah Turings 1936 dan setelah itu, model komputasi "komprehensif" yang berbeda diusulkan / diedarkan. itu tidak segera menyadari bahwa semua yang setara. bukti bahwa mereka setara diterbitkan kira-kira pada akhir 1930-an dan 1940-an setelah kertas Turings.
mesin Turing secara konseptual (tetapi tidak secara fungsional) lebih sederhana daripada model lain dan itu kemungkinan merupakan bagian penting dari alasan bahwa kelengkapan Turing dinamai menurut namanya. ide-ide lain seperti lambda calculus lebih abstrak dan dimulai / berasal terutama dalam teori matematika / logika. Turing mengusulkan mesin teoretis . sebuah "mesin" secara harfiah adalah "perangkat fisik". ini adalah objek konseptual yang luar biasa / konstruksi yang mengikat / menyatukan dua dunia yang berbeda, yang diterapkan dan teoritis. itu memberi makna abstrak baru untuk entitas fisik misalnya "waktu dan ruang". itu bukan kebetulan belaka bahwa matematikawan kadang-kadang merujuk pada "teknologi," "mesin," atau "perangkat" bukti. Turing dengan cerdik menggabungkan semua ini dalam penemuan konseptualnya. nya definisi cukup sederhana tetapi analisis itu menunjukkan beberapa yang paling luar biasa perilaku muncul pernah dilihat dalam sejarah ilmiah / pemikiran matematika. Turing adalah ilmuwan / ahli matematika pertama yang menangkap banyak signifikansi / kekuatan / potensi ini.
sumber