3 คะแนน โดย GN⁺ 2023-11-09 | 3 ความคิดเห็น | แชร์ทาง WhatsApp

เหตุใดการบิลด์ 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 ความคิดเห็น

 
GN⁺ 2023-11-09
ความคิดเห็นบน Hacker News
  • ชุมชนซอฟต์แวร์เสรีควรยุติการรองรับระบบปฏิบัติการของ Microsoft และปล่อยให้พวกเขาพอร์ตสิ่งอย่าง scipy เอง

    • คนที่ต้องการ Linux ก็หาได้ใน WSL2
    • Microsoft ควรใส่คอมไพเลอร์มากับระบบปฏิบัติการ เหมือนที่ผู้ขายระบบปฏิบัติการรายอื่นทำกันมา 60 ปี
  • เหตุผลที่ Python packaging ซับซ้อน เป็นเพราะเครื่องมือ build สำหรับ C/C++/Fortran ที่ไม่เป็นมาตรฐานและระบบนิเวศขนาดมหาศาล ไม่ใช่ปัญหาของ Python เอง

    • ความซับซ้อนส่วนนี้เป็นสิ่งที่ลดทอนไม่ได้
    • แค่ระบบ packaging ของ Python ใช้งานได้ก็ถือเป็นปาฏิหาริย์แล้ว
  • การที่เครื่องมือ build อย่าง Meson ปฏิเสธชุด MSVC+gfortran ดูเหมือนจะเป็นบั๊ก

    • จุดประสงค์ของเครื่องมือ build คือรันคำสั่งที่ผู้ใช้สั่ง ไม่ใช่ปฏิเสธผู้ใช้
  • หลายคนกำลังใช้ WSL2 เพื่อแก้ปัญหาอยู่แล้ว จึงสงสัยว่าทำไมยังต้องการ build เวอร์ชัน Windows แบบเนทีฟ

  • ไลบรารี BLAS ที่ดีที่สุดส่วนใหญ่เขียนด้วย C และน่าสงสัยว่าแค่ C กับ Python จะไปได้ไกลแค่ไหน

    • Fortran อาจเป็นส่วนที่หลีกเลี่ยงไม่ได้ แต่ก็เป็นเรื่องดีที่การปรับปรุงเครื่องมือ Fortran บน Windows ได้เริ่มต้นขึ้นแล้ว
  • คำถามแบบซื่อ ๆ ว่าในเมื่อความหมายเชิงภาษา (semantics) ของ Fortran ต่างจาก C มาก จะไม่สามารถแปลงเป็น C แล้วคอมไพล์ด้วยคอมไพเลอร์ C ได้หรือ และจะดูแลรักษาในรูป C ได้หรือไม่

    • คาดว่าน่าจะมีผู้เชี่ยวชาญ Fortran ที่ดูแลไลบรารีเก่า ๆ ไม่มากนัก และมันก็ยังต้องการการบำรุงรักษา
  • ตามการเปลี่ยนแปลงของระบบ build ของ Python ได้ยาก

    • อยากรู้ตัวเลขประสิทธิภาพบน Windows แต่คาดว่างานจริงจังส่วนใหญ่ก็น่าจะรันบนเครื่อง Linux
  • คำถามว่า "aarch64" กับ "arm64" คือสิ่งเดียวกันหรือไม่

    • ใน Wikipedia คำว่า ARM64 จะรีไดเรกต์ไปที่ AArch64
  • Fortran เคยเป็นตัวตลกในแผนกไอที แต่ในช่วงไม่กี่ปีที่ผ่านมาได้กลับมาอย่างน่าทึ่ง

    • เหตุผลของการฟื้นคืนชีพนี้อาจไม่ชัดเจน แต่สามารถทำความเข้าใจได้ผ่านลิงก์ที่เกี่ยวข้อง
  • คำถามเกี่ยวกับความแตกต่างระหว่าง "arm64" กับ "aarch64" ในตารางคอมไพเลอร์/สถาปัตยกรรม

    • กล่าวถึงการที่บทความ ARM64 ใน Wikipedia รีไดเรกต์ไปที่ AArch64
 
ahwjdekf 2023-11-10

นี่เป็นกรณีที่เผยให้เห็นอย่างชัดเจนเลยว่าเราต้องไปพึ่งพาภาษาแบบคอมไพล์เป็นไบนารีอย่างน่าเวทนาแค่ไหน

 
kayws426 2023-11-10

แก้ได้ในฝั่ง Python แต่ในอีโคซิสเต็มอื่นยังแก้ไม่ได้ไม่ใช่หรือ? เพราะอย่างนั้นถึงต้องมีการแจกไบนารีที่คอมไพล์ไว้ล่วงหน้าไงล่ะ