1 poin oleh GN⁺ 2024-04-07 | 1 komentar | Bagikan ke WhatsApp

Menggabungkan Fortran dan WebAssembly

  • Fortran adalah bahasa pemrograman lama yang pertama kali muncul pada tahun 1957, lebih tua daripada bahasa C, CPU Intel 4004, dan komputer mainframe IBM System/360.
  • Fortran telah digunakan untuk pekerjaan yang intensif komputasi dalam aplikasi sains dan teknik, dan sebagian orang menganggapnya lebih efisien daripada C untuk operasi numerik.
  • Postingan blog ini menjelaskan cara mengompilasi kode Fortran yang sudah ada ke WebAssembly agar dapat dijalankan di browser web.

Apa masalahnya?

  • Ada berbagai cara untuk mengompilasi Fortran ke WebAssembly, tetapi tidak ada metode yang mendukung semua fitur secara sempurna.
  • Setiap metode memiliki kekurangannya sendiri, dan ini bukan solusi plug-and-play yang sederhana.

Ringkasan kompilator

  • Ada beberapa perubahan pada kompilator Fortran berbasis LLVM.
  • Utilitas f2c mengubah Fortran 77 menjadi kode C, tetapi tidak kompatibel dengan kode Fortran modern.
  • Kompilator LFortran kini mendukung banyak fitur, tetapi masih dapat menimbulkan masalah pada beberapa proyek.
  • Dragonegg adalah plugin untuk GCC yang menghasilkan LLVM IR, tetapi memerlukan versi GCC dan LLVM yang lama.
  • Classic Flang tidak mendukung output 32-bit, dan LLVM Flang saat ini belum menghasilkan output WebAssembly secara bawaan.

Membangun dan menggunakan WebAssembly dengan LLVM Flang

  • Perlu memodifikasi source code LLVM Flang untuk mengimplementasikan target WebAssembly.
  • Dengan memanfaatkan desain modular LLVM, frontend Flang dan backend WebAssembly dapat digunakan.

Memanggil subrutin Fortran dari C

  • Mengulas cara mengompilasi dan menautkan subrutin Fortran sebagai bagian dari program C.

Kembali ke LLVM Flang

  • Kompilator LLVM Flang dapat digunakan untuk mengompilasi subrutin Fortran, tetapi karena target WebAssembly belum diimplementasikan, patch perlu diterapkan pada source code.

Memanggil rutin Fortran dari JavaScript

  • Dengan menggunakan Emscripten, objek Fortran dapat ditautkan dan dipanggil langsung dari JavaScript.

Pustaka runtime Fortran: perjalanan menuju "Hello, World!"

  • Menjelaskan masalah yang muncul saat mencoba membangun program "Hello, World!" dengan Fortran.
  • Pustaka runtime LLVM Fortran harus dikompilasi untuk WebAssembly.

Opini GN⁺

  • Artikel ini menunjukkan upaya untuk mengintegrasikan bahasa tradisional seperti Fortran dengan teknologi web modern. Pendekatan seperti ini dapat berguna untuk membawa pustaka komputasi numerik lama yang sudah teruji ke web.
  • Proses mengompilasi Fortran ke WebAssembly memperlihatkan dengan jelas tantangan dalam memindahkan codebase lama ke platform baru. Khususnya, masalah yang terkait dengan cross-compiling merupakan faktor penting yang juga perlu dipertimbangkan saat memindahkan ke bahasa atau platform lain.
  • Teknologi ini memang menarik, tetapi menjalankan pekerjaan komputasi numerik berperforma tinggi di web masih memiliki keterbatasan praktis. WebAssembly mungkin masih belum dapat memberikan performa setara aplikasi native tradisional.
  • Pengembangan LLVM Flang sangat aktif, dan upaya pengembangan ini diharapkan akan memberikan dampak positif bagi komunitas Fortran. Namun, berbagai masalah yang disebutkan dalam artikel ini menunjukkan masih ada tantangan yang perlu diselesaikan.
  • Artikel ini memberikan informasi yang berguna bagi para pengembang yang ingin mengintegrasikan Fortran dengan teknologi web, khususnya bagi mereka yang mempertimbangkan pengembangan alat berbasis web di bidang analisis numerik atau komputasi ilmiah.

1 komentar

 
GN⁺ 2024-04-07
Opini Hacker News
  • George meneliti Fortran saat bergabung dengan proyek WebR untuk menjalankan R di browser web

    • Kode sumber R mencakup cukup banyak kode Fortran
    • Awalnya WebR menggunakan f2c, yang mengubah Fortran menjadi C, tetapi lewat patch pada LLVM Flang kini bisa dibangun dengan kompiler Fortran sungguhan
    • George tidak menyebutkannya secara langsung di postingan blog, tetapi berharap Flang menerima patch tersebut atau mengimplementasikan patch yang lebih baik
    • Jika Flang yang belum dimodifikasi nantinya bisa dikompilasi ke wasm tanpa perlu memelihara patch semacam ini secara terpisah, itu juga akan membantu proyek lain yang menggunakan Fortran
  • Pengalaman pernah mengerjakan kompiler FORTRAN di Xilinx 20 tahun lalu

    • Hal yang paling diingat adalah file header f2c.h berisi definisi bernama barf
  • Rekomendasi untuk membangun f18 menggunakan source terbaru dari proyek LLVM

    • Disebutkan bahwa proyek LLVM bergerak cepat, jadi membuang waktu untuk men-debug masalah yang sebenarnya sudah diperbaiki atau melewatkan fitur yang sebenarnya sudah ada adalah hal yang sia-sia
  • Pujian untuk cara penjelasan lewat pendekatan "contoh paling sederhana yang tidak sepele"

    • Disebutkan bahwa banyak hal bisa dipelajari dari masalah yang spesifik, yaitu "memanggil fungsi BLAS dari JavaScript"
  • Menyebut kurangnya pengetahuan tentang pengembangan WebAssembly

    • Bertanya-tanya apakah WebAssembly saat ini benar-benar menawarkan sesuatu untuk pengguna akhir, atau apakah semuanya lebih merupakan fondasi bagi masa depan program yang benar-benar portabel
    • Pernah mendengar bahwa WebAssembly membantu membatasi jaringan dan akses file, tetapi tidak yakin apakah itu sekadar teori atau sudah benar-benar diterapkan
  • Pertanyaan apakah ada ekosistem yang siap "produksi" untuk aljabar linear di JavaScript

    • Saat mencari di Google sering menemukan library lama yang di-port ke JavaScript, tetapi bertanya-tanya apakah ada sesuatu yang terlewat
  • Pendapat bahwa andai kode Fortran 78 yang ditulis pada 1981/82 masih disimpan, akan menarik untuk melihat apakah sekarang kode itu masih bisa dijalankan

    • Menyebut formatter kode sumber untuk bahasa pemrograman Jovial, yang saat itu mau tak mau harus menggunakan Fortran
  • Menyebut aneh karena tidak ada lebih banyak pembahasan tentang LFortran

    • LFortran menyediakan contoh WASM online yang sangat bagus dan mengesankan
  • Memberikan informasi tentang penggunaan Fortran di .NET dan Java

    • Menunjukkan melalui tautan terkait bahwa Fortran dapat digunakan di .NET dan Java
  • Berbagi pengalaman mengompilasi TensorFlow untuk browser

    • Bersyukur karena TensorFlow menggunakan Eigen, sehingga terhindar dari jauh lebih banyak pekerjaan yang akan diperlukan jika harus memakai library matematika populer yang ditulis dalam Fortran seperti BLAS dan Lapack