Bahasa
komputer adalah merupakan suatu set pemrograman yang digunakan untuk membuat
suatu program komputer. Bahasa komputer biasa dikenal dengan nama bahasa
pemrograman. Program komputer atau software sendiri adalah suatu set instruksi
yang harus dijalankan oleh komputer pada saat komputer dihidupkan atau ketika
diperintahkan oleh pengguna komputer. Bahasa pemograman menggunakan kata-kata
unik yang menjadi kode untuk menjalankan perintah tertentu pada komputer.
Contoh bahasa pemrograman antara lain adalah Pascal, Fortran, Clipper, dBase, Delphi, Basic, Cobol, C++, C#,
Java dan lain-lain.
Sebuah
CPU komputer, dalam hal ini prosesor memiliki sejumlah perintah terbatas dan
dikenal dengan nama kode mesin. Kode ini adalah bahasa yang digunakan untuk
mengkomunikasikan data dalam komputer. CPU dalam komputer hanya mengenal bahasa
ini, tidak dengan bahasa lainnya. Semua bahasa pemrograman harus diubah menjadi
kode mesin terlebih dahulu supaya CPU dapat mengolah dan menjalankan perintah
yang diberikan oleh program yang dibuat.
Jenis-jenis bahasa computer
Bahasa
komputer dapat dikelompokkan dalam tiga kelompok besar berdasarkan jenisnya,
yakni bahasa mesin (machine language), assembly language dan high level
language. Mari kita bahas satu persatu sebagai berikut:
- Machine language adalah seperangkat perintah yang dinyatakan dalam bentuk bilangan biner (hanya angka 0 dan 1) yang berfungsi untuk memberikan data dan instruksi bagaimana mengolah data kepada CPU.
Bahasa mesin atau kode
mesin merupakan seperangkat instruksi serta data yang dapat dieksekusi
secara langsung oleh prosesor komputer. Kode mesin merupakan tingkatan yang
paling rendah dari bahasa pemrograman,
dan biasanya digunakan sebagai tujuan kompilasi oleh kompiler pada
bahasa-bahasa pemrograman lain dalam tingkatan yang lebih tinggi. Penerjemahan
kode pada bahasa pemrograman interpretatif atau bahasa skrip umumnya tidak
termasuk dalam kriteria tersebut karena umumnya bahasa skrip menerjemahkan kode
sumber menjadi P-Code, kode penjembatan antara kode sumber dan kode mesin.
Meski demikian, umumnya bahasa skrip populer yang ada saat ini telah
menambahkan kompiler JIT (Just In Time) integratif yang secara hibrida
mengkompilasi instruksi-instruksi P-Code yang paling sering dieksekusi menjadi
kode mesin. Setiap prosesor ataupun keluarga prosesor memiliki sejumlah set
instruksi kode mesin. Instruksi ini merupakan pola bilangan biner yang
merepresentasikan perintah-perintah yang dikenali oleh prosesor tersebut.
Karenanya sejumlah prosesor spesifik memiliki sejumlah set instruksi spesifik
yang hanya dikenali pada prosesor tersebut, sebagai contoh fitur MMX dalam
keluarga prosesor X86, atau 3DNow dalam keluarga prosesor AMD.
Pola instruksi ini biasanya
merupakan serialisasi dari sejumlah bilangan biner yang digabungkan hingga
membentuk opcode untuk melakukan pemindahan (MOV), lompatan (JMP),
operasi aritmatika, penyimpanan (PUSH), ataupun pengambilan nilai (POP), dan
lain-lain. Contoh serialisasi tersebut misalnya; kode biner atas instruksi
pemindahan adalah 10110 diikuti dengan 3-bit pengenal atas register yang akan
digunakan, sedangkan pengenal atas register prosesor AL adalah 000. Dengan
demikian perintah untuk memindahkan sebuah nilai ke dalam register prosesor AL
adalah 10110000, atau
B0 dalam bilangan
heksadesimal.- Assembly Language adalah bahasa komputer tingkat rendah yang memiliki banyak kode yang membantu memori untuk “mengingat data (informasi). Assembly language juga mengandung seperangkat simbolis yang berhubungan dengan perintah tertentu pada bahasa mesin.
Bahasa rakitan
mengimplementasikan representasi atas kode mesin, dalam bentuk simbol-simbol
yang secara relatif lebih dapat dipahami oleh manusia. Berbeda halnya dengan bahasa-bahasa
tingkat tinggi yang berlaku umum, bahasa rakitan biasanya mendukung secara
spesifik untuk suatu ataupun beberapa jenis arsitektur komputer tertentu.
Dengan demikian, portabilitas bahasa rakitan tidak dapat menandingi
bahasa-bahasa lainnya yang merupakan bahasa pemrograman tingkat tinggi. Namun,
bahasa rakitan memungkinkan programmer memanfaatkan secara penuh kemampuan
suatu perangkat keras tertentu yang biasanya tidak dapat ataupun terbatas bila
dibuat dengan menggunakan bahasa pemrograman tingkat tinggi.
Pada bahasa rakitan, programmer
umumnya menggunakan sebuah program utilitas yang disebut sebagai perakit (bahasa Inggris: assembler)
yang digunakan untuk menerjemahkan kode dalam bahasa rakitan tersebut ke dalam
kode mesin untuk perangkat keras tertentu. Sebuah perintah dalam bahasa rakitan
biasanya akan diterjemahkan menjadi sebuah instruksi mnemonic dalam kode
mesin, berbeda halnya dengan kompiler pada bahasa pemrograman tingkat tinggi
yang menerjemahkan sebuah perintah menjadi sejumlah instruksi dalam kode mesin.
Beberapa perangkat lunak bahasa
rakitan terkenal biasanya menyediakan tambahan fitur untuk memfasilitasi proses
pengembangan program, mengontrol proses perakitan, dan alat bantu pengawakutuan
(debugging). Ada beberapa dasar alasan menggunakan bahasa rakitan
dilihat dari sudut pandang penggunaannya:
·
Bahasa
rakitan dibandingkan dengan bahasa mesin,
bahasa rakitan merupakan representasi atas bahasa mesin yang dirancang agar
lebih mudah dipahami oleh manusia. Dengan menggunakan bahasa rakitan, seorang
programmer dapat lebih mudah mengingat instruksi-instruksi dengan menggunakan
simbol yang lebih dimengerti dibandingkan bila menggunakan simbol mnemonic
kode mesin secara langsung. Demikian halnya pula dengan mekanisme lompatan yang
umum terdapat dalam bahasa mesin yang biasanya menggunakan alamat memori,
programmer dapat lebih mudah menggunakan fasilitas pelabelan yang terdapat pada
bahasa rakitan dibandingkan menggunakan alamat memori tertentu dalam kode mnemonic.
·
Bahasa
rakitan dibandingkan dengan bahasa tingkat tinggi, bahasa rakitan memungkinkan programmer untuk mengontrol serta
memanfaatkan secara penuh kapabilitas yang terdapat atas suatu perangkat keras,
berbeda halnya dengan bahasa pemrograman tingkat tinggi yang memiliki banyak
keterbatasan dalam pemanfaatan secara penuh suatu perangkat keras. Bahasa
rakitan menjanjikan tingkat unjuk kerja yang maksimum karena sifatnya yang
menerjemahkan secara langsung instruksi rakitan menjadi instruksi mesin,
berbeda halnya dengan bahasa pemrograman tingkat tinggi yang biasanya
menerjemahkan sebuah instruksi menjadi sejumlah kode mesin.
Representasi
kode mesin
Bahasa rakitan menerjemahkan sebuah instruksi rakitan
menjadi instruksi mesin, umumnya mekanisme penerjemahan ini bersifat 1-1,
karenanya dapat disebutkan pula bahwa setiap instruksi dalam bahasa rakitan
merupakan representasi dari instruksi kode mesin. Sebagai contoh, berikut
adalah instruksi yang digunakan pada prosesor x86 untuk memindahkan nilai 97
sebesar 8-bit ke dalam register prosesor AL. Kode biner atas instruksi
pemindahan adalah 10110 diikuti dengan 3-bit pengenal atas register yang akan
digunakan. Pengenal atas register AL dalam hal ini adalah 000. Kemudian,
nilai 97 dalam kode biner adalah 01100001, sehingga kode mesin yang digunakan
untuk memindahkannya adalah sebagai berikut:
10110000
01100001
Kode biner ini dapat diubah agar lebih mudah dibaca manusia
dengan mengkonversikannya dalam bilangan heksadesimal sebagai berikut:
B0
61
Pada instruksi diatas, B0 berarti: 'Pindahkan nilai berikut
ke register AL', dan 61 adalah representasi bilangan heksadesimal untuk nilai
01100001, atau 97 dalam bilangan desimal. Bahasa rakitan untuk prosesor Intel menyediakan simbol mnemonic MOV (yang merupakan singkatan
dari move) untuk instruksi serupa sehingga kode mesin sebelumnya dapat
ditulis dalam bahasa rakitan sebagai berikut:
MOV
AL, 61h ; Isi register AL dengan
nilai 97 (61 hex
Bahasa rakitan memungkinkan programmer menambahkan komentar
atas setiap instruksi yang ditulis untuk mempermudah pembacaan dan lebih mudah
pemahaman.
- High level language disebut sebagai bahasa komputer tingkat tinggi karena berisi perintah yang dirancang mendekati bahasa manusia. Bahasa ini lebih mudah dipahami dan dipelajari oleh manusia dan digunakan untuk pembuatan program komputer tertentu. Macam bahasa pemrograman sudah kami sebutkan diatas.
Dalam ilmu komputer, bahasa pemrograman tingkat tinggi adalah bahasa
pemrograman dengan abstraksi yang kuat dari rincian komputer. Dibandingkan
dengan bahasa pemrograman tingkat rendah, mungkin menggunakan unsur-unsur
bahasa alami, lebih mudah untuk menggunakan, atau mungkin mengotomatisasi (atau
bahkan menyembunyikan seluruhnya) daerah yang signifikan dari sistem komputasi
(misalnya manajemen memori), membuat proses pengembangan program sederhana dan
lebih dimengerti dibandingkan dengan bahasa tingkat rendah. Jumlah abstraksi
disediakan mendefinisikan bagaimana "tingkat tinggi" bahasa
pemrograman.
Pada tahun 1960, bahasa pemrograman tingkat tinggi
menggunakan kompiler yang biasa disebut autocodes. Contoh autocodes yang COBOL dan Fortran.
Bahasa pemrograman pertama tingkat tinggi yang dirancang untuk komputer
adalah yakni Plankalkül, diciptakan oleh Konrad Zuse.
Namun, itu tidak dilaksanakan dalam waktu, dan kontribusi aslinya adalah
(karena Perang Dunia II) sebagian besar terisolasi dari perkembangan lain,
meskipun itu dipengaruhi bahasa Heinz Rutishauser ini "SUPERPLAN"
(dan untuk beberapa derajat juga Algol). Pertama benar-benar luas bahasa
tingkat tinggi adalah Fortran, mesin pengembangan independen dari sistem IBM
sebelumnya AUTOCODE. Algol, didefinisikan pada tahun 1958 dan 1960, oleh komite
ilmuwan komputer Eropa dan Amerika, memperkenalkan rekursi serta fungsi
bersarang di bawah lingkup leksikal. Itu juga merupakan bahasa pertama dengan
perbedaan yang jelas antara nilai dan nama-parameter dan semantik yang sesuai
mereka.
Algol juga memperkenalkan beberapa konsep pemrograman
terstruktur, seperti saat-do dan if-then-else konstruksi dan sintaks adalah
pertama yang digambarkan dengan metode formal, Backus Naur Form-(BNF). Selama
kira-kira periode yang sama Cobol diperkenalkan catatan (juga disebut struct)
dan Lisp memperkenalkan lambda abstraksi sepenuhnya umum dalam bahasa
pemrograman untuk pertama kalinya.
"Bahasa tingkat tinggi" mengacu pada tingkat yang lebih tinggi dari abstraksi dari bahasa mesin. Daripada berurusan dengan register, alamat memori
dan tumpukan panggilan, bahasa tingkat tinggi menangani
variabel, array, objek,
aritmatika kompleks atau ekspresi boolean, subrutin
dan fungsi, loop, benang, kunci, dan
konsep ilmu komputer abstrak
lainnya, dengan fokus pada kegunaan lebih efisiensi
program yang optimal. Tidak
seperti bahasa perakitan tingkat
rendah, bahasa tingkat tinggi
memiliki sedikit, jika ada, unsur-unsur bahasa yang diterjemahkan langsung ke opcodes asli mesin
ini. Fitur lain, seperti
rutinitas penanganan string, fitur bahasa berorientasi objek, dan file input / output, juga dapat hadir.
"Bahasa Tingkat Tinggi" mengacu
pada Tingkat Yang LEBIH Tinggi
Dari abstraksi Dari
bahasa mesin. Daripada
berurusan DENGAN daftar,
Alamat Memori Dan
Panggilan tumpukan, bahasa Tingkat Tinggi
menangani variabel, array, objek, aritmatika
Kompleks ATAU Ekspresi
boolean, subrutin Dan fungsi fungsi, lingkaran,
Benang, kunci, Dan
KONSEP Ilmu Komputer abstrak lainnya, with Fokus
PADA kegunaan LEBIH
Efisiensi Program Yang optimal. TIDAK
seperti bahasa Perakitan
Tingkat Rendah, Tingkat
Tinggi bahasa memiliki
sedikit, jika ADA,
bahasa Unsur-unsur Yang diterjemahkan Langsung
KE opcodes asli
mesin inisial. Fitur
Lain, seperti rutinitas
penanganan tali, fitur
bahasa berorientasi objek, Dan file input
/ output, JUGA DAPAT
Hadir.
Ada tiga mode umum eksekusi untuk
bahasa tingkat tinggi yang modern:
·
Ditafsirkan
Ketika kode yang ditulis dalam bahasa ditafsirkan, sintaks dibaca dan kemudian dieksekusi langsung, tanpa tahap kompilasi. Sebuah program yang disebut juru membaca setiap pernyataan program mengikuti alur program, kemudian memutuskan apa yang harus dilakukan, dan apakah hal itu. Sebuah hibrida seorang penerjemah dan kompilator akan mengkompilasi pernyataan ke dalam kode mesin dan menjalankan itu; kode mesin kemudian dibuang, harus ditafsirkan lagi jika baris dijalankan lagi. Penafsir umumnya implementasi sederhana dari perilaku bahasa, dibandingkan dengan dua varian lainnya yang tercantum di sini.
Ketika kode yang ditulis dalam bahasa ditafsirkan, sintaks dibaca dan kemudian dieksekusi langsung, tanpa tahap kompilasi. Sebuah program yang disebut juru membaca setiap pernyataan program mengikuti alur program, kemudian memutuskan apa yang harus dilakukan, dan apakah hal itu. Sebuah hibrida seorang penerjemah dan kompilator akan mengkompilasi pernyataan ke dalam kode mesin dan menjalankan itu; kode mesin kemudian dibuang, harus ditafsirkan lagi jika baris dijalankan lagi. Penafsir umumnya implementasi sederhana dari perilaku bahasa, dibandingkan dengan dua varian lainnya yang tercantum di sini.
Ketika kode yang ditulis dalam bahasa dikompilasi, sintaks ditransformasikan menjadi bentuk yang dapat dijalankan sebelum menjalankan. Ada dua jenis kompilasi:
·
Kode mesin generasi
Beberapa
compiler mengkompilasi kode sumber langsung ke kode mesin. Ini adalah modus
asli dari kompilasi, dan bahasa yang secara langsung dan benar-benar berubah ke
kode mesin-pribumi dengan cara ini dapat disebut "benar-benar
disusun" bahasa. Lihat bahasa assembly.
·
Representasi menengah
Ketika kode
yang ditulis dalam bahasa dikompilasi untuk representasi menengah, representasi
yang dapat dioptimalkan atau disimpan untuk eksekusi nanti tanpa perlu membaca
ulang file sumber. Ketika representasi menengah disimpan, mungkin dalam bentuk
seperti kode byte. Representasi menengah kemudian harus ditafsirkan atau lebih
disusun untuk melaksanakannya. Mesin virtual yang mengeksekusi kode byte
langsung atau mengubahnya lebih lanjut ke kode mesin telah mengaburkan
perbedaan yang jelas antara sekali representasi intermediate dan bahasa yang
benar-benar disusun.
Sumber-to-sumber
Diterjemahkan atau Trans-dikompilasi
Kode yang
ditulis dalam bahasa dapat diterjemahkan ke dalam istilah dari bahasa
pemrograman tingkat rendah yang kompiler kode asli yang sudah banyak tersedia.
Bahasa pemrograman C adalah target umum untuk penerjemah tersebut. Lihat Skema
ayam dan Eiffel sebagai contoh. Secara khusus, yang dihasilkan C dan C ++ kode
dapat dilihat (seperti yang dihasilkan dari bahasa pemrograman Eiffel bila menggunakan
EiffelStudio IDE) di direktori EIFGENs dari setiap proyek Eiffel disusun. Dalam
Eiffel, "Diterjemahkan" proses ini disebut sebagai Trans-kompilasi
atau Trans-dikompilasi, dan kompilator Eiffel sebagai Transcompiler.
Perhatikan bahwa bahasa tidak ketat "ditafsirkan" bahasa atau "dikompilasi" bahasa. Sebaliknya, implementasi perilaku bahasa menggunakan interpretasi atau kompilasi. Misalnya, Algol 60 dan Fortran memiliki keduanya telah ditafsirkan (meskipun mereka lebih biasanya disusun). Demikian pula, Jawa menunjukkan sulitnya mencoba menerapkan label ini untuk bahasa, bukan untuk implementasi; Java dikompilasi ke bytecode dan bytecode tersebut kemudian dieksekusi oleh salah interpretasi (di JVM) atau kompilasi (biasanya dengan compiler just-in-time seperti HotSpot, lagi dalam JVM). Selain itu, kompilasi, trans-kompilasi, dan interpretasi tidak terbatas hanya ketat deskripsi artefak compiler (executable biner atau IL perakitan).
Perhatikan bahwa bahasa tidak ketat "ditafsirkan" bahasa atau "dikompilasi" bahasa. Sebaliknya, implementasi perilaku bahasa menggunakan interpretasi atau kompilasi. Misalnya, Algol 60 dan Fortran memiliki keduanya telah ditafsirkan (meskipun mereka lebih biasanya disusun). Demikian pula, Jawa menunjukkan sulitnya mencoba menerapkan label ini untuk bahasa, bukan untuk implementasi; Java dikompilasi ke bytecode dan bytecode tersebut kemudian dieksekusi oleh salah interpretasi (di JVM) atau kompilasi (biasanya dengan compiler just-in-time seperti HotSpot, lagi dalam JVM). Selain itu, kompilasi, trans-kompilasi, dan interpretasi tidak terbatas hanya ketat deskripsi artefak compiler (executable biner atau IL perakitan).
Pembuat
program atau programmer dewasa ini banyak yang menggunakan bahasa komputer
tingkat tinggi untuk membuat program-program yang diinginkan karena sangat
mudah dipahami. Namun sebelum bisa dijalankan di komputer, program tersebut
haruslah diterjemahkan menjadi bahasa mesin terlebih dahulu. Maka dari itu pada
perangkat pembuatan program dengan bahasa tingkat tinggi ada bagian yang
bernama compiler. Tugas bagian ini adalah menerjemahkan perintah pada bahasa
tingkat tinggi menjadi bahasa mesin, sehingga CPU dapat mengolah data
berdasarkan perintah tersebut.
Sejarah singkat bahasa komputer
Perkembangan
bahasa komputer tentu tak lepas dari perkembangan komputer itu sendiri. Bahasa
komputer mulai dikembangkan pada saat penemuan komputer digital pertama,
sekitar tahun 1940-an.Bahasa komputer yang termasuk dalam assembly language
dikembangkan pada tahun 1950-an karena komputer mulai merambah ranah komersial.
Contoh bahasa yang termasuk dalam golongan Assembly ini adalah ForTran (Formula
Translation) yang dibuat oleh John Backus pada sekitar 1950-an hingga 1960-an.
Kemudian
bahasa komputer dengan banyak penyempurnaan mulai dikembangkan seperti COBOL
(Common Business Oriented Language) oleh Grace Hopper, LISP (List Proccesing)
oleh John McCarthy.
Pada
akhir tahun 1960-an muncul sebuah bahasa komputer yang diberi nama SIMULA dan
setelah itu perkembangan bahasa komputer semakin pesat. Pada tahun 1970-an
muncul banyak bahasa pemrograman yang terkenal, yakni ALOGOL, BASIC, PASCAL, C
dan ADA. Perkembangan bahasa komputer semakin berkembang pesat seiring
berkembangnya ilmu pengetahuan dan teknologi. Bahasa yang berkembang adalah
BASIC, JAVA, C++ dan PASCAL. Pada awal 1990-an, diperkenalkan istilah IDE
(Integrated Development Environment) yang menyatukan bahasa pemrograman dan GUI
sehingga membuat program menjadi lebih mudah. Beberapa IDE yang terkenal adalah
Visual Basic (bahasa BASIC), Borland Delphi (bahasa PASCAL) dan Eclipse (Bahasa
Java).















