Kết hợp Fortran và WebAssembly
- Fortran là một ngôn ngữ lập trình lâu đời, xuất hiện lần đầu vào năm 1957, còn cổ hơn cả ngôn ngữ C, CPU Intel 4004 và máy tính mainframe IBM System/360.
- Fortran từ lâu đã được օգտագործված cho các tác vụ đòi hỏi tính toán lớn trong các ứng dụng khoa học và kỹ thuật, và một số người cho rằng nó hiệu quả hơn C trong các phép tính số.
- Bài viết blog này giải thích cách biên dịch mã Fortran hiện có sang WebAssembly để có thể chạy trong trình duyệt web.
Vấn đề là gì?
- Có nhiều cách khác nhau để biên dịch Fortran sang WebAssembly, nhưng không có cách nào hỗ trợ đầy đủ mọi tính năng.
- Mỗi cách đều có nhược điểm riêng và không phải là một giải pháp cắm vào là chạy.
Tóm tắt về trình biên dịch
- Đã có một số thay đổi đối với các trình biên dịch Fortran dựa trên LLVM.
- Tiện ích
f2c chuyển đổi Fortran 77 sang mã C, nhưng không tương thích với mã Fortran hiện đại.
- Trình biên dịch LFortran hiện đã hỗ trợ nhiều tính năng hơn, nhưng vẫn có thể phát sinh vấn đề với một số dự án.
- Dragonegg là một plugin của GCC tạo ra LLVM IR, nhưng yêu cầu các phiên bản GCC và LLVM cũ.
- Classic Flang không hỗ trợ đầu ra 32-bit, còn LLVM Flang hiện tại không tạo đầu ra WebAssembly theo mặc định.
Xây dựng và sử dụng WebAssembly với LLVM Flang
- Cần sửa mã nguồn LLVM Flang để triển khai target WebAssembly.
- Có thể tận dụng thiết kế mô-đun của LLVM để dùng frontend Flang và backend WebAssembly.
Gọi chương trình con Fortran từ C
- Bài viết ôn lại cách biên dịch và liên kết một chương trình con Fortran như một phần của chương trình C.
Quay lại với LLVM Flang
- Có thể dùng trình biên dịch LLVM Flang để biên dịch các chương trình con Fortran, nhưng vì target WebAssembly vẫn chưa được triển khai nên cần áp dụng patch vào mã nguồn.
Gọi routine Fortran từ JavaScript
- Có thể dùng Emscripten để liên kết đối tượng Fortran và gọi trực tiếp từ JavaScript.
Thư viện runtime Fortran: hành trình đến với "Hello, World!"
- Bài viết mô tả các vấn đề phát sinh khi cố gắng build chương trình "Hello, World!" bằng Fortran.
- Cần biên dịch thư viện runtime Fortran của LLVM cho WebAssembly.
Ý kiến của GN⁺
- Bài viết này cho thấy nỗ lực tích hợp các ngôn ngữ truyền thống như Fortran với công nghệ web hiện đại. Cách tiếp cận này có thể hữu ích để đưa các thư viện tính toán số đã được kiểm chứng lên web.
- Quá trình biên dịch Fortran sang WebAssembly cho thấy rõ những thách thức trong việc chuyển một codebase hiện có sang nền tảng mới. Đặc biệt, các vấn đề liên quan đến cross-compiling là yếu tố quan trọng cũng cần được cân nhắc khi port sang ngôn ngữ hoặc nền tảng khác.
- Dù công nghệ này khá thú vị, việc thực hiện các tác vụ tính toán số đòi hỏi hiệu năng cao trực tiếp trên web vẫn còn những giới hạn thực tế. WebAssembly có thể vẫn chưa mang lại hiệu năng ngang với các ứng dụng native truyền thống.
- Việc phát triển LLVM Flang đang diễn ra rất tích cực, và những nỗ lực này được kỳ vọng sẽ tạo ảnh hưởng tích cực đến cộng đồng Fortran. Tuy vậy, nhiều vấn đề được nhắc đến trong bài cũng cho thấy vẫn còn những thách thức cần giải quyết.
- Bài viết này cung cấp thông tin hữu ích cho các nhà phát triển muốn tích hợp Fortran với công nghệ web, đặc biệt là những người đang cân nhắc phát triển các công cụ dựa trên web trong lĩnh vực phân tích số hoặc tính toán khoa học.
1 bình luận
Ý kiến Hacker News
George đã nghiên cứu về Fortran khi tham gia dự án WebR để chạy R trong trình duyệt web
f2c, công cụ chuyển Fortran sang C, nhưng nhờ các bản vá cho LLVM Flang nên giờ có thể build bằng trình biên dịch Fortran thực thụChia sẻ trải nghiệm từng làm việc với trình biên dịch FORTRAN tại Xilinx cách đây 20 năm
f2c.hcó một định nghĩa tên làbarfKhuyến nghị build
f18bằng mã nguồn mới nhất của dự án LLVMKhen ngợi cách giải thích theo hướng tiếp cận “ví dụ phi tầm thường đơn giản nhất”
Nhắc đến việc bản thân không có nhiều kiến thức về phát triển WebAssembly
Đặt câu hỏi liệu có tồn tại một hệ sinh thái “sẵn sàng cho sản xuất” dành cho đại số tuyến tính trong JavaScript hay không
Một ý kiến nói rằng giá như họ còn lưu đoạn mã Fortran 78 viết vào năm 1981/82 để xem giờ có thể chạy lại nó hay không
Cho rằng thật lạ khi không thấy LFortran được nhắc đến nhiều hơn
Cung cấp thông tin về việc dùng Fortran trong .NET và Java
Chia sẻ kinh nghiệm biên dịch TensorFlow cho trình duyệt