Menggunakan bahasa pemrograman yang tidak konvensional untuk perhitungan ilmiah [ditutup]

22

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.

Faheem Mitha
sumber
2
Pertukaran tumpukan adalah untuk mengajukan pertanyaan, bukan untuk memposting kisah hidup! Pertanyaan Anda tampaknya adalah "Apakah ada proyek komputasi ilmiah menggunakan Common Lisp atau OCaml", kan?
khinsen
4
Setuju, ini sedikit lebih mirip posting blog, tapi saya suka premis. Adakah peluang Anda bisa mencoba dan mengurangi ini menjadi 2-3 paragraf?
Aron Ahmadia
1
Juga disepakati. Komentar dan pengalaman pribadi baik ketika mendukung pertanyaan utama; terlalu banyak detail dapat menghilangkan poin utama. Jika Anda dapat menyingkat pertanyaan Anda, saya pikir ini akan lebih mudah dibaca dan itu akan mendapatkan respons yang lebih bertarget dan berkualitas lebih tinggi.
Geoff Oxberry
1
@FaheemMitha: Dalam "dunia ideal" yang Anda sebutkan di tengah jalan, semuanya adalah perakitan yang dioptimalkan dengan tangan ... Kedengarannya suram bagi saya!
meawoppl
3
@FaheemMitha: Hal terbaik yang saya pikir bisa Anda lakukan untuk meningkatkan pertanyaan Anda adalah membuat pertanyaan yang Anda ajukan jelas. Sepertinya Anda menceritakan sebuah kisah tentang pengalaman Anda (yang tidak apa-apa), dan pada akhirnya, Anda mengubur pertanyaan itu sebagai pernyataan di akhir cerita Anda. ("Untuk menyimpulkan, aku bertanya-tanya ...") Hal terbaik yang dapat Anda lakukan adalah membuat bagian itu menjadi pertanyaan, sehingga orang yang membaca pertanyaan Anda dapat dengan mudah mengidentifikasi apa yang Anda tanyakan. Saya harus kembali beberapa kali untuk mengetahuinya.
Geoff Oxberry

Jawaban:

18

Kami benar - benar mengembangkan Julia alasan mengangkat. Tidak ada bahasa komputasi ilmiah tingkat tinggi yang baik yang juga memberikan kinerja yang cukup baik, sehingga Anda tidak harus terus menulis ulang bagian kode Anda dalam C / Fortran. Desain julia memiliki pengaruh lumayan kecil, sehingga Anda dapat menemukannya sesuai dengan keinginan Anda, sedangkan kolaborator Anda dapat memperlakukannya seperti matlab atau R jika mereka tidak peduli dengan bagian fungsionalnya. Kelemahannya adalah bahasanya baru, dan belum memiliki semua perpustakaan yang diperlukan untuk penggunaan sehari-hari.

Mark, akan sangat ingin menambahkan julia ke patokan Anda untuk melihat bagaimana tarif kami. Silakan naik ke milis kami dan beri tahu kami apa yang ingin Anda lihat di julia sehingga lebih bermanfaat bagi Anda.

Viral B. Shah
sumber
Itu terlihat indah! Saya pasti akan memeriksa ini untuk pekerjaan saya sendiri. Saat ini saya menggunakan python untuk semua pekerjaan saya dalam materi kental teoretis, hanya karena waktu yang diperoleh dengan memiliki kode C ++ cepat dinegasikan oleh waktu yang dihabiskan untuk menulis dalam C ++ di tempat pertama :)
Lagerbaer
9

Kecepatan, ukuran dan keterandalan bahasa pemrograman melakukan pekerjaan yang sangat baik untuk menyelesaikan banyak masalah berbeda yang diungkapkan dalam "pertanyaan Anda". Ini membandingkan kecepatan dan ukuran basis kode dari sekelompok implementasi dari tolok ukur yang sama di 33 bahasa!

Saya telah menjadi pecinta Python terutama karena jauh lebih umum untuk memiliki waktu komputasi yang berlebih daripada waktu yang berlebih untuk memprogram. Saya lebih dari rela menghambur-hamburkan siklus CPU daripada mengorbankan irisan waktu yang dapat dikhususkan untuk sesuatu yang lebih menarik.

Juga, +1 di Julia. Saya pikir saya dapat beralih ke itu ketika menjadi sedikit lebih stabil dan didukung secara luas yaitu ketika modul standar dibungkus untuk pekerjaan yang saya sukai.

meawoppl
sumber
4

Untuk aplikasi ilmiah OCaml, lihat misalnya

Untuk Lisp dalam sains, lihat misalnya

Saya yakin ada lebih banyak referensi. Namun, saya tidak dapat menyebutkan proyek penelitian utama di mana pekerjaan komputasi dilakukan dalam OCaml atau Lisp. Memilih salah satu berarti bekerja dalam isolasi relatif.

Anda juga mungkin tertarik pada Julia , bahasa baru untuk komputasi ilmiah yang saat ini sedang dikembangkan, dengan pengaruh Lisp yang jelas.

khinsen
sumber
1
Seharusnya saya membuatnya lebih jelas bahwa saya lebih tertarik pada pengalaman langsung. Saya akan mengedit pertanyaan saya untuk mencerminkan hal ini.
Faheem Mitha