การใช้ภาษาการเขียนโปรแกรมที่ไม่เป็นทางการสำหรับการคำนวณทางวิทยาศาสตร์ [ปิด]


22

หมายเหตุ: โพสต์ต่อไปนี้อาจรวมถึงความเห็นแย้งดังนั้นโปรดทราบว่าพวกเขาเป็นเพียงความคิดเห็นของฉันและไม่ได้มีเจตนาที่จะรุกรานใคร

ฉันกำลังเขียนโปรแกรมในบางรูปแบบหรืออื่น ๆ ตั้งแต่ประมาณปี 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 ++) และย้ายไปใช้ภาษาที่คลุมเครือมากขึ้นฉันจะสนใจฟังประสบการณ์ของคุณมากที่สุด


2
การแลกเปลี่ยนสแต็คใช้สำหรับถามคำถามไม่ใช่เพื่อโพสต์เรื่องราวในชีวิต! คำถามของคุณน่าจะเป็น "มีโครงการคำนวณทางวิทยาศาสตร์ที่ใช้ Common LISP หรือ OCaml" ใช่ไหม
khinsen

4
ตกลงเห็นด้วยนี้อ่านเพิ่มเติมเล็กน้อยเช่นโพสต์บล็อก แต่ฉันชอบสถานที่ตั้ง โอกาสใดที่คุณสามารถลองและลดให้เหลือ 2-3 ย่อหน้า
Aron Ahmadia

1
ยังตกลงกัน ความเห็นและประสบการณ์ส่วนตัวเป็นสิ่งที่ดีเมื่อมันสนับสนุนคำถามหลัก; รายละเอียดที่มากเกินไปอาจทำให้ประเด็นสำคัญหายไปได้ หากคุณสามารถย่อคำถามของคุณฉันคิดว่ามันจะง่ายต่อการอ่านและจะได้รับการตอบสนองเป้าหมายที่มีคุณภาพมากขึ้น
Geoff Oxberry

1
@FaheemMitha: ใน "โลกในอุดมคติ" คุณพูดถึงกลางทางมันจะเป็นการชุมนุมที่ได้รับการเพิ่มประสิทธิภาพด้วยมือ ...
meawoppl

3
@FaheemMitha: สิ่งที่ดีที่สุดที่ฉันคิดว่าคุณสามารถทำได้เพื่อปรับปรุงคำถามของคุณคือการทำให้คำถามที่คุณถามชัดเจน ดูเหมือนว่าคุณกำลังเล่าเรื่องราวเกี่ยวกับประสบการณ์ของคุณ (ซึ่งก็ไม่เป็นไร) และในที่สุดคุณก็ฝังคำถามเป็นคำพูดท้ายเรื่องของคุณ ("ในการสรุปฉันสงสัยว่า ... ") สิ่งที่ดีที่สุดที่คุณสามารถทำได้คือทำคำถามนั้นดังนั้นผู้คนที่อ่านคำถามของคุณจะสามารถระบุสิ่งที่คุณถามได้อย่างง่ายดาย ฉันต้องย้อนกลับไปสองสามครั้งเพื่อคิดออก
Geoff Oxberry

คำตอบ:


18

เราได้พัฒนาจูเลียสำหรับว่าเหตุผลที่เกิดขึ้น ไม่มีภาษาคอมพิวเตอร์เชิงวิทยาศาสตร์ระดับสูงที่ให้ประสิทธิภาพที่ดีพอที่คุณไม่จำเป็นต้องเขียนส่วนของรหัสของคุณใหม่ใน C / Fortran การออกแบบของจูเลียนั้นมีอิทธิพลต่อเสียงกระเพื่อมเล็กน้อยดังนั้นคุณอาจพบว่ามันถูกใจคุณในขณะที่ผู้ทำงานร่วมกันของคุณสามารถทำได้เหมือน matlab หรือ R หากพวกเขาไม่สนใจชิ้นส่วนที่ใช้งานได้ ข้อเสียคือภาษานี้เป็นภาษาใหม่และยังไม่มีห้องสมุดทั้งหมดที่จำเป็นสำหรับการใช้งานแบบวันต่อวัน

ทำเครื่องหมายรักที่จะเพิ่มจูเลียในเกณฑ์มาตรฐานของคุณเพื่อดูว่าเราเป็นอย่างไร กระโดดข้ามไปยังรายชื่อผู้รับจดหมายของเราและแจ้งให้เราทราบว่าคุณต้องการเห็นอะไรในจูเลียเพื่อให้เป็นประโยชน์กับคุณมากขึ้น


นั่นดูสวยงาม! ฉันจะตรวจสอบเรื่องนี้อย่างแน่นอนสำหรับงานของฉันเอง ปัจจุบันผมใช้หลามสำหรับการทำงานของฉันในเรื่องย่อทฤษฎีเพียงเพราะเวลาที่ได้รับโดยมีได้อย่างรวดเร็ว c ++ รหัสเมื่อตะกี้เวลาที่ใช้ในการเขียนใน C ++ ในสถานที่แรก :)
Lagerbaer

9

ความเร็วขนาดและความน่าเชื่อถือของภาษาการเขียนโปรแกรมเป็นงานที่ดีมากในการรวบรวมข้อกังวลต่าง ๆ ไว้ใน "คำถาม" ของคุณ มันเปรียบเทียบความเร็วและขนาดโค้ดเบสของการใช้งานที่เป็นมาตรฐานเดียวกันใน 33 ภาษา!

ฉันได้กลายเป็นคนรักงูหลามเป็นหลักเพราะมันเป็นเรื่องธรรมดามากที่จะมีเวลาในการคำนวณมากเกินกว่าที่จะเขียนโปรแกรมมากเกินไป ฉันยินดีที่จะใช้วงจร CPU มากกว่าที่จะเสียเวลาไปกับสิ่งที่น่าสนใจ

นอกจากนี้ +1 บน Julia ฉันคิดว่าฉันอาจเปลี่ยนไปใช้เมื่อมันมีเสถียรภาพมากขึ้นและรองรับอย่างกว้างขวางเช่นเมื่อโมดูลมาตรฐานถูกห่อหุ้มสำหรับงานที่ฉันชอบทำ


4

สำหรับการใช้งานทางวิทยาศาสตร์ของ OCaml ดูตัวอย่าง

สำหรับเสียงกระเพื่อมในวิทยาศาสตร์ดูตัวอย่าง

ฉันแน่ใจว่ามีการอ้างอิงอีกมากมาย อย่างไรก็ตามฉันไม่สามารถอ้างถึงโครงการวิจัยที่สำคัญใด ๆ ที่มีการคำนวณงานใน OCaml หรือ Lisp การเลือกอย่างใดอย่างหนึ่งหมายถึงการทำงานในการแยกญาติ

คุณอาจสนใจจูเลียซึ่งเป็นภาษาใหม่สำหรับการคำนวณทางวิทยาศาสตร์ที่อยู่ระหว่างการพัฒนาด้วยอิทธิพลของ Lisp ที่ชัดเจน


1
บางทีฉันควรทำให้ชัดเจนยิ่งขึ้นว่าฉันสนใจประสบการณ์มือแรกเป็นส่วนใหญ่ ฉันจะแก้ไขคำถามของฉันเพื่อสะท้อนสิ่งนี้
Faheem Mitha
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.