A combinação de Fortran e WebAssembly
- Fortran é uma linguagem de programação antiga que surgiu pela primeira vez em 1957, sendo mais antiga que a linguagem C, a CPU Intel 4004 e os mainframes IBM System/360.
- Fortran tem sido usado em aplicações científicas e de engenharia para tarefas intensivas em cálculo, e alguns o consideram mais eficiente que C em operações numéricas.
- Este post de blog explica como compilar código Fortran existente para WebAssembly, permitindo executá-lo em um navegador web.
Qual é o problema?
- Existem várias formas de compilar Fortran para WebAssembly, mas nenhuma oferece suporte completo a todos os recursos.
- Cada método tem desvantagens e não é uma solução simples de plug and play.
Resumo dos compiladores
- Houve algumas mudanças nos compiladores Fortran baseados em LLVM.
- O utilitário f2c converte Fortran 77 em código C, mas não é compatível com código Fortran moderno.
- O compilador LFortran passou a oferecer suporte a muitos recursos, mas ainda pode apresentar problemas em alguns projetos.
- O Dragonegg é um plugin do GCC que gera LLVM IR, mas exige versões antigas de GCC e LLVM.
- O Classic Flang não oferece suporte a saída de 32 bits, e o LLVM Flang atualmente não gera saída WebAssembly por padrão.
Compilando e usando WebAssembly com LLVM Flang
- É necessário modificar o código-fonte do LLVM Flang para implementar o alvo WebAssembly.
- É possível aproveitar a arquitetura modular do LLVM para usar o frontend do Flang e o backend de WebAssembly.
Chamando sub-rotinas Fortran a partir de C
- O artigo revisa como compilar e fazer o link de uma sub-rotina Fortran como parte de um programa em C.
De volta ao LLVM Flang
- É possível compilar sub-rotinas Fortran usando o compilador LLVM Flang, mas como o alvo WebAssembly ainda não foi implementado, é preciso aplicar patches ao código-fonte.
Chamando rotinas Fortran a partir de JavaScript
- É possível usar o Emscripten para fazer o link de objetos Fortran e chamá-los diretamente de JavaScript.
A biblioteca de runtime do Fortran: a jornada até "Hello, World!"
- O texto explica os problemas que surgem ao tentar compilar um programa "Hello, World!" em Fortran.
- É necessário compilar a biblioteca de runtime do LLVM Fortran para WebAssembly.
Opinião do GN⁺
- Este artigo mostra uma tentativa de integrar uma linguagem tradicional como Fortran às tecnologias web modernas. Essa abordagem pode ser útil para levar bibliotecas numéricas já consolidadas para a web.
- O processo de compilar Fortran para WebAssembly ilustra bem os desafios de portar bases de código existentes para novas plataformas. Em especial, os problemas relacionados à compilação cruzada são um fator importante a considerar também ao portar para outras linguagens ou plataformas.
- Embora a tecnologia seja interessante, ainda há limites práticos para executar na web tarefas de cálculo numérico que exigem alto desempenho. O WebAssembly pode ainda não oferecer o mesmo nível de performance de aplicações nativas tradicionais.
- O desenvolvimento do LLVM Flang é bastante ativo, e esse esforço tende a ter um impacto positivo na comunidade Fortran. No entanto, os vários problemas mencionados no artigo indicam que ainda há desafios a resolver.
- Este artigo oferece informações úteis para desenvolvedores que desejam integrar Fortran com tecnologias web, especialmente para quem considera criar ferramentas baseadas na web nas áreas de análise numérica ou computação científica.
1 comentários
Comentários do Hacker News
George pesquisou sobre Fortran ao participar do projeto WebR para executar R no navegador
f2c, que converte Fortran para C, mas com patches no LLVM Flang passou a ser possível compilar com um compilador Fortran de verdadeRelato de experiência trabalhando na compilação de FORTRAN na Xilinx há 20 anos
f2c.hincluía uma definição chamadabarfRecomendação para compilar o
f18usando o código-fonte mais recente do projeto LLVMElogio ao estilo de explicação baseado na abordagem do "exemplo não trivial mais simples"
Comentário sobre falta de conhecimento em desenvolvimento com WebAssembly
Pergunta sobre a existência de um ecossistema pronto para "produção" para álgebra linear em JavaScript
Opinião de que gostaria de ter guardado um código Fortran 78 escrito em 1981/82 para ver se conseguiria executá-lo hoje
Comentário de que é estranho não haver mais menções ao LFortran
Informação sobre o uso de Fortran em .NET e Java
Compartilhamento de experiência ao compilar o TensorFlow para o navegador