【Hacker News搬运】Fortran在WebAssembly上的应用
-
Title: Fortran on WebAssembly
Fortran在WebAssembly上的应用
Text:
Url: https://gws.phd/posts/fortran_wasm/
Fortran 是一种古老的编程语言,最初是在 1957 年创建的。它是为了计算密集型的科学和工程应用而设计的。这种语言随着时间的推移而发展,现在比其早期版本更易于使用。这篇文章是关于如何将 Fortran 代码编译成 WebAssembly,以便在网络浏览器中运行。目前用于 webR 项目的编译方法被描述,这涉及到使用 LLVM 的 flang-new 编译器的一个修补版本。文章还突出了将 Fortran 编译成 WebAssembly 所遇到的挑战以及可用的各种工具和方法。目标是编译一个现代的 Fortran 例程,使其能够接收数值参数,计算 BLAS 和 LAPACK 例程的输出,并返回或打印结果。 文章描述了使用 flang 编译器和 Emscripten 将 Fortran 代码编译成 WebAssembly 的过程。作者演示了如何编译一个 Fortran 子例程并从 JavaScript 中调用它。文章还讨论了需要为 WebAssembly 构建 LLVM Fortran 运行时库的原因,并提供了一个 Makefile 来使这个过程变得更容易。然而,作者在编译针对 wasm32 目标的 Fortran 代码和运行时库时遇到了函数签名不一致的问题。问题是由 LLVM 源代码中的一个假设引起的,即主机和目标具有相同的数据模型。作者建议对 wasm32 目标硬编码长整型大小为 4 字节的一种黑客攻击,并提供了修复问题的补丁。文本以成功编译和运行 Fortran 代码而告终。 该文章讨论了将 Fortran 代码编译成 WebAssembly 的过程,允许在网络应用程序中使用强大的 Fortran 工具和库。它解释了如何使用修补版本的 LLVM Flang 和 Emscripten 构建 BLAS 和 LAPACK 库,并在网络应用程序中提供这些库的示例。作者还表达了希望 flang-new 编译器支持官方 WebAssembly 的愿望。为那些希望在不需要从头开始构建的情况下实验编译 Fortran 代码以供 WebAssembly 使用的读者提供了一个带有修补 LLVM Flang 二进制版本的 Docker 容器。
Post by: georgestagg
Comments:
wch: A little context: this dive into Fortran is part of the excellent work George has been doing on WebR, to get R running in the browser. The R sources contain a fair bit of Fortran code, and I believe WebR originally used f2c to compile the Fortran to C first, before compiling that to wasm.<p>With the patches to LLVM Flang, WebR can be built with a real Fortran compiler.<p>I think George didn't want to say it directly in the blog post, but he has said that he's hoping that Flang would take his patches or implement better ones. That would be a win-win -- these patches wouldn't need to be maintained separately, and since unmodified Flang would be able to compile to wasm, it would benefit other projects out there that use Fortran.<p><a href="https://docs.r-wasm.org/webr/latest/" rel="nofollow">https://docs.r-wasm.org/webr/latest/</a>
wch: 一点上下文:这篇对Fortran的深入研究是George在WebR上所做的出色工作的一部分,目的是让R在浏览器中运行。R源代码包含相当多的Fortran代码,我相信WebR最初使用f2c先将Fortran编译成C,然后再将其编译成wasm<p> 有了LLVM Flang的补丁,WebR就可以用真正的Fortran编译器构建了<p> 我认为乔治没有;我不想直接在博客文章中说,但他说他;他希望Flang能接受他的补丁或实施更好的补丁。这将是双赢的——这些补丁将;不需要单独维护,而且由于未经修改的Flang可以编译到wasm,这将有利于其他使用Fortran的项目<p> <a href=“https://;/;docs.r-wasm.org/ȏ;webr/,最新/”rel=“nofollow”>https:///;docs.r-wasm.org/;webr;最新的</一
amirhirsch: I worked on compiling FORTRAN at Xilinx 20 years ago. The only thing I remember is that the header file for f2c.h contains a definition of barf:<p>/* f2c.h -- Standard Fortran to C header file <i>/<p>/* barf [ba:rf] 2. "He suggested using FORTRAN, and everybody barfed."<p>(<a href="https://www.netlib.org/clapack/f2c.h" rel="nofollow">https://www.netlib.org/clapack/f2c.h</a>)</i>
amirhirsch: 20年前,我在Xilinx从事FORTRAN的编译工作。我唯一记得的是f2c.h的头文件包含barf的定义:<p>/;*f2c.h——标准Fortran到C的头文件<i><p> /;*barf〔ba:rf〕2";他建议用FORTRAN,大家都吐了<p> (<a href=“https://;/;www.netlib.org//,clapack/!f2c.h”rel=“nofollow”>https://;#xx2F;http://www.netlib.org/#xx2F,clapack/;f2c.h</a>)</i>
pklausler: I don't know whether to be impressed or horrified. Maybe both.<p>I would recommend using top-of-tree llvm-project/main sources for building f18; we are a fast-moving project and it would be a waste of time for anybody to debug a problem that has already been fixed, or miss a feature that has already been implemented.
pklausler: 我不;I don’我不知道是感动还是震惊。也许两者都有<p> 我建议使用树顶llvm项目/;建筑f18的主要来源;我们是一个快速发展的项目,任何人调试已经修复的问题或错过已经实现的功能都是浪费时间。
math_dandy: I love the "simplest nontrivial example" approach to exposition. I think I learned a lot from the article because it was grounded in the concrete problem "call a BLAS function from Javascript". Great post!
math_dandy: 我喜欢“;最简单的非平凡的例子“;阐述的方法。我想我从这篇文章中学到了很多,因为它是以具体问题为基础的";从Javascript调用BLAS函数”;。很棒的帖子!
0cf8612b2e1e: I am pretty ignorant of Web Assembly development.<p>Does Web Assembly have anything to offer me today as a consumer? Or is all of this still setting the groundwork for a future where programs are truly portable?<p>I have heard some rumblings that the WA machinery makes it easier to restrict access (network, files) but I do not know if those are theoretical or implemented today.
0cf8612b2e1e: 我对Web Assembly的开发一无所知<p> 作为一名消费者,Web Assembly今天能为我提供什么吗?还是所有这些仍在为程序真正可移植的未来奠定基础<p> 我听到一些传言说,WA机制使限制访问(网络、文件)变得更容易,但我不知道这些是理论上的还是今天实现的。