1 คะแนน โดย GN⁺ 2024-04-07 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

การผสาน Fortran กับ WebAssembly

  • Fortran เป็นภาษาโปรแกรมเก่าแก่ที่ปรากฏครั้งแรกในปี 1957 ซึ่งเก่ากว่าภาษา C, ซีพียู Intel 4004 และคอมพิวเตอร์เมนเฟรม IBM System/360
  • Fortran ถูกใช้งานกับงานที่เน้นการคำนวณอย่างหนักในแอปพลิเคชันด้านวิทยาศาสตร์และวิศวกรรมมาโดยตลอด และบางส่วนก็ถูกมองว่ามีประสิทธิภาพด้านการคำนวณเชิงตัวเลขดีกว่า C
  • บล็อกโพสต์นี้อธิบายวิธีคอมไพล์โค้ด Fortran เดิมให้เป็น WebAssembly เพื่อให้สามารถรันในเว็บเบราว์เซอร์ได้

ปัญหาคืออะไร?

  • แม้จะมีหลายวิธีในการคอมไพล์ Fortran ไปเป็น WebAssembly แต่ก็ยังไม่มีวิธีใดที่รองรับทุกฟีเจอร์ได้อย่างสมบูรณ์
  • แต่ละวิธีมีข้อเสียของตัวเอง และไม่ใช่โซลูชันแบบเสียบแล้วใช้ได้ทันที

สรุปคอมไพเลอร์

  • มีความเปลี่ยนแปลงบางอย่างเกิดขึ้นกับคอมไพเลอร์ Fortran ที่อิงกับ LLVM
  • ยูทิลิตี f2c สามารถแปลง Fortran 77 เป็นโค้ด C ได้ แต่ไม่เข้ากันกับโค้ด Fortran สมัยใหม่
  • คอมไพเลอร์ LFortran รองรับฟีเจอร์ได้มากขึ้นแล้ว แต่ก็ยังอาจมีปัญหากับบางโปรเจ็กต์
  • Dragonegg เป็นปลั๊กอินของ GCC ที่สร้าง LLVM IR ได้ แต่ต้องใช้ GCC และ LLVM เวอร์ชันเก่า
  • Classic Flang ไม่รองรับเอาต์พุตแบบ 32 บิต และ LLVM Flang ในปัจจุบันก็ยังไม่สร้างเอาต์พุต WebAssembly โดยตรงเป็นค่าเริ่มต้น

การสร้างและใช้งาน WebAssembly ด้วย LLVM Flang

  • จำเป็นต้องแก้ไขซอร์สของ LLVM Flang เพื่อทำให้รองรับทาร์เก็ต WebAssembly
  • สามารถใช้ประโยชน์จากการออกแบบแบบโมดูลาร์ของ LLVM เพื่อใช้งานฟรอนต์เอนด์ของ Flang ร่วมกับแบ็กเอนด์ WebAssembly ได้

การเรียก Fortran subroutine จาก C

  • ทบทวนวิธีคอมไพล์และลิงก์ Fortran subroutine ให้เป็นส่วนหนึ่งของโปรแกรม C

กลับมาที่ LLVM Flang

  • สามารถใช้คอมไพเลอร์ LLVM Flang เพื่อคอมไพล์ Fortran subroutine ได้ แต่เนื่องจากยังไม่ได้มีการรองรับทาร์เก็ต WebAssembly จึงต้องแพตช์ซอร์สโค้ดก่อน

การเรียก Fortran routine จาก JavaScript

  • สามารถใช้ Emscripten เพื่อลิงก์อ็อบเจ็กต์ Fortran และเรียกใช้งานจาก JavaScript ได้โดยตรง

Fortran runtime library: เส้นทางสู่ "Hello, World!"

  • อธิบายปัญหาที่เกิดขึ้นเมื่อพยายามสร้างโปรแกรม "Hello, World!" ด้วย Fortran
  • จำเป็นต้องคอมไพล์ LLVM Fortran runtime library สำหรับ WebAssembly

ความเห็นของ GN⁺

  • บทความนี้แสดงให้เห็นความพยายามในการผสานภาษาดั้งเดิมอย่าง Fortran เข้ากับเทคโนโลยีเว็บสมัยใหม่ แนวทางเช่นนี้อาจมีประโยชน์ในการนำไลบรารีคำนวณเชิงตัวเลขที่ผ่านการพิสูจน์มาแล้วขึ้นสู่เว็บ
  • กระบวนการคอมไพล์ Fortran ไปเป็น WebAssembly แสดงให้เห็นความท้าทายของการย้ายโค้ดเบสเดิมไปยังแพลตฟอร์มใหม่ได้อย่างชัดเจน โดยเฉพาะปัญหาที่เกี่ยวข้องกับ cross-compiling ซึ่งเป็นปัจจัยสำคัญที่ควรคำนึงถึงเมื่อต้องพอร์ตไปยังภาษาอื่นหรือแพลตฟอร์มอื่นเช่นกัน
  • แม้เทคโนโลยีนี้จะน่าสนใจ แต่การทำงานคำนวณเชิงตัวเลขที่ต้องการประสิทธิภาพสูงบนเว็บก็ยังมีข้อจำกัดในทางปฏิบัติอยู่ WebAssembly อาจยังให้ประสิทธิภาพไม่เทียบเท่าแอปพลิเคชันเนทีฟแบบดั้งเดิม
  • การพัฒนา LLVM Flang ดำเนินไปอย่างคึกคักมาก และความพยายามเหล่านี้ก็คาดว่าจะส่งผลดีต่อชุมชน Fortran อย่างไรก็ตาม ปัญหาหลายประการที่กล่าวถึงในบทความนี้ก็ชี้ให้เห็นว่ายังมีโจทย์ที่ต้องแก้ไขอีกมาก
  • บทความนี้ให้ข้อมูลที่เป็นประโยชน์สำหรับนักพัฒนาที่ต้องการผสาน Fortran เข้ากับเทคโนโลยีเว็บ โดยเฉพาะผู้ที่กำลังพิจารณาพัฒนาเครื่องมือบนเว็บในด้านการวิเคราะห์เชิงตัวเลขหรือการคำนวณทางวิทยาศาสตร์

1 ความคิดเห็น

 
GN⁺ 2024-04-07
ความคิดเห็นจาก Hacker News
  • จอร์จได้ศึกษาภาษา Fortran ระหว่างเข้าร่วมโครงการ WebR เพื่อรัน R ในเว็บเบราว์เซอร์

    • ในซอร์สโค้ดของ R มีโค้ด Fortran รวมอยู่เป็นจำนวนมาก
    • เดิมที WebR ใช้ f2c ซึ่งแปลง Fortran เป็น C แต่ด้วยแพตช์ของ LLVM Flang จึงสามารถบิลด์ด้วยคอมไพเลอร์ Fortran จริงได้
    • แม้จอร์จจะไม่ได้กล่าวถึงเรื่องนี้โดยตรงในบล็อกโพสต์ แต่เขาหวังว่า Flang จะรับแพตช์ของเขาหรือทำแพตช์ที่ดีกว่านี้
    • หาก Flang แบบไม่ต้องแก้ไขสามารถคอมไพล์เป็น wasm ได้โดยไม่ต้องคอยดูแลแพตช์แยกต่างหาก ก็จะเป็นประโยชน์ต่อโครงการอื่นที่ใช้ Fortran ด้วย
  • มีการแชร์ประสบการณ์จากเมื่อ 20 ปีก่อนที่ Xilinx ซึ่งเคยทำงานด้านคอมไพเลอร์ FORTRAN

    • สิ่งที่จำได้แม่นคือในไฟล์เฮดเดอร์ f2c.h มีการนิยามคำว่า barf อยู่
  • มีการแนะนำให้บิลด์ f18 โดยใช้ซอร์สล่าสุดของโครงการ LLVM

    • มีการกล่าวว่าโครงการ LLVM เคลื่อนไหวเร็วมาก และการเสียเวลาไปกับการดีบักปัญหาที่แก้ไปแล้ว หรือพลาดฟีเจอร์ที่มีอยู่แล้ว เป็นเรื่องสิ้นเปลืองเวลา
  • มีการชื่นชมวิธีอธิบายแบบ "ตัวอย่างที่ไม่ง่ายจนเกินไปแต่เรียบง่ายที่สุด"

    • ผู้แสดงความคิดเห็นบอกว่าสามารถเรียนรู้อะไรได้มากจากปัญหาเฉพาะอย่าง "การเรียกฟังก์ชัน BLAS จาก JavaScript"
  • มีการพูดถึงการขาดความรู้เกี่ยวกับการพัฒนา WebAssembly

    • ผู้แสดงความคิดเห็นสงสัยว่า WebAssembly มีอะไรที่มอบให้ผู้ใช้ทั่วไปได้ในตอนนี้หรือไม่ หรือทั้งหมดเป็นเพียงการปูพื้นสำหรับอนาคตของโปรแกรมที่พกพาได้อย่างแท้จริง
    • ได้ยินมาว่า WebAssembly ช่วยจำกัดการเข้าถึงเครือข่ายและไฟล์ได้ แต่ไม่แน่ใจว่านี่เป็นเพียงแนวคิดเชิงทฤษฎีหรือมีการใช้งานจริงแล้ว
  • มีคำถามว่ามีระบบนิเวศสำหรับพีชคณิตเชิงเส้นใน JavaScript ที่พร้อมใช้งานระดับ "production" หรือไม่

    • ผู้แสดงความคิดเห็นบอกว่าพอลองค้นหาใน Google ก็มักเจอไลบรารีเก่า ๆ ที่ถูกพอร์ตมาสู่ JavaScript และสงสัยว่าตัวเองอาจพลาดอะไรไปหรือไม่
  • มีความเห็นว่าอยากรู้ว่าถ้าเก็บโค้ด Fortran 78 ที่เขียนไว้ในปี 1981/82 เอาไว้ ตอนนี้จะยังสามารถนำมารันได้หรือไม่

    • มีการกล่าวถึงตัวจัดรูปแบบซอร์สโค้ดของภาษา Jovial ซึ่งในเวลานั้นจำเป็นต้องใช้ Fortran
  • มีการบอกว่ารู้สึกแปลกที่ไม่มีการพูดถึง LFortran มากกว่านี้

    • LFortran มีตัวอย่าง WASM ออนไลน์ที่ยอดเยี่ยมและน่าทึ่ง
  • มีการให้ข้อมูลเกี่ยวกับการใช้ Fortran ใน .NET และ Java

    • ระบุผ่านลิงก์ที่เกี่ยวข้องว่า Fortran สามารถใช้งานร่วมกับ .NET และ Java ได้
  • มีการแชร์ประสบการณ์การคอมไพล์ TensorFlow สำหรับเบราว์เซอร์

    • ผู้แสดงความคิดเห็นบอกว่ารู้สึกขอบคุณที่ TensorFlow ใช้ Eigen จึงไม่ต้องใช้ไลบรารีคณิตศาสตร์ยอดนิยมที่เขียนด้วย Fortran อย่าง BLAS และ Lapack ทำให้เลี่ยงงานเพิ่มไปได้มาก