Bisakah kita membangun komputer fungsional?

12

Seperti halnya FP, pada akhirnya, semua program kami terstruktur. Artinya, tidak masalah seberapa murni atau fungsional kita membuat mereka - mereka selalu diterjemahkan ke perakitan, jadi apa yang sebenarnya berjalan di balik tudung adalah instruksi, status dan loop. Kami semacam meniru FP.

Sebagai perangkat keras noob, pertanyaan saya adalah: mengapa kita tidak menggunakan arsitektur komputer yang benar-benar menghitung sesuatu dengan gaya fungsional? Sebagai contoh, sebuah komputer dapat terdiri dari "chip fungsional" primitif seperti "concat", "map" dan "mengurangi", dan sebuah program hanya akan memberitahu komputer cara mengalirkan data antara chip-chip tersebut untuk menghitung hasil yang diinginkan , seperti dalam bahasa concatenative.

sketsa omong kosong

Ini tidak masuk akal, tetapi mungkin menggambarkan apa yang saya pikirkan.

Viktor Maia
sumber
5
Tidak memiliki tautan begitu saja, tetapi chip Haskell dibuat, sistem pakar juga memiliki perangkat keras khusus pelat. Saya pikir Anda mungkin lebih dekat ke peta / mengurangi paradigma dalam perangkat keras daripada yang lain sekalipun. Satu-satunya manfaat perf untuk FP adalah skalabilitas terhadap paralelisme. Dalam semua cara lain, fp kurang berkinerja karena kurang butiran dalam instruksi itu karena tingkat abstraksi yang lebih tinggi. Pada tingkat logam kinerja adalah raja, dan selain itu bahkan pada tingkat abstraksi matematika, dalam pelaksanaannya semuanya sangat penting. Hitung 2 * 3 + 5 tanpa mengambil dua langkah yang dipesan. Semuanya penting
Jimmy Hoffa
3
@ Chip link haskell tangan JimmyHoffa : Reduceron .
Dan D.
1
Anda juga mungkin tertarik pada Verity yang merupakan kompiler untuk kalkulus Lambda panggilan-dengan-nama dengan tingkat tinggi dan rekursi affine yang juga memiliki efek lokal penting untuk perangkat keras statis melalui VHDL.
Dan D.
5
@Dokkat: if we could make a specialized chip for Filter, for example, it would need just a single clock for a Filter operation. Tidak juga, karena Filter bukan "operasi"; itu adalah fungsi tingkat tinggi yang menerapkan operasi eksternal sewenang-wenang ke daftar. Anda tidak dapat mengurangi itu menjadi satu siklus jam tunggal.
Mason Wheeler
2
@Dokkat Ini adalah fungsi urutan yang lebih tinggi, karena dibutuhkan sebagai input fungsi. Kekhasan konyol adalah apa yang membuat contoh Anda sesuatu yang dapat dilakukan "dalam satu operasi". Fungsi predikat spesifik adalah konstan, dan karenanya bukan benar-benar filter. Membuat filter yang menggunakan fungsi predikat sewenang-wenang tidak dapat direduksi menjadi satu siklus clock tunggal karena Anda tidak memiliki kendali atas berapa banyak siklus clock yang diambil oleh fungsi input.
Chewy Gumball

Jawaban:

11

Mereka membuat komputer seperti itu. Ini disebut FPGA . Tentu saja, FPGA mendukung logika sekuensial dan kombinasional, tetapi tidak ada yang mencegah Anda dari hanya menggunakan bagian kombinasional seperti yang Anda sarankan.

Dalam prakteknya, bagaimanapun, logika sekuensial (jenis dengan negara) sangat berguna bahkan pada tingkat chip. Untuk satu hal, itu secara signifikan mengurangi jumlah gerbang logika yang diperlukan untuk menyelesaikan masalah. Untuk yang lain, ini memecahkan banyak masalah desain terkait dengan sinyal yang memiliki penundaan propagasi yang berbeda.

Jika Anda tertarik pada hal semacam itu, FPGA layak untuk dicoba. Ada papan mirip arduino murah yang disebut papilio yang bagus untuk pemula. Orang-orang menggunakannya untuk semuanya, mulai dari kontrol robot hingga penambangan bitcoin.

Karl Bielefeldt
sumber
Terima kasih atas jawabannya, saya membaca halaman Wikipedia di atasnya - tetapi bukankah FPGA merupakan perangkat lunak yang dapat diprogram secara umum daripada perangkat keras yang khusus untuk Pemrograman Fungsional, seperti pada sketsa saya?
MaiaVictor
1
Google "algoritma penyortiran fpga" jika Anda ingin melihat cara melakukannya. Apa yang Anda gambar adalah sirkuit logika kombinasional yang dapat diprogram, yang dirancang untuk FPGA.
Karl Bielefeldt
Bagus, saya akan melakukan penelitian saya!
MaiaVictor
jika Anda tidak memiliki urutan sama sekali maka Anda benar-benar melihat elektronik analog
jk.
2
@ jk Itu tidak sepenuhnya benar; ambil contoh unit arithemtic-logis dalam CPU sederhana yang digital dan (murni) kombinasional.
m3th0dman
8

Secara esensial, ya, komputer analog bekerja seperti itu: Anda mengubah parameter dan arus listrik diubah sesuai itu. Itulah yang membuat mereka "lebih cepat", untuk sementara waktu, pada 1950-an - Anda tidak peduli dengan lambatnya pembuatan dan modifikasi "keadaan" yang terpisah seperti pada raksasa digital sebelumnya.

Dan bisa dibilang, komputer kuantum dapat bekerja seperti itu juga: jika keadaan beberapa fenomena kuantum tergantung pada keadaan orang lain, maka mengubah beberapa keadaan "awal" akan mengubah keadaan berikut secara bersamaan - tidak ada "keadaan" di antara.

Aeneas
sumber
3
+1 untuk menyebutkan komputer kuantum, saya pikir kemampuan untuk melakukan hal-hal seperti OP menyarankan akan menjadi manfaat utama untuk ini ketika mereka benar-benar terwujud
Jimmy Hoffa