เหตุใดการบิลด์ SciPy สำหรับ Python 3.12 จึงเหมือนปาฏิหาริย์
- เมื่อไม่นานมานี้ Python 3.12 ได้เปิดตัว
- โดยปกติแล้วแพ็กเกจหลัก ๆ มักจะออกรุ่นที่รองรับ Python เวอร์ชันใหม่ได้อย่างรวดเร็ว
- การที่ SciPy ออกบิลด์ที่เข้ากันได้กับ Python 3.12 นั้น เป็นผลลัพธ์ที่โชคดีจากหลายไทม์ไลน์ที่มาบรรจบกัน
บทบาทของ Fortran และคอมไพเลอร์
- Fortran เป็นภาษาโปรแกรมสำคัญมาตั้งแต่ทศวรรษ 1950 และโค้ดทางวิทยาศาสตร์จำนวนมากก็เขียนด้วย Fortran
- แม้จะมี Fortran compiler อยู่หลายตัว แต่ทั้งหมดล้วนเป็นซอฟต์แวร์แบบปิด
- คอมไพเลอร์มีหน้าที่แปลงโค้ดที่โปรแกรมเมอร์เขียนให้เป็นรูปแบบที่คอมพิวเตอร์สามารถรันได้
- GCC เป็นคอมไพเลอร์ที่ใช้งานได้อย่างเสรี และรองรับสถาปัตยกรรม CPU กับระบบปฏิบัติการที่หลากหลาย
Python กับปัญหาด้านประสิทธิภาพ
- Python ใช้งานได้โดยไม่ต้องมีคอมไพเลอร์ แต่ทำงานช้ากว่าภาษาที่ต้องคอมไพล์
- หากประสิทธิภาพเป็นเรื่องสำคัญ แนวทางที่ดีคือใช้โค้ดที่คอมไพล์แล้วและห่อด้วยอินเทอร์เฟซ Python
- NumPy และ SciPy ใช้โค้ด Fortran เพื่อประสิทธิภาพ ซึ่งทำให้ผู้ใช้ต้องมีคอมไพเลอร์เมื่อติดตั้งแพ็กเกจ
ปัญหาของการแพ็กเกจใน Python
- ระบบแพ็กเกจของ Python มีความซับซ้อนจนต้องถูกคิดใหม่อยู่เรื่อย ๆ
- การดาวน์โหลดซอร์สโค้ดมาใช้โดยตรงทำให้ผู้ใช้ต้องตั้งค่าคอมไพเลอร์เอง และยังใช้เวลาบิลด์นาน
- ฟอร์แมต
wheel ช่วยปรับปรุงเรื่องนี้ด้วยการกระจายแพ็กเกจพร้อมไลบรารีที่จำเป็น
การมาของ conda และ conda-forge
- conda มอบแนวทางที่ครอบคลุมยิ่งกว่า โดยรวมทุกอย่างที่จำเป็นต่อการแพ็กเกจไว้ด้วยกัน
- conda-forge เป็นแชนเนลที่ชุมชนร่วมกันดูแลเพื่อทำงานบูรณาการแพ็กเกจ
- conda-forge พยายามรองรับทุกแพลตฟอร์มทั่วไป และขับเคลื่อนโดยอาสาสมัคร
SciPy เลือก Meson เป็นเครื่องมือบิลด์
- SciPy เลือก Meson เป็นเครื่องมือบิลด์
- Meson มีอินเทอร์เฟซสไตล์ Python และซับซ้อนน้อยกว่า CMake
- Meson มีปรัชญาการออกแบบที่ไม่ยอมให้ผู้ใช้ที่ไม่ใช่ผู้เชี่ยวชาญทำสิ่งที่ผิดพลาดได้ง่าย
การกลับมาของ Fortran และ LLVM
- ในช่วงไม่กี่ปีที่ผ่านมา Fortran ได้รับความสนใจเพิ่มขึ้นอีกครั้ง
- การพัฒนา Fortran compiler รุ่นใหม่ที่อิงกับ LLVM กำลังคึกคัก
- LLVM มอบโครงสร้างพื้นฐานของคอมไพเลอร์ที่ทำงานได้บนสถาปัตยกรรมและแพลตฟอร์มที่หลากหลาย
การย้ายไปใช้ Meson ของ SciPy และปัญหาของ conda-forge
- แม้ SciPy จะย้ายไปใช้ Meson แล้ว แต่ก็ยังเกิดปัญหาเพราะไม่มี Fortran compiler สำหรับ Windows
- conda-forge จำเป็นต้องรีบิลด์แพ็กเกจที่เกี่ยวข้องทั้งหมดเพื่อย้ายไปสู่ Python 3.12
ความหมายของ 'Yukatastrophe' และความเห็นของ GN⁺
- ชุดทดสอบของ SciPy ผ่านครบ 100% ทำให้ conda-forge สามารถบิลด์ SciPy ที่เข้ากันได้กับ Python 3.12 ได้
- นี่เป็นผลจากทั้งความพยายามและความบังเอิญหลายอย่างที่มาซ้อนทับกัน และสร้างประโยชน์อย่างมากให้กับชุมชน Python
- ความเห็นของ GN⁺: บทความนี้แสดงให้เห็นว่าความพยายามและความร่วมมือของชุมชน Python สามารถแก้ปัญหาทางเทคนิคที่ซับซ้อนได้อย่างไร การที่ SciPy ออกรุ่นบิลด์ที่รองรับ Python 3.12 ได้สำเร็จถือเป็นความก้าวหน้าสำคัญของวงการ scientific computing และยังสะท้อนถึงพลังของซอฟต์แวร์โอเพนซอร์สกับพลังของชุมชนอีกด้วย
3 ความคิดเห็น
ความคิดเห็นบน Hacker News
ชุมชนซอฟต์แวร์เสรีควรยุติการรองรับระบบปฏิบัติการของ Microsoft และปล่อยให้พวกเขาพอร์ตสิ่งอย่าง scipy เอง
เหตุผลที่ Python packaging ซับซ้อน เป็นเพราะเครื่องมือ build สำหรับ C/C++/Fortran ที่ไม่เป็นมาตรฐานและระบบนิเวศขนาดมหาศาล ไม่ใช่ปัญหาของ Python เอง
การที่เครื่องมือ build อย่าง Meson ปฏิเสธชุด MSVC+gfortran ดูเหมือนจะเป็นบั๊ก
หลายคนกำลังใช้ WSL2 เพื่อแก้ปัญหาอยู่แล้ว จึงสงสัยว่าทำไมยังต้องการ build เวอร์ชัน Windows แบบเนทีฟ
ไลบรารี BLAS ที่ดีที่สุดส่วนใหญ่เขียนด้วย C และน่าสงสัยว่าแค่ C กับ Python จะไปได้ไกลแค่ไหน
คำถามแบบซื่อ ๆ ว่าในเมื่อความหมายเชิงภาษา (semantics) ของ Fortran ต่างจาก C มาก จะไม่สามารถแปลงเป็น C แล้วคอมไพล์ด้วยคอมไพเลอร์ C ได้หรือ และจะดูแลรักษาในรูป C ได้หรือไม่
ตามการเปลี่ยนแปลงของระบบ build ของ Python ได้ยาก
คำถามว่า "aarch64" กับ "arm64" คือสิ่งเดียวกันหรือไม่
Fortran เคยเป็นตัวตลกในแผนกไอที แต่ในช่วงไม่กี่ปีที่ผ่านมาได้กลับมาอย่างน่าทึ่ง
คำถามเกี่ยวกับความแตกต่างระหว่าง "arm64" กับ "aarch64" ในตารางคอมไพเลอร์/สถาปัตยกรรม
นี่เป็นกรณีที่เผยให้เห็นอย่างชัดเจนเลยว่าเราต้องไปพึ่งพาภาษาแบบคอมไพล์เป็นไบนารีอย่างน่าเวทนาแค่ไหน
แก้ได้ในฝั่ง Python แต่ในอีโคซิสเต็มอื่นยังแก้ไม่ได้ไม่ใช่หรือ? เพราะอย่างนั้นถึงต้องมีการแจกไบนารีที่คอมไพล์ไว้ล่วงหน้าไงล่ะ