การผสาน 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 ความคิดเห็น
ความคิดเห็นจาก Hacker News
จอร์จได้ศึกษาภาษา Fortran ระหว่างเข้าร่วมโครงการ WebR เพื่อรัน R ในเว็บเบราว์เซอร์
มีการแชร์ประสบการณ์จากเมื่อ 20 ปีก่อนที่ Xilinx ซึ่งเคยทำงานด้านคอมไพเลอร์ FORTRAN
barfอยู่มีการแนะนำให้บิลด์ f18 โดยใช้ซอร์สล่าสุดของโครงการ LLVM
มีการชื่นชมวิธีอธิบายแบบ "ตัวอย่างที่ไม่ง่ายจนเกินไปแต่เรียบง่ายที่สุด"
มีการพูดถึงการขาดความรู้เกี่ยวกับการพัฒนา WebAssembly
มีคำถามว่ามีระบบนิเวศสำหรับพีชคณิตเชิงเส้นใน JavaScript ที่พร้อมใช้งานระดับ "production" หรือไม่
มีความเห็นว่าอยากรู้ว่าถ้าเก็บโค้ด Fortran 78 ที่เขียนไว้ในปี 1981/82 เอาไว้ ตอนนี้จะยังสามารถนำมารันได้หรือไม่
มีการบอกว่ารู้สึกแปลกที่ไม่มีการพูดถึง LFortran มากกว่านี้
มีการให้ข้อมูลเกี่ยวกับการใช้ Fortran ใน .NET และ Java
มีการแชร์ประสบการณ์การคอมไพล์ TensorFlow สำหรับเบราว์เซอร์