1 pontos por GN⁺ 2024-04-07 | 1 comentários | Compartilhar no WhatsApp

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

 
GN⁺ 2024-04-07
Comentários do Hacker News
  • George pesquisou sobre Fortran ao participar do projeto WebR para executar R no navegador

    • O código-fonte do R inclui uma quantidade considerável de código Fortran
    • Originalmente, o WebR usava o f2c, que converte Fortran para C, mas com patches no LLVM Flang passou a ser possível compilar com um compilador Fortran de verdade
    • Embora George não tenha mencionado isso diretamente no post do blog, espera-se que o Flang aceite os patches dele ou implemente algo melhor
    • Se o Flang sem modificações puder compilar para wasm, sem a necessidade de manter esses patches separadamente, isso também ajudará outros projetos que usam Fortran
  • Relato de experiência trabalhando na compilação de FORTRAN na Xilinx há 20 anos

    • O que ficou na memória foi que o arquivo de cabeçalho f2c.h incluía uma definição chamada barf
  • Recomendação para compilar o f18 usando o código-fonte mais recente do projeto LLVM

    • Foi mencionado que o projeto LLVM evolui rapidamente, e depurar problemas já resolvidos ou deixar passar funcionalidades já implementadas é perda de tempo
  • Elogio ao estilo de explicação baseado na abordagem do "exemplo não trivial mais simples"

    • Disseram que foi possível aprender bastante a partir do problema concreto de "chamar funções BLAS a partir de JavaScript"
  • Comentário sobre falta de conhecimento em desenvolvimento com WebAssembly

    • A pessoa se pergunta se o WebAssembly hoje oferece algo útil ao consumidor, ou se tudo isso está apenas preparando a base para o futuro de programas realmente portáveis
    • Também ouviu dizer que o WebAssembly ajuda a restringir rede e acesso a arquivos, mas não tem certeza se isso é algo teórico ou realmente implementado
  • Pergunta sobre a existência de um ecossistema pronto para "produção" para álgebra linear em JavaScript

    • Ao pesquisar no Google, a pessoa frequentemente encontra bibliotecas antigas portadas para JavaScript, mas se pergunta se está deixando passar algo
  • Opinião de que gostaria de ter guardado um código Fortran 78 escrito em 1981/82 para ver se conseguiria executá-lo hoje

    • Há também menção a um formatador de código-fonte da linguagem de programação Jovial, para o qual na época não havia alternativa além de usar Fortran
  • Comentário de que é estranho não haver mais menções ao LFortran

    • O LFortran oferece exemplos de WASM excelentes e impressionantes online
  • Informação sobre o uso de Fortran em .NET e Java

    • Foi indicado, por meio de links relacionados, que o Fortran pode ser usado em .NET e Java
  • Compartilhamento de experiência ao compilar o TensorFlow para o navegador

    • Como o TensorFlow usava Eigen, a pessoa ficou grata por ter evitado muito trabalho extra que teria sido necessário ao usar bibliotecas matemáticas populares escritas em Fortran, como BLAS e Lapack