Topik ini memandu pembentukan program COBOL pertama dari berkas sumber sampai biner yang dapat dieksekusi. Berkas halo.cbl ditulis, dikompilasi sekaligus ditautkan dengan cobc -x, lalu dieksekusi dari terminal. Bendera -o untuk menamai biner juga dicoba, sehingga seluruh siklus sunting, kompilasi, dan eksekusi dapat diulang untuk program apa pun setelahnya.
Menulis halo.cbl#
Program COBOL tersimpan sebagai berkas teks biasa tanpa format khusus. Konvensi ekstensi .cbl dipakai GnuCOBOL untuk berkas sumber, sedangkan .cob juga umum dijumpai pada kode warisan. Berkas halo.cbl berikut adalah program utuh yang akan menjadi biner pertama.
IDENTIFICATION DIVISION.
PROGRAM-ID. HALO.
PROCEDURE DIVISION.
DISPLAY "Halo, dunia.".
STOP RUN.Halo, dunia.Struktur berkasnya memakai dua divisi yang keduanya wajib. Baris PROGRAM-ID. menamai program HALO, lalu divisi PROCEDURE memuat pernyataan DISPLAY dan STOP RUN yang masing-masing ditutup dengan titik. Verb DISPLAY mengirimkan literal Halo, dunia. ke aliran keluaran standar dan menambahkan baris baru, sedangkan STOP RUN mengembalikan kendali ke shell. Titik menutup kalimat COBOL, sehingga kedua pernyataan pada berkas ini masing-masing menjadi satu kalimat. Kata kunci boleh ditulis dalam huruf besar maupun kecil karena COBOL tidak peka huruf, tetapi huruf besar pada kata kunci menjadi konvensi yang membuat struktur program terbaca sekali pandang.
Tata letak baris mengikuti format tetap yang diterapkan cobc secara bawaan. Judul divisi ditulis mulai kolom 8 pada Area A, sedangkan pernyataan ditulis mulai kolom 12 pada Area B dengan indentasi sebelas spasi. Satu pernyataan sengaja ditempatkan pada satu baris agar kesalahan mudah ditunjuk, karena pesan error cobc selalu menyebut nomor baris. Urutan pernyataan pada teks adalah urutan eksekusinya, sehingga program kecil seperti ini tidak memerlukan paragraf bernama sama sekali.
Simpan berkas pada direktori kerja yang juga menjadi tempat perintah kompilasi dijalankan, misalnya direktori latihan khusus. Seluruh contoh topik ini bekerja pada direktori tempat berkas sumber disimpan, sehingga biner hasil kompilasi mudah ditemukan. Kebiasaan satu program satu direktori juga mencegah biner yang berbeda saling menimpa.
Mengompilasi dan menautkan dengan cobc -x#
cobc menerjemahkan berkas sumber COBOL menjadi kode mesin yang dapat dieksekusi prosesor. Untuk mencapainya, cobc mengonversi COBOL ke C terlebih dahulu, lalu memanggil kompilator C seperti gcc untuk menghasilkan kode mesin. Bendera -x memerintahkan dua langkah sekaligus, yaitu kompilasi dan penautan (link), sehingga hasilnya berupa berkas biner yang dapat dijalankan langsung. Tanpa -x, cobc menghasilkan modul berakhiran .so yang dimaksudkan untuk dimuat program lain melalui CALL, bukan untuk dijalankan sendiri.
# kompilasi dan tautkan halo.cbl menjadi biner
cobc -x halo.cblKompilasi yang berhasil tidak menampilkan pesan apa pun dan meninggalkan biner bernama halo di direktori kerja. Nama biner mengikuti nama berkas sumber tanpa ekstensinya, bukan nilai PROGRAM-ID. Jalankan ./halo, dan keluaran yang persis sama dengan blok Keluaran di atas akan tampil. Apabila sumber disunting, kompilasi ulang selalu diperlukan karena biner tidak mengikuti perubahan berkas sumber secara otomatis.
Penautan menyatukan hasil kompilasi dengan pustaka yang dibutuhkan. cobc mengerjakan berkas sumber satu per satu, lalu penaut menggabungkan hasilnya bersama pustaka runtime GnuCOBOL menjadi satu biner utuh. Pada program yang terdiri atas satu berkas seperti halo.cbl, kedua langkah itu berlangsung dalam satu perintah tanpa menyisakan berkas antara di direktori kerja.
Pembedaan waktu kompilasi dan waktu eksekusi menentukan di mana pencarian penyebab masalah dimulai. Kesalahan sintaks ditemukan pada waktu kompilasi dan pesannya menyebut nomor baris sumber, sedangkan perilaku yang tidak diharapkan akibat isi data baru tampak pada waktu eksekusi. Biner hasil -x juga bergantung pada pustaka runtime GnuCOBOL yang menyediakan verb seperti DISPLAY, sehingga program tersebut dapat dieksekusi pada mesin lain yang memasang pustaka yang sama.
Menamai biner dengan bendera -o#
Bendera -o memberi nama berkas hasil kompilasi tanpa menyentuh berkas sumbernya. Tanpa bendera ini, cobc menamai biner dari nama berkas sumbernya, sehingga dua berkas sumber yang bernama sama dan dikompilasi pada direktori yang sama akan menghasilkan biner yang saling menimpa. Nama yang diberikan melalui -o mengikuti kebiasaan penamaan berkas pada shell, yaitu huruf kecil, angka, dan tanda hubung.
# kompilasi dengan nama biner yang ditentukan sendiri
cobc -x -o salam halo.cblPerintah tersebut menghasilkan biner bernama salam, dan eksekusi ./salam menampilkan Halo, dunia. sekali lagi karena biner ini dibangun dari halo.cbl yang sama. Bendera ini berguna apabila nama biner perlu berbeda dari nama berkas sumber, misalnya ketika beberapa berkas sumber ditautkan menjadi satu program. Untuk kasus itu, cobc menerima beberapa berkas sumber dalam satu perintah, dan -o menamai hasil akhirnya, sementara setiap berkas sumber tetap dikompilasi satu per satu.
Kesalahan umum#
- Biner dieksekusi padahal kompilasi belum dijalankan atau telah gagal, sehingga shell menampilkan pesan bahwa berkas tidak ditemukan. Baca pesan error cobc lebih dahulu, perbaiki sumbernya, lalu kompilasi ulang sebelum mengeksekusi.
- Bendera
-xterlupa, sehingga cobc hanya menghasilkan modul.sodan perintah./namatidak menemukan biner apa pun. Tambahkan-xpada setiap program yang akan dieksekusi langsung. - Sumber disunting tetapi tidak dikompilasi ulang, sehingga biner lama masih berperilaku seperti sebelum suntingan. Jadikan kompilasi ulang sebagai bagian tetap dari setiap suntingan.
- Biner dijalankan dengan
halotanpa awalan./, sehingga shell mencarinya padaPATHdan tidak menemukannya. Awali dengan./karena biner berada di direktori kerja, bukan di direktori yang terdaftar padaPATH.
Ringkasan#
- Berkas
.cbladalah teks biasa, dan dua divisi wajib saja sudah membentuk program utuh. cobc -xmengompilasi sekaligus menautkan menjadi biner, sedangkan cobc tanpa-xmenghasilkan modul.sountukCALL.- Nama biner default mengikuti nama berkas sumber, dan bendera
-omenggantinya. - Siklus kerjanya selalu sunting, kompilasi ulang, lalu jalankan
./nama.
Referensi#
- GnuCOBOL — Free Software Foundation
— Situs proyek GnuCOBOL yang mendokumentasikan cobc beserta bendera
-xdan-o. - IBM Enterprise COBOL for z/OS documentation — IBM — Dokumentasi resmi semantik pernyataan COBOL seperti DISPLAY dan STOP RUN.