Standar dalam konteksnya

Perjalanan standar Fortran 77 hingga 2023 dan alasan kode lama tetap bertahan di lingkungan produksi.

Daftar isi

Standar bahasa menentukan bentuk kode Fortran yang sah dan makna di baliknya, dan standar itu direvisi secara berkala tanpa menghapus kode lama. Topik ini membahas peran standar dan dua badan yang menjaganya, merangkum perjalanan dari FORTRAN 77 hingga Fortran 2023, menjelaskan alasan kode warisan tetap berjalan di lingkungan produksi, serta menyandingkan bentuk tetap dengan bentuk bebas. Dua program kecil dari era yang berbeda dikompilasi dan dijalankan pada gfortran yang sama agar kesinambungan bahasa dari era lama ke era baru terlihat.

Peran standar bahasa#

Standar Fortran adalah dokumen yang menetapkan sintaks dan semantik bahasa, diterbitkan oleh ISO dengan nomor ISO/IEC 1539. Dokumen ini disusun oleh komite yang terdiri atas perwakilan industri, laboratorium, dan akademisi. Badan standar internasionalnya adalah WG5 yang memutuskan arah serta jadwal revisi, sedangkan komite J3 di Amerika Serikat menjadi penyusun teknis utama standar tersebut. Rancangan revisi, dokumen kerja, dan arsip revisi terdahulu dapat diakses secara terbuka dari situs kedua badan tersebut.

Peran standar dalam praktiknya adalah menjamin portabilitas, yakni kemampuan kode berjalan pada kompiler dan mesin yang berbeda. Kode yang patuh pada standar dapat dikompilasi oleh kompiler mana pun yang mengimplementasikan revisi yang sama, dari gfortran hingga kompiler komersial pada superkomputer. Standar tidak menetapkan pustaka numerik seperti BLAS dan LAPACK, sehingga ekosistem pustaka tumbuh terpisah di luar dokumen itu. Batas antara standar bahasa dan pustaka eksternal penting dipahami, karena kepatuhan pada standar dan ketersediaan pustaka adalah dua hal yang berbeda. Setiap revisi standar menjadi tonggak generasi bahasa, dan nama revisinya digunakan untuk menyebut kode yang ditulis pada era tersebut.

Perjalanan dari 77 hingga 2023#

Setiap revisi standar menandai babak kemampuan bahasa, dan dua perubahan yang paling terlihat menyangkut penulisan nama serta tata letak kode. Hingga revisi 1977 nama bahasa ditulis FORTRAN dalam huruf kapital, sedangkan sejak revisi 1990 ditulis Fortran. Tata letak kode berubah dari bentuk tetap (fixed form) yang mengikat penulisan pada posisi kolom tertentu menjadi bentuk bebas (free form) yang memperlakukan kode sebagai teks biasa. Tabel berikut merangkum ciri khas setiap revisi.

StandarCiri utama
FORTRAN 77Bentuk tetap, blok IF-THEN-ELSE, tipe CHARACTER, rekursi belum masuk standar
Fortran 90Bentuk bebas, modul, operasi array utuh, rekursi, atribut kind
Fortran 95Prosedur pure dan elemental, penyempurnaan atas 90
Fortran 2003Pemrograman berorientasi objek, interoperabilitas dengan C, akses IO stream
Fortran 2008Coarray, do concurrent, submodul, konstruksi BLOCK
Fortran 2018Penyempurnaan coarray dan interoperabilitas C yang diperluas
Fortran 2023Penyempurnaan bertahap atas 2018, diterbitkan pada 2023

Tabel tersebut memuat ciri khas setiap revisi, bukan daftar lengkapnya. Tiga tonggak yang paling berpengaruh pada kode yang dijumpai sekarang adalah Fortran 90 dengan array utuh dan modul, Fortran 2003 dengan pemrograman berorientasi objek dan interoperabilitas C, serta Fortran 2008 dengan paralelisme coarray dan do concurrent. Kode produksi yang masih berjalan umumnya berasal dari rentang FORTRAN 77 hingga Fortran 2003, sedangkan kode baru direkomendasikan mengikuti gaya Fortran 2008 dan sesudahnya. Perubahan antar revisi umumnya bersifat aditif, yaitu fitur baru ditambahkan tanpa menghapus fitur lama, dan sejumlah fitur usang dihapus secara bertahap setelah lama ditandai obsolescent, yakni diumumkan akan dihapus. Gaya modern menjadi dasar seluruh modul pada jalur ini.

Mengapa kode warisan tetap bertahan#

Kode warisan tetap berjalan di lingkungan produksi karena tiga alasan yang saling menguatkan. Pertama, kebenaran numeriknya sudah teruji selama beberapa dekade pada kasus nyata, mulai dari prediksi cuaca hingga simulasi reaktor. Kedua, biaya dan risiko penulisan ulang jauh melampaui manfaatnya, karena hasil numerik yang bergeser sedikit saja dapat memicu kecurigaan besar pada program ilmiah. Terakhir, kompiler modern tetap menerima bentuk lama, sehingga kode dari era 1980-an umumnya masih dapat dikompilasi tanpa perubahan berarti.

Membaca kode warisan menuntut kemampuan mengenali ciri khas era lamanya. Variabel tanpa deklarasi memperoleh tipe secara otomatis dari huruf awal namanya melalui aturan implicit typing, sehingga salah ketik dapat menciptakan variabel baru secara diam-diam. Blok COMMON berbagi area memori antar unit program, dan alur kendali lama banyak bergantung pada pernyataan lompatan GOTO. Ciri-ciri tersebut menjadi bekal saat membaca kode lama, sedangkan kode baru pada jalur ini mengikuti disiplin deklarasi eksplisit.

Bentuk tetap dan bentuk bebas#

Bentuk tetap adalah tata letak era kartu berlubang (punched card) yang masih diterima gfortran hingga sekarang. Aturannya ketat, yaitu pernyataan ditulis mulai kolom tujuh dan hanya sampai kolom 72, kelanjutan baris ditandai pada kolom enam, dan spasi diabaikan. Ekstensi .f menandai berkas bentuk tetap, sedangkan .f90 menandai bentuk bebas. Bentuk bebas memperlakukan kode sebagai teks biasa dengan indentasi bebas dan panjang baris yang tidak dibatasi 72 kolom.

Dua program berikut masing-masing mencetak pesan yang sejenis dalam bentuk tetap dan bentuk bebas, lalu keduanya dikompilasi dan dijalankan pada gfortran yang sama.

fortran halo-lama.f
      PROGRAM HALO
      WRITE (*,*) 'Halo dari bentuk fixed-form'
      END
bash
# mengompilasi berkas bentuk tetap dengan gfortran
gfortran halo-lama.f -o halo-lama
# menjalankan program hasil kompilasi
./halo-lama
text Keluaran
 Halo dari bentuk fixed-form

Keluaran tersebut dihasilkan tanpa satu pun perubahan pada berkas sumbernya, padahal gaya tulisannya berasal dari era 1970-an. Kompilasi berhasil karena gfortran tetap mengenali bentuk tetap sebagai bentuk sumber yang sah. Kode berikut menyandingkan pesan yang sama dalam bentuk bebas.

fortran halo-modern.f90
program halo_modern
    implicit none
    print '(A)', "Halo dari bentuk bebas modern"
end program halo_modern
bash
# mengompilasi berkas bentuk bebas
gfortran halo-modern.f90 -o halo-modern
# menjalankan program hasil kompilasi
./halo-modern
text Keluaran
Halo dari bentuk bebas modern

Kedua berkas menghasilkan keluaran yang setara dari kompiler yang sama, dan perbedaan keduanya terletak pada tata letak serta ekstensi berkasnya. Huruf kapital pada contoh lama adalah kebiasaan era tersebut, bukan kewajiban bentuk tetap. Untuk kode baru, bentuk bebas menjadi pilihan baku karena seluruh fitur modern dirancang di atasnya. Aturan kolom pada bentuk tetap tetap perlu dipahami sebagai bekal saat membaca kode lama.

Ringkasan#

  • Standar Fortran diterbitkan oleh ISO melalui WG5 bersama J3, dengan revisi terbaru pada 2023.
  • Revisi 90, 2003, dan 2008 merupakan tonggak utama, masing-masing membawa array utuh, pemrograman berorientasi objek, dan paralelisme coarray.
  • Kode warisan bertahan karena kebenaran numeriknya teruji, penulisan ulangnya mahal, dan gfortran tetap mengompilasi bentuk tetap.
  • Ciri warisan yang perlu dikenali saat membaca kode lama meliputi implicit typing, blok COMMON, dan GOTO.

Referensi#