Karena semua kelebihan itu juga kerugian.
Program tanpa kewarganegaraan; Tidak ada efek samping
Program dunia nyata adalah semua tentang efek samping dan mutasi. Ketika pengguna menekan tombol itu karena mereka ingin sesuatu terjadi. Ketika mereka mengetik sesuatu, mereka ingin negara itu menggantikan keadaan apa pun yang dulu ada di sana. Ketika Jane Smith dalam bidang akuntansi menikah dan mengubah namanya menjadi Jane Jones, basis data yang mendukung proses bisnis yang mencetak paycheque-nya lebih baik tentang penanganan mutasi semacam itu. Ketika Anda menembakkan senapan mesin pada alien, kebanyakan orang tidak secara mental memodelkan itu sebagai konstruksi alien baru dengan lebih sedikit titik hit; mereka memodelkan itu sebagai mutasi dari properti alien yang ada.
Ketika konsep-konsep bahasa pemrograman secara fundamental bekerja melawan domain yang dimodelkan, sulit untuk membenarkan menggunakan bahasa itu.
Concurrency; Bermain sangat bagus dengan meningkatnya teknologi multi-core
Masalahnya hanya didorong. Dengan struktur data yang tidak dapat diubah, Anda memiliki keamanan utas yang murah dengan biaya kemungkinan bekerja dengan data basi. Dengan struktur data yang bisa berubah, Anda mendapatkan keuntungan dengan selalu mengerjakan data baru dengan biaya harus menulis logika yang rumit untuk menjaga data tetap konsisten. Ini tidak seperti yang jelas lebih baik dari yang lain.
Program biasanya lebih pendek dan dalam beberapa kasus lebih mudah dibaca
Kecuali dalam kasus di mana mereka lebih panjang dan sulit dibaca. Mempelajari cara membaca program yang ditulis dengan gaya fungsional adalah keterampilan yang sulit; orang tampaknya jauh lebih baik dalam memahami program sebagai serangkaian langkah yang harus diikuti, seperti resep, daripada sebagai serangkaian perhitungan yang harus dilakukan.
Produktivitas meningkat (contoh: Erlang)
Produktivitas harus naik banyak untuk membenarkan biaya besar mempekerjakan programmer yang tahu cara memprogram dalam gaya fungsional.
Dan ingat, Anda tidak ingin membuang sistem kerja; sebagian besar programmer tidak membangun sistem baru dari awal, melainkan mempertahankan sistem yang ada, yang sebagian besar dibangun dalam bahasa non-fungsional. Bayangkan mencoba membenarkan hal itu kepada pemegang saham. Mengapa Anda membatalkan sistem penggajian kerja yang ada untuk membangun yang baru dengan biaya jutaan dolar? "Karena pemrograman fungsional itu mengagumkan" tidak mungkin menyenangkan para pemegang saham.
Pemrograman imperatif adalah paradigma yang sangat lama (sejauh yang saya tahu) dan mungkin tidak cocok untuk abad ke-21
Pemrograman fungsional juga sangat tua. Saya tidak melihat bagaimana usia konsep itu relevan.
Jangan salah sangka. Saya suka pemrograman fungsional, saya bergabung dengan tim ini karena saya ingin membantu membawa konsep dari pemrograman fungsional ke dalam C #, dan saya pikir pemrograman dalam gaya yang tidak dapat diubah adalah cara masa depan. Tetapi ada biaya yang sangat besar untuk pemrograman dengan gaya fungsional yang tidak bisa begitu saja dihilangkan. Pergeseran menuju gaya yang lebih fungsional akan terjadi secara perlahan dan bertahap selama beberapa dekade. Dan itulah yang akan terjadi: perubahan menuju gaya yang lebih fungsional, bukan merangkul kemurnian dan keindahan Haskell dan meninggalkan C ++.
Saya membangun kompiler untuk mencari nafkah dan kami jelas merangkul gaya fungsional untuk generasi alat kompiler berikutnya. Itu karena pemrograman fungsional pada dasarnya cocok untuk jenis masalah yang kita hadapi. Masalah kita adalah semua tentang mengambil informasi mentah - string dan metadata - dan mengubahnya menjadi string dan metadata yang berbeda. Dalam situasi di mana mutasi terjadi, seperti seseorang mengetik di IDE, ruang masalah secara inheren cocok untuk teknik fungsional seperti secara bertahap membangun kembali hanya bagian-bagian pohon yang berubah. Banyak domain tidak memiliki properti bagus ini yang membuatnya jelas setuju dengan gaya fungsional .