หมายเหตุ: โพสต์ต่อไปนี้อาจรวมถึงความเห็นแย้งดังนั้นโปรดทราบว่าพวกเขาเป็นเพียงความคิดเห็นของฉันและไม่ได้มีเจตนาที่จะรุกรานใคร
ฉันกำลังเขียนโปรแกรมในบางรูปแบบหรืออื่น ๆ ตั้งแต่ประมาณปี 1999 ตอนแรกฉันใช้ R แล้วต่อมาประมาณปี 2004 เปลี่ยนเป็น Python เป็นส่วนใหญ่
สำหรับแอปพลิเคชันทางวิทยาศาสตร์จำนวนมากเช่นการจำลองรวมถึงสิ่งต่าง ๆ เช่น MCMC ทั้ง R และ Python ช้าเกินไปและต้องเร่งความเร็ว วิธีปกติในการทำเช่นนี้คือการขยายด้วย C หรือ C ++ สำหรับทั้ง R และ Python นี่คือสิ่งที่ฉันทำโดยใช้ C API ของ R กับ C ++ และไลบรารี Boost Python กับ Python
อย่างไรก็ตามด้วยเหตุผลต่าง ๆ การรวมกันนี้ไม่ได้เป็นทางออกที่ดี สิ่งสำคัญในการเขียนโปรแกรมโดยเฉพาะอัลกอริทึมคืออะไร ความหมายและความเร็วซึ่งแน่นอนว่าเกี่ยวข้องกัน ยิ่งภาษาแสดงออกได้เร็วเท่าไหร่ก็ยิ่งเขียนได้เร็วขึ้นเท่านั้น
1) ตราบใดที่การแสดงออกนั้นไม่มีทั้ง R และ Python ไม่เหมาะสำหรับการเขียนอัลกอริทึมทางวิทยาศาสตร์ในความคิดของฉัน พวกเขาไม่ได้จับคู่กับอัลกอริทึมพื้นฐานอย่างใกล้ชิด อย่างไรก็ตามทั้งคู่นั้นดีกว่า C ++ มาก
2) ฉันสนุกกับการเขียนใน Python ซึ่งเป็นภาษาที่น่าพอใจแม้ว่าตามที่ระบุไว้ข้างต้นมันไม่เหมาะสำหรับงานอัลกอริทึม อย่างไรก็ตามเมื่อต้องทำงานกับชุด Python / C ++ เนื่องจากปัญหาด้านความเร็วชุดค่าผสมนี้จะลดลงอย่างน่าพอใจในการใช้งาน สิ่งที่มักจะเกิดขึ้นคือฉันเขียน Python เป็นครั้งแรกและเมื่อฉันมีบางสิ่งที่ทำงานได้ดีมักจะค้นพบว่ามันช้าเกินไป ฉันต้องเผชิญกับการตัดสินใจว่าจะใช้เวลาในการเขียนใหม่ใน C ++ หรือไม่ก็จัดการกับความเชื่องช้า ในความเข้าใจย้อนหลังฉันมักจะรู้สึกว่าฉันอาจจะดีกว่าที่จะทนกับความช้าโดยเฉพาะอย่างยิ่งเมื่อการเร่งความเร็วที่ได้รับนั้นไม่สามารถคาดเดาได้ นอกจากนี้อินเทอร์เฟซ Boost Python ระหว่างทั้งสองยังเป็นปัญหาการบำรุงรักษาที่สำคัญ และการมีโค้ดในภาษาที่แตกต่างกันสองภาษาติดกันอย่างนี้ทำให้เสียสมาธิ ไม่มีการวิพากษ์วิจารณ์เกี่ยวกับ Boost Python มันเป็นอินเทอร์เฟซที่ทรงพลังเท่าที่จะจินตนาการได้และเกือบจะใช้งานได้เกือบตลอดเวลา
ตอนนี้ในโลกอุดมคติที่มีเวลาและทรัพยากรไม่ จำกัด ไม่ปัญหาเหล่านี้จะเป็นเรื่องใหญ่ อย่างไรก็ตามในโครงการทางวิทยาศาสตร์ที่ฉันได้ทำงานฉันมีประสบการณ์ดังต่อไปนี้
ไม่ว่าฉันจะมีผู้ทำงานร่วมกันในโครงการหรือไม่ฉันก็มักจะเลิกทำเรื่องคอมพิวเตอร์เป็นส่วนใหญ่ ในโครงการที่สำคัญจำนวน 5 โครงการฉันมีส่วนร่วมอย่างมากจากหนึ่งคนต่อหนึ่งโครงการ คนคนนั้นทำมากกว่าดึงน้ำหนักของเขา เขาทำมากเท่ากับฉันหรือมากกว่า อย่างไรก็ตามในกรณีอื่น ๆ ทั้งหมดรวมถึงโครงการที่มีผู้ทำงานร่วมกันหลายคนฉันได้ทำงานเกี่ยวกับการคำนวณทั้งหมดแล้ว ในขณะที่ฉันสามารถพูดได้ว่าฉันไม่ได้รับพรกับผู้ทำงานร่วมกันที่ดีที่สุด (ดูเหมือนจะเป็นส่วนผสมของความเกียจคร้านและความไร้ความสามารถ) มันไม่ชัดเจนสำหรับฉันว่าสถานการณ์ของกิจการนี้มีแนวโน้มที่จะเปลี่ยนแปลงในอนาคต
งานทางวิทยาศาสตร์การคำนวณเป็นความพยายามอย่างมากและถ้าฉันไม่สามารถเปลี่ยนวิธีการทำงานของผู้ทำงานร่วมกันได้ฉันสามารถเปลี่ยนวิธีการทำงานของฉันได้ การปรับปรุงที่สำคัญที่สุดคือการทำให้เสร็จเร็วขึ้น ซึ่งนำฉันไปสู่การพิจารณาหลักที่นี่ซึ่งก็คือการเปลี่ยนภาษาเป็นสิ่งที่น้อยดั้งเดิมอาจช่วย จากการวิจัยที่ผ่านมาผู้สมัครที่มีโอกาสมากที่สุดในลำดับความเป็นไปได้คือ Common LISP และ Ocaml ฉันเคยคิดเกี่ยวกับเรื่องนี้มานานหลายปี แต่เมื่อเร็ว ๆ นี้ได้คิดเกี่ยวกับมันอย่างจริงจังมากขึ้น
เท่าที่ฉันสามารถบอกได้มีเพียงไม่กี่คนที่ใช้ CL หรือ Ocaml ในการคำนวณทางวิทยาศาสตร์ ในการค้นหาไซต์นี้ฉันพบการอ้างอิงถึง CL สองรายการ (อันหนึ่งเป็นของฉัน) และอีกหนึ่งชื่อเพื่อ Ocaml (ของฉัน) ฉันมีผู้ติดต่อที่ให้กำลังใจสองสามปีที่ผ่านมากับคนรักการผจญภัย ในปี 2008 ฉันเจอรีวิวหนังสือของ Peter Seibel เรื่อง "Common Common Lisp" (ซึ่งฉันเป็นเจ้าของ) โดย Tamas K. Papp สิ่งนี้ดึงดูดความสนใจของฉันเนื่องจากเป็นหนึ่งในไม่กี่คนที่กล่าวถึงการคำนวณทางวิทยาศาสตร์สำหรับ LISP ที่ฉันได้พบในอินเทอร์เน็ต ฉันเขียนถึง Tamas ที่ตอบกลับอย่างเป็นประโยชน์และให้กำลังใจทันที เพื่ออ้างถึงเขา
ประสิทธิภาพการเขียนโปรแกรมของฉันอาจเพิ่มขึ้นเป็นสิบเท่าด้วย Lisp แต่ใช้เวลาประมาณหนึ่งปีกว่าจะเกิดขึ้นและฉันยังคงเรียนรู้อยู่ (ฉันทำได้ค่อนข้างดีหลังจากผ่านไป 2 เดือน ดังนั้นหากคุณกำลังทำงานกับบางสิ่งบางอย่างที่สำคัญเวลาแล้วเลื่อนการเปลี่ยน
คุณควรพิจารณาถามคนใน cll ฉันไม่ใช่คนเดียวที่รู้เกี่ยวกับสิ่งเหล่านี้คนอื่น ๆ ทำการคำนวณทางวิทยาศาสตร์บน Lisp
นอกจากนี้เขายังมีบล็อกและหน้า GitHub
อีกคนหนึ่งที่ฉันติดต่อสั้น ๆ (ในเดือนธันวาคม 2549) คือIra Kaletผู้ใช้ Common LISP ในบริบทของการรักษาและมะเร็งวิทยารังสี
อาจมีคนอื่นที่ใช้คอมพิวเตอร์ใน Lisp แต่ฉันไม่รู้ว่าใคร
ปัญหาที่พบบ่อยที่สุดที่คนอ้างถึงกับซีแอลคือการขาดห้องสมุด นี่เป็นปัญหาที่รุนแรงในการคำนวณเพื่อวัตถุประสงค์ทั่วไป แต่อาจไม่มากนักในการคำนวณทางวิทยาศาสตร์โดยเฉพาะอย่างยิ่งจากการเริ่มต้นใช้งานอัลกอริทึม โดยเฉพาะฉันสามารถใช้เวลาส่วนใหญ่กับไลบรารีคณิตศาสตร์พื้นฐานรวมถึงฟังก์ชันการแจกแจงความน่าจะเป็นไลบรารีอาร์เรย์หลายมิติและชุดคอนเทนเนอร์พื้นฐานเช่นแผนที่ชุดรายการ ฯลฯ ที่พบในไลบรารีมาตรฐาน C ++ และ Python
ฉันรู้เกี่ยวกับ Ocaml น้อยกว่าที่ฉันทำเกี่ยวกับ CL แต่โยนมันลงไปในทางเลือก มันเร็วมากคาดว่าจะมีการใช้งานฟรีหนึ่งโดยนักวิจัยชาวฝรั่งเศสและดูเหมือนว่าตระกูล ML ของภาษาสำหรับการคำนวณทางวิทยาศาสตร์
เพื่อสรุปฉันสงสัยว่าคนอื่นมีประสบการณ์กับเรื่องนี้หรือไม่และพวกเขามีความคิดอย่างไรถ้ามี
แก้ไข: ฉันส่วนใหญ่สนใจประสบการณ์มือแรกในบริบทของปัญหาที่ฉันได้กล่าวถึงข้างต้น เช่นถ้าคุณเคยใช้ Python และ C ++ (หรือ R และ C ++) และย้ายไปใช้ภาษาที่คลุมเครือมากขึ้นฉันจะสนใจฟังประสบการณ์ของคุณมากที่สุด