Catatan: posting berikut ini mungkin termasuk pendapat kontroversial, jadi harap dicatat bahwa itu hanya pendapat saya, dan tidak dimaksudkan untuk menyinggung siapa pun.
Saya sedang pemrograman dalam beberapa bentuk atau yang lain sejak sekitar tahun 1999. Saya awalnya menggunakan R, dan kemudian, sekitar tahun 2004, sebagian besar beralih ke Python.
Untuk banyak aplikasi ilmiah, misalnya, simulasi, termasuk hal-hal seperti MCMC, R dan Python terlalu lambat dan perlu dipercepat. Cara yang biasa dilakukan adalah dengan memperluas dengan C atau C ++. Untuk R dan Python, inilah yang saya lakukan, menggunakan R's C API dengan C ++, dan Boost library Python dengan Python.
Namun, karena berbagai alasan, kombinasi ini bukan solusi ideal. Apa yang penting dalam pemrograman, terutama algoritma? Ekspresif dan kecepatan, yang tentu saja terkait. Semakin ekspresif suatu bahasa, semakin cepat seseorang dapat menulis di dalamnya.
1) Sejauh ekspresif berjalan, baik R maupun Python tidak benar-benar ideal untuk menulis algoritma ilmiah menurut pendapat saya. Mereka tidak memetakan secara dekat ke algoritma yang mendasarinya. Namun, keduanya jauh lebih baik daripada C ++.
2) Saya menikmati menulis dengan Python, yang merupakan bahasa yang menyenangkan, meskipun seperti disebutkan di atas tidak ideal untuk pekerjaan algoritmik. Namun, ketika seseorang harus bekerja dengan kombinasi Python / C ++ karena masalah kecepatan, campuran ini menjadi sangat tidak menyenangkan untuk dikerjakan. Apa yang biasanya terjadi adalah saya pertama kali menulis dengan Python, dan begitu saya memiliki sesuatu yang berfungsi dengan baik, seringkali saya menemukan bahwa ini terlalu lambat (untuk beberapa nilai subjektif terlalu lambat). Saya kemudian menghadapi keputusan apakah akan menghabiskan sejumlah waktu yang tidak masuk akal untuk menulis ulang dalam C ++, atau bertahan dengan lambat. Kalau dipikir-pikir, saya sering merasa lebih baik bertahan dengan kelambatan, terutama karena speedup yang diperoleh tidak dapat diprediksi. Juga, antarmuka Boost Python antara keduanya adalah sakit kepala pemeliharaan yang signifikan, dan memiliki kode dalam dua bahasa yang sangat berbeda direkatkan bersama seperti ini hanya mengganggu. Tidak ada kritik terhadap Boost Python yang dimaksudkan, ini adalah antarmuka yang sekuat yang bisa dibayangkan, dan hampir semuanya hanya berfungsi sebagian besar waktu.
Sekarang, di dunia yang ideal, dengan waktu dan sumber daya tak terbatas, tak satu pun dari masalah ini akan menjadi masalah besar. Namun, dalam proyek-proyek ilmiah yang telah saya kerjakan, saya memiliki pengalaman berikut.
Terlepas dari apakah saya memiliki kolaborator dalam proyek ini, sepertinya saya selalu berakhir dengan melakukan sebagian besar komputasi. Dalam total 5 proyek penting, saya hanya memiliki partisipasi substansial dari satu orang dalam satu proyek. Bahwa satu orang melakukan lebih dari sekadar menarik berat badannya; dia melakukan sebanyak saya atau lebih. Namun, dalam semua kasus lain, termasuk proyek dengan banyak kolaborator, saya telah melakukan (hampir) semua pekerjaan komputasi. Meskipun saya dapat mengatakan bahwa saya belum diberkati dengan kolaborator terbaik (tampaknya merupakan campuran kemalasan dan ketidakmampuan), tidak jelas bagi saya apakah keadaan ini kemungkinan akan berubah di masa depan.
Karya ilmiah komputasi adalah upaya yang sangat besar, dan jika saya tidak dapat mengubah cara kerja kolaborator saya, saya dapat mengubah cara saya bekerja. Peningkatan paling penting adalah menyelesaikan sesuatu dengan lebih cepat. Yang membawa saya ke pertimbangan utama di sini, yaitu bahwa beralih bahasa ke sesuatu yang kurang ortodoks dapat membantu. Berdasarkan penelitian sebelumnya, kandidat yang paling mungkin dalam urutan kemungkinan adalah Common Lisp dan Ocaml. Saya telah memikirkan hal ini selama bertahun-tahun, tetapi baru-baru ini telah memikirkannya lebih serius.
Sejauh yang saya tahu, beberapa orang menggunakan CL atau Ocaml untuk perhitungan ilmiah. Saat mencari di situs ini, saya menemukan dua referensi ke CL (satu adalah milik saya) dan satu ke Ocaml (milik saya). Saya memiliki beberapa kontak yang membesarkan hati selama bertahun-tahun dengan orang-orang petualang bekerja di pinggiran. Pada tahun 2008 saya menemukan ulasan buku "Praktis Common Lisp" karya Peter Seibel (yang saya miliki), oleh Tamas K. Papp. Ini menarik perhatian saya, karena itu adalah salah satu dari sedikit yang menyebutkan komputasi ilmiah untuk Lisp yang saya temui di internet. Saya menulis kepada Tamas, yang segera menjawab dengan membantu dan memberi semangat. Mengutipnya
Produktivitas pemrograman saya mungkin meningkat sepuluh kali lipat dengan Lisp, tetapi itu membutuhkan waktu sekitar satu tahun untuk terjadi dan saya masih belajar (saya melakukannya dengan cukup baik setelah 2 bulan). Jadi jika Anda mengerjakan sesuatu yang kritis waktu, maka tunda sakelar.
Anda harus mempertimbangkan bertanya pada orang-orang di cll, saya bukan satu-satunya yang tahu tentang hal-hal ini, orang lain melakukan komputasi ilmiah pada Lisp.
Dia juga memiliki blog dan halaman GitHub .
Orang lain yang berkorespondensi singkat dengan saya (pada bulan Desember 2006) adalah Ira Kalet , yang telah menggunakan Common Lisp dalam konteks onkologi radiasi.
Mungkin ada orang lain yang melakukan komputasi ilmiah pada Lisp, tetapi saya tidak tahu siapa pun.
Masalah paling umum yang orang-orang sebutkan dengan CL adalah kurangnya perpustakaan. Ini adalah masalah parah dalam komputasi tujuan umum, tetapi mungkin tidak begitu banyak dalam komputasi ilmiah, terutama dari penerapan algoritma. Secara khusus, saya bisa mendapatkan sebagian besar waktu dengan perpustakaan matematika dasar, termasuk fungsi distribusi probabilitas, perpustakaan array multidimensi, dan satu set dasar wadah misalnya peta, set, daftar dll seperti yang ditemukan di perpustakaan standar C ++ dan Python.
Saya tahu lebih sedikit tentang Ocaml daripada yang saya lakukan tentang CL, tetapi melemparkannya sebagai alternatif. Seharusnya sangat cepat, memiliki satu implementasi gratis oleh para peneliti Prancis, dan sepertinya yang paling layak dari keluarga bahasa ML untuk komputasi ilmiah.
Sebagai penutup, saya bertanya-tanya apakah orang lain memiliki pengalaman dengan ini, dan apa pemikiran mereka, jika ada.
EDIT: Saya sebagian besar tertarik pada pengalaman langsung, dalam konteks masalah yang saya bahas di atas. Misalnya jika Anda menggunakan Python dan C ++ (atau R dan C ++) dan pindah ke bahasa yang lebih tidak jelas, saya paling tertarik mendengar pengalaman Anda.