Jenis pertanyaan pemula pemrograman fungsional di sini:
Saya telah membaca transkrip beberapa pembicaraan Rich Hickey, dan dalam beberapa ceramahnya yang lebih terkenal, dia merekomendasikan penggunaan antrian sebagai alternatif agar fungsi-fungsi saling memanggil satu sama lain. (Misalnya dalam Desain, Komposisi dan Kinerja dan dalam Simple Made Easy .)
Saya tidak begitu mengerti hal ini, dalam beberapa hal:
Apakah dia berbicara tentang memasukkan data dalam antrian dan kemudian meminta setiap fungsi menggunakannya? Jadi alih-alih fungsi A memanggil fungsi B untuk melakukan komputasi sendiri, kita hanya memiliki fungsi B menampar outputnya pada antrian dan kemudian memiliki fungsi A ambil itu? Atau, sebagai alternatif, apakah kita berbicara tentang menempatkan fungsi pada antrian dan kemudian secara berturut-turut menerapkannya pada data (tentu saja tidak, karena itu akan melibatkan mutasi masif, bukan? Dan juga multiplikasi antrian untuk fungsi multi-arity, atau seperti pohon atau sesuatu? )
Bagaimana hal itu membuat segalanya lebih sederhana? Intuisi saya adalah bahwa strategi ini akan menciptakan lebih banyak kompleksitas, karena antrian akan menjadi semacam keadaan, dan kemudian Anda harus khawatir "bagaimana jika beberapa fungsi lain menyelinap masuk dan memasukkan beberapa data di atas antrian?"
Satu jawaban untuk pertanyaan implementasi pada SO menunjukkan bahwa idenya adalah menciptakan sekelompok antrian yang berbeda. Jadi setiap fungsi menempatkan output dalam antrian sendiri (??). Tapi itu juga membingungkan saya, karena jika Anda menjalankan fungsi sekali, maka mengapa perlu antrian untuk outputnya ketika Anda bisa mengambil output itu dan menampar nama itu sebagai (var, atom, entri dalam besar tabel hash, apa pun). Sebaliknya, jika suatu fungsi berjalan beberapa kali, dan Anda menempelkan outputnya ke antrian, maka Anda telah membuat status pada diri Anda lagi, dan Anda harus khawatir tentang urutan semua hal yang dipanggil, fungsi hilir menjadi kurang murni, dll.
Jelas saya tidak mengerti maksudnya di sini. Bisakah seseorang menjelaskan sedikit?
Job
objek umum , mendorongnya ke dalam antrian, dan membuat satu atau lebih utas pekerja bekerja pada antrian itu. The Job
kemudian mengirimkan lebih Job
s ke dalam antrian setelah selesai. Nilai pengembalian digantikan oleh panggilan balik dalam konsep itu. Ini mimpi buruk untuk debug dan verifikasi karena Anda tidak memiliki tumpukan panggilan, dan efisien dan fleksibel untuk alasan yang sama.