Apa itu arsitektur non-von Neumann yang praktis?


16

Apakah ada aplikasi praktis untuk model pemrograman non-von Neumann? Apa bahasa pemrograman non-von Neumann yang paling banyak diadopsi?


6
apa itu model pemrograman "non-von Neumann"?
Suresh Venkat

Saya juga tidak mengerti pertanyaannya, mungkin Anda bisa menambahkan beberapa latar belakang untuk pertanyaan itu sehingga menjadi lebih mudah untuk memahami apa yang Anda tanyakan.
Kaveh

3
arsitektur von neumann memiliki CPU. oleh karena itu arsitektur pemrosesan paralel bisa dibilang non-von Neumann (arsitektur neumann ditemukan sebelum pemrosesan paralel). tetapi menyetujui pertanyaan itu tampaknya ambigu atau kabur. von neumann mengacu pada arsitektur komputer, tidak benar-benar model pemrograman. model pemrograman dan cpu / arsitektur komputer ada dalam semacam sinergi / simbiosis tetapi juga agak independen satu sama lain .... arsitektur yang berbeda dapat menerapkan model pemrograman yang berbeda tanpa model pemrograman yang "digabungkan" ke arsitektur ...
vzn

1
Apa itu bahasa pemrograman non-von Neumann ? Untuk itu, apa itu bahasa pemrograman von Neumann? (Saya tidak menemukan definisi Backus --- pada dasarnya "bahasa imperatif" --- bahkan sedikit menarik.)
Jeffε

1
@Ronny: Halaman Wikipedia hanya nuri artikel Backus.
Jeff

Jawaban:


12

Ketika saya mengatakan "arsitektur von Neumann", maksud saya beberapa perangkat keras yang dibatasi oleh "hambatan von Neumann" - yaitu, semua data disalurkan melalui beberapa bus data sempit.

Bahasa pemrograman non-von Neumann yang paling sering saya temui adalah VHDL dan Verilog . Dalam VHDL dan Verilog, secara default, semuanya terjadi pada saat yang sama. Programmer harus melakukan upaya ekstra untuk membuat serangkaian acara terjadi secara berurutan. Itu sangat berbeda dari kebanyakan bahasa pemrograman lain yang menyiratkan "instruksi pointer" yang, secara default, mengeksekusi paling banyak satu baris kode pada satu saat, dan programmer harus melakukan upaya ekstra untuk mendapatkan banyak hal terjadi pada saat yang sama waktu.

Beberapa orang akan mengatakan itu adalah standar yang lebih alami. Banyak siswa pemrograman pemula mengharapkan loop "while (x> 0) {...}" untuk keluar dari instan sehingga x menjadi sama dengan nol, dan mereka terkejut mengetahui bahwa komputer tidak terus - menerus mengevaluasi kondisi itu.

Kebanyakan orang yang menulis kode VHDL dan Verilog mengkompilasi program mereka ke FPGA, menciptakan blok aktivitas kecil yang semuanya berjalan dengan kecepatan penuh setiap saat. Seringkali orang semacam itu membuat "pipa" yang membaca data dari pin input, memprosesnya melalui serangkaian blok, pin output dari satu blok langsung ditransfer ke pin input dari blok berikutnya, dan blok terakhir mengirimkan hasilnya pin output. Ini mengingatkan pada pipeline Unix , kecuali bahwa sepotong data baru masuk dan sepotong data baru keluar pada setiap siklus clock.

Pin input, tahap perantara, dan pin output semuanya independen satu sama lain - Anda tidak perlu menggunakan kembali bus data tunggal multiplexing di antara berbagai bagian data.

Anda mungkin juga tertarik pada: Apakah ada arsitektur komputer lain selain dari arsitektur vuring neumann / turing?


11

Saya berasumsi oleh non-Von Neumann, maksud Anda bahasa yang melewati "Von Neumann Bottleneck" sesuai karya Backus '"Bisakah Pemrograman Dibebaskan dari Gaya Von Neumann?". Bagi yang berminat, Anda dapat menemukan salinannya di sini: http://www.thocp.net/biographies/papers/backus_turingaward_lecture.pdf

Jawaban atas pertanyaan Anda harus ambigu karena beberapa alasan.

Pertama, bahasa apa yang memenuhi kriteria dalam makalahnya? Meskipun ada orang-orang yang melacak pemrograman fungsional untuk makalah ini, itu sekarang dianggap sebagai kesalahpahaman karena maksudnya sesuatu seperti pemrograman point-free. Jadi apakah Anda pergi dengan kesalahpahaman asli, atau maksud sebenarnya dari makalah ini? Untuk sedikit elaborasi tentang apa yang dia maksud, silakan lihat yang berikut ini: http://en.wikipedia.org/wiki/Function-level_programming

Kedua, jika Anda pergi dengan kesalahpahaman, seberapa fungsional fungsional? Anda memiliki bahasa fungsional murni, bahasa fungsional tidak murni, dan bahasa yang relatif ramah terhadap paradigma fungsional. Mengingat Anda menyebutkan popularitas dan ada hubungan terbalik antara itu dan kemurnian fungsional, bahasa apa yang harus dimasukkan? Apakah Anda ingin bahasa fungsional murni yang paling populer (yang tidak akan populer sama sekali), atau yang lebih populer yang memenuhi beberapa kriteria minimum "fungsional-ness"? Jika yang terakhir, apa kriteria itu?

Jadi tergantung pada sudut pandang Anda:

  1. Haskell adalah yang paling populer dari bahasa fungsional yang sepenuhnya murni yang saya tahu dan ada aplikasi yang ditulis di dalamnya. Namun, walaupun sangat berat di komunitas pemrograman fungsional, itu tidak populer di komunitas pemrograman yang lebih besar. Juga, setelah menggunakannya, saya tidak merasa itu praktis untuk digunakan di dunia nyata, dan tampaknya dihargai untuk karya teoretis. Itu memungkinkan gaya point-free, sehingga Anda dapat mendekati beberapa tujuan Backus dengan itu.

  2. Clojure, Scala dan F # adalah bahasa fungsional yang kurang murni, tetapi lebih praktis dan populer. F # juga ramah dengan gaya point-free.

  3. Forth mungkin merupakan contoh prototipikal dari bahasa point-free, dan cukup luas pada zamannya, meskipun sekarang ... Factor adalah bahasa point-free lain yang telah mendapatkan perhatian, tetapi saya ragu itu cocok dengan popularitas Forth di masa jayanya. .

  4. APL disebutkan oleh Backus pada satu titik (mungkin tidak dalam makalahnya) sebagai langkah maju, tetapi tidak sepenuhnya kompatibel dengan tujuannya. Pada zamannya itu besar di sektor keuangan. Pastikan untuk memeriksa keturunannya, seperti J.

  5. JavaScript tidak fungsional, tetapi cukup ramah terhadap gaya pemrograman tingkat tinggi, sebagaimana dibuktikan dengan penggunaan penutup yang banyak. Mengingat popularitasnya, itu mungkin hanya memenuhi kriteria. Pastikan untuk memeriksa beberapa hal menarik yang dilakukan dengan JavaScript, seperti penerapan kari dan kombinator.

Sebagai catatan kaki, untuk memberi Anda lebih banyak perspektif tentang tujuannya, Anda dapat memeriksa dua bahasa yang dirancangnya untuk memenuhi kriteria. Mereka sama sekali tidak populer AFAIK, jadi ini murni untuk pengetahuan:

http://en.wikipedia.org/wiki/FP_(programming_language )

http://en.wikipedia.org/wiki/FL_(programming_language )


1
Sekarang tampak bahwa dia bermaksud sesuatu seperti pemrograman bebas titik daripada pemrograman fungsional - apakah ada beberapa petunjuk untuk diskusi tentang ini? terdengar menarik.
Suresh Venkat

Model pemrograman Backus disebut "Pemrograman Tingkat Fungsi", dan ada artikel di sini: en.wikipedia.org/wiki/Function-level_programming . Saya tidak tahu ada tautan yang benar-benar bagus (saya ingin tahu jika Anda menemukannya!), Tetapi Googling "Pemrograman Tingkat Fungsi" menghasilkan beberapa tautan yang tampak menarik, termasuk video.
Ronny

1
@SureshVenkat: Bahasa FP dan FL dibuat oleh Backus khusus untuk mendukung idenya pemrograman fungsi-level. Lihat juga "pemrograman diam-diam" dan lebih khusus lagi bahasa J , yang menggabungkan APL dan FP / FL untuk menciptakan bahasa tujuan umum yang paling samar dan paling ekspresif dalam penggunaan aktual. Saya juga ingat posting di SO tentang menggunakan pemrograman diam-diam dalam bahasa fungsional.
CA McCann

Kebetulan, kronologi dalam posting ini tampaknya tidak signifikan. Pemrograman fungsional (baik dalam tradisi Lisp dan ML) lama mendahului kuliah Turing Award Backus, seperti halnya sebagian besar atau semua paradigma pemrograman yang ada - termasuk pemrograman tingkat fungsi itu sendiri, dalam bentuk Logika Combinatory , yang mendahului kalkulus lambda Gereja dan Turing. bekerja pada teori perhitungan! (Oh, dan saya lebih suka menggunakan Haskell untuk keperluan praktis di dunia nyata daripada kekejaman seperti Javascript.)
CA McCann

@camccann Saya tidak pernah menetapkan kronologi di pos. Juga, Lisp terlalu luas untuk mendukung klaim apa pun. Misalnya, tidak semua Lisps fungsional karena tidak semua ekor rekursif. Saya suka referensi Anda ke Combinatory Logic, tapi saya pikir maksud Backus adalah memiliki bahasa yang bisa diprogram komputer dengan yang mendukung paradigma. Oleh karena itu, sementara Combinatory Logic menjelaskan argumennya, itu akhirnya tidak memengaruhi pendapatnya.
Ronny

2

Saya pikir Linda dan pemrograman tuplespace bisa sesuai dengan tagihan. Operasi memori asosiatif / pencocokan pola dengan konkurensi berarti bahwa (secara konseptual) bottleneck Von-Neuman dihilangkan.

Pergi ke arah itu, bahasa model Aktor murni juga memodelkan komunikasi daripada urutan instruksi. Dan meskipun mereka formalisme dan bukan bahasa pemrograman yang sebenarnya, proses kalkulus seperti Pi kalkulus, CSP dan Petri Nets model komunikasi dengan cara yang terkait.

Lihat wikipedia untuk tautan (Saya adalah pengguna baru dan di bawah perlindungan spam), tetapi untuk beberapa humor cerdas mengenai nama Linda, baca http://c2.com/cgi/wiki?LindaEtymology .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.