Not: Aşağıdaki yazı tartışmalı görüşler içerebilir, bu nedenle onların yalnızca benim görüşlerim olduğunu ve kimseyi rahatsız etmediğini unutmayın.
1999'dan beri bazı formlarda veya diğerlerinde programlama yapıyorum. İlk önce R'yi kullandım ve daha sonra 2004 civarında, çoğunlukla Python'a geçtim.
Birçok bilimsel uygulama için, örneğin, MCMC gibi şeyler de dahil olmak üzere simülasyon, hem R hem de Python çok yavaştır ve hızlandırılması gerekir. Bunu yapmanın genel yolu C veya C ++ ile genişletmektir. Hem R hem de Python için, R + 'nin C API'sini C ++ ve Python ile Boost Python kütüphanesini kullanarak yaptım.
Bununla birlikte, çeşitli nedenlerden dolayı, bu kombinasyon ideal bir çözüm değildir. Programlamada, özellikle algoritmalarda neler önemlidir? Tabii ki anlamlılık ve hız. Dil ne kadar etkileyici olursa, o kadar hızlı bir dilde yazabilirsiniz.
1) Dışavurumculuk söz konusu olduğunda, ne R ne de Python bence bilimsel algoritmalar yazmak için ideal değil. Temel algoritma ile yakından eşleşmiyorlar. Ancak, ikisi de C ++ 'dan oldukça iyidir.
2) Hoş bir dil olan Python'da yazmaktan zevk alıyorum, ancak yukarıda da belirtildiği gibi algoritmik çalışmalar için ideal değil. Ancak, hız sorunları nedeniyle bir Python / C ++ kombinasyonu ile çalışmak gerektiğinde, bu karışımla çalışmak önemli ölçüde daha az keyifli hale gelir. Genellikle olan şey ilk önce Python'da yazmam ve iyi çalışan bir şeye sahip olduğumda, genellikle çok yavaş olduğunu keşfedersiniz (çok yavaş bir öznel değer için). Daha sonra, makul olmayan miktarda zamanın C ++ ile yeniden yazılması ya da yavaşlığın giderilmesi için harcanması kararı ile karşı karşıyayım. Görme sıklığında, özellikle elde edilen hızlanmalar tahmin edilemez olduğu için yavaşlığa dayanarak daha iyi olabileceğimi hissediyorum. Ayrıca, ikisi arasındaki Boost Python arayüzü önemli bir bakım başağrısıdır, ve kodun birbirine çok farklı iki dilde yapıştırılmış olması, sadece rahatsız edicidir. Amaçlanan Boost Python'un eleştirisi yok, hayal edilebileceği kadar güçlü bir arayüz ve hemen hemen çoğu zaman işe yarıyor.
Şimdi, ideal bir dünyada, sınırsız zaman ve kaynaklarla, bu sorunların hiçbiri önemli bir şey olmayacaktı. Ancak üzerinde çalıştığım bilimsel projelerde şu deneyimi yaşadım.
Projede iş birliği yapsam da olmasam da, her zaman bilişimin büyük çoğunluğunu yapıyor gibi görünüyorum. Toplamda 5 önemli projede, sadece bir kişiden bir projede önemli bir katılım oldu. Bir kişi ağırlığını çekmekten daha fazlasını yaptı; o benden ya da daha fazlasını yaptı. Ancak, birden fazla ortak çalışan projeler de dahil olmak üzere diğer tüm durumlarda, neredeyse tüm hesaplama işlemlerini yaptım. En iyi işbirlikçilerle kutsanmadığımı söyleyebildiğim halde (tembellik ve yetersizliğin bir karışımı gibi görünüyor), bu durumun gelecekte değişip değişmeyeceği açık değil.
Hesaplamalı bilimsel çalışma muazzam bir çaba ve eğer işbirlikçilerimin davranış şeklini değiştiremezsem çalışma biçimimi değiştirebilirim. En önemli gelişme işleri daha çabuk halletmek olacaktır. Bu da beni burada ana düşünceye getiriyor, bu da dilleri daha az ortodoks bir şeye çevirmenin yardımcı olabileceği anlamına geliyor. Geçmiş araştırmalara göre, olasılık sırasına göre en olası adaylar Common Lisp ve Ocaml. Bu konuda yıllardır düşünüyorum, ama son zamanlarda daha ciddi bir şekilde düşünüyorum.
Söyleyebileceğim kadarıyla, çok az insan bilimsel hesaplama için CL veya Ocaml kullanıyor. Bu siteyi ararken CL'ye (biri benim) diğeri Ocaml'a (benim) iki referans buldum. Yıllarca, saçakta çalışan maceracı insanlarla birkaç cesaret verici temaslar yaşadım. 2008'de Peter Seibel'in "Uygulamalı Ortak Lisp" in (sahip olduğum) Tamas K. Papp tarafından bir kitap incelemesine rastladım . Bu dikkatimi çekti, çünkü Lisp için internette karşılaştığım birkaç bilimsel bilgi işlemden biriydi. Hemen yardımsever ve cesaret verici bir şekilde cevap veren Tamas'a yazdım. Ona alıntı yapmak
Programlama verimliliğim muhtemelen Lisp ile 10 kat arttı, ancak bu bir yıl sürdü ve hala öğreniyorum (2 ay sonra da oldukça iyi gidiyordum). Bu yüzden zaman açısından kritik bir şey üzerinde çalışıyorsanız, o zaman anahtarı erteleyin.
Milletvekillerine sormayı düşünmelisin, bu şeyleri bilen tek kişi ben değilim, diğerleri Lisp'te bilimsel bilgi işlem yapar.
Ayrıca bir blog ve GitHub sayfası var .
Kısaca yazdığım bir diğer kişi (Aralık 2006'da), Common Lisp'i radyasyon onkolojisi bağlamında kullanan Ira Kalet'ti .
Belki de Lisp hakkında bilimsel bilgi işlem yapan başkaları var, ama kimseyi tanımıyorum.
İnsanlarda CL ile ilgili en sık rastlanan problem kütüphane eksikliğidir. Bu genel amaçlı hesaplamada ciddi bir sorundur, ancak bilimsel hesaplamada, özellikle algoritmaların temelden uygulamalarından çok fazla olmayabilir. Spesifik olarak, olasılık dağılım fonksiyonları, çok boyutlu bir dizi kütüphanesi ve C ++ ve Python standart kütüphanelerinde bulunan harita, küme, liste vb.
Ocaml hakkında CL hakkında yaptığımdan daha az şey biliyorum ama bunu bir alternatif olarak attım. Sözde çok hızlı, Fransız araştırmacılar tarafından ücretsiz bir şekilde uygulandı ve ML'deki dil ailesinin bilimsel bilgi işlem için en uygun örneği gibi görünüyor.
Sonuç olarak, başkalarının bu konuda deneyime sahip olup olmadığını ve varsa, hangi düşünceleri olduğunu merak ediyorum.
EDIT: Yukarıda, daha önce tartıştığım konular bağlamında, ilk elden deneyim ile ilgileniyorum. Örneğin, Python ve C ++ (ya da R ve C ++) kullanıyor ve daha karanlık bir dile geçtiyseniz, en çok deneyimlerinizi duymak isterim.