JavaRush /Java Blog /Random-ID /Tingkat bahasa pemrograman
Marat Sadykov
Level 41

Tingkat bahasa pemrograman

Dipublikasikan di grup Random-ID

Perkenalan

Apa saja bahasa pemrograman yang berbeda? Konsep apa saja yang tertanam di dalamnya? Bagaimana perkembangannya? Pada artikel ini, kita akan melihat jenis-jenis bahasa pemrograman berdasarkan apa yang disebut level - dari kode mesin (level rendah, dekat dengan perangkat keras komputer) hingga bahasa seperti Java atau C# (level tinggi). Semakin sedikit transformasi yang dialami daftar teks program selama berubah menjadi kumpulan nol dan satu, semakin rendah levelnya.
Tingkatan bahasa pemrograman - 1
Selanjutnya kita akan melihat:
  1. Bahasa tingkat rendah (kode mesin dan perakitan)
  2. Tingkat menengah (C, Fortran….)
  3. Tingkat tinggi (C++, Java, Python, Ruby, JavaScript...)
Tingkat tersebut juga mencirikan seberapa detail daftar program masa depan yang perlu dirinci untuk melaksanakan implementasi. Seberapa sederhanakah proses ini bagi manusia? Tingkat suatu bahasa tidak boleh dianggap sebagai indikator yang jelas dari kemampuannya. Bahasa pemrograman adalah alat yang efektif di satu bidang dan kurang berguna di bidang lain. Baik tukang kayu maupun tukang kayu bekerja dengan kayu. Yang pertama memiliki alat utama - satu set pahat, yang kedua - kapak. Namun, seorang tukang kayu akan membuat lemari berukir menjadi lebih elegan, dan seorang tukang kayu akan membangun rumah lebih cepat. Meskipun masing-masing mampu melakukan pekerjaan yang lain, mereka akan melakukannya dengan kurang efisien. Berbagai data di komputer direpresentasikan sebagai kumpulan angka nol dan satu. Perintah kontrol untuk pemrosesannya adalah data yang sama yang berisi instruksi yang menentukan lokasi informasi yang diperlukan dan metode modifikasinya.

Bahasa mesin (Tingkat terendah)

Kita harus melakukan kunjungan singkat dari area Perangkat Lunak ke area Perangkat Keras. Mari kita lihat dalam bentuk yang disederhanakan. Prosesor adalah “otak” utama komputer. Motherboard tempat ia dipasang berisi pengontrol yang digunakan untuk berinteraksi dengan perangkat lain melalui bus (saluran data untuk komunikasi).
Tingkat bahasa pemrograman - 2
Beberapa bekerja dengan kecepatan tinggi (panah merah): prosesor mengambil perintah dari memori dan memanipulasi data, kartu video, terutama dalam game 3D, menggunakan sejumlah besar tekstur, bentuk, koordinat piksel, dan objek lain untuk membuat gambar di layar monitor . Lainnya (karena keterbatasan kecepatan pertukaran informasi) tidak memerlukan indikator setinggi itu. Berbagai perangkat internal dan eksternal dihubungkan dalam diagram dengan panah hijau.

Dunia batin prosesor

Semua perintah prosesor berasal dari memori untuk dieksekusi dalam bentuk biner. Format, nomor, subset instruksi bergantung pada arsitekturnya. Kebanyakan dari mereka tidak cocok satu sama lain dan mengikuti ideologi yang berbeda. Dan juga jenis perintah sangat bergantung pada mode (16/8/32... kedalaman bit) dan sumber data (memori, register, tumpukan...) yang digunakan prosesor. Tindakan yang sama dapat diwakili oleh instruksi yang berbeda. Prosesor memiliki instruksi untuk menambahkan dua operan (TAMBAHKAN X,Y) dan menambahkan satu ke operan yang ditentukan (INC X). Menambahkan triple ke operan dapat dilakukan sebagai ADD X,3 atau dengan memanggil INC X tiga kali. Dan, untuk prosesor yang berbeda, tidak mungkin untuk memprediksi metode mana yang akan optimal dalam hal kecepatan atau jejak memori. Untuk memudahkan, informasi biner ditulis dalam bentuk heksadesimal. Mari kita pertimbangkan bagian dari program yang sudah dikenal (bahasa C, sintaksisnya mirip dengan Java)
int func() {
    int i = getData("7") ;
    return ++i;
   ...
}
Kode yang mengimplementasikan tindakan yang sama dalam bentuk rangkaian instruksi untuk prosesor: ... 48 83 ec 08 bf bc 05 20 00 31 c0 e8 e8 fe ff ff 48 83 c4 08 83 c0 01 ... Seperti inilah sebenarnya bahasa pemrograman tingkat rendah untuk prosesor Intel. Sebuah fragmen yang memanggil metode dengan argumen dan mengembalikan hasil yang bertambah satu. Ini adalah bahasa mesin (kode), yang ditransfer secara langsung, tanpa transformasi, ke prosesor untuk dieksekusi. Kelebihan:
  • Kami sepenuhnya menguasai situasi, kami memiliki kemungkinan seluas-luasnya dalam menggunakan prosesor dan perangkat keras komputer.
  • Semua opsi untuk mengatur dan mengoptimalkan kode tersedia bagi kami.
Minus:
  • Penting untuk memiliki pengetahuan luas tentang fungsi prosesor dan mempertimbangkan sejumlah besar faktor perangkat keras saat mengeksekusi kode.
  • Membuat program yang sedikit lebih kompleks daripada contoh yang diberikan akan menyebabkan peningkatan tajam dalam waktu yang dihabiskan untuk menulis kode dan melakukan debug.
  • Ketergantungan platform: program yang dibuat untuk satu prosesor umumnya tidak akan berfungsi pada prosesor lain. Ada kemungkinan bahwa prosesor ini, dalam mode operasi lainnya, memerlukan pengeditan kode.
Kode mesin banyak digunakan pada awal mula komputer; tidak ada metode pemrograman lain di era pionir komputer. Saat ini, mereka kadang-kadang digunakan oleh para insinyur mikroelektronika ketika mengembangkan atau menguji prosesor tingkat rendah.

Bahasa rakitan (tingkat rendah)

Berbeda dengan komputer, Anda dan saya lebih memahami informasi dalam bentuk teks/semantik dibandingkan dalam bentuk digital. Anda dapat dengan mudah menyebutkan lima puluh nama kontak di ponsel cerdas Anda, tetapi kemungkinan besar Anda tidak akan dapat mengingat nomor teleponnya yang sesuai. Sama halnya dengan pemrograman. Kami menaiki tangga tipe dengan mengambil tiga langkah dasar:
  • Mari kita kaitkan satu instruksi simbolis ke kelompok instruksi prosesor digital yang melakukan tindakan terkait.
  • Mari kita soroti argumen instruksi prosesor secara terpisah.
  • Mari kita perkenalkan kemampuan untuk memberi nama area memori, variabel, dan lokasi masing-masing perintah.
Mari kita bandingkan potongan program sebelumnya dalam kode mesin (tengah) dan bahasa assembly (kanan):
2004b0     48 83 ec 08      sub    $0x8,%rsp
2004b4     bf bc 05 20 00   mov    $0x2005bc,%edi
2004b9     31 c0            xor    %eax,%eax
2004bb     e8 e8 fe ff ff   callq  getData
2004c0     48 83 c4 08      add    $0x8,%rsp
2004c4     83 c0 01         add    $0x1,%eax
Seperti yang Anda lihat, proses penulisan program telah disederhanakan: tidak perlu menggunakan buku referensi untuk menghasilkan nilai perintah digital, menghitung panjang transisi, mendistribusikan data dalam memori ke seluruh selnya, dan fitur prosesor lainnya. Kami menjelaskan tindakan yang diperlukan dari serangkaian perintah simbolik dan argumen yang diperlukan untuk logika eksekusi, dan kemudian program penerjemah menerjemahkan file teks ke dalam kumpulan angka nol dan yang dapat dimengerti oleh prosesor. Kelebihan:
  • Proses penulisan dan modifikasi kode telah disederhanakan.
  • Kontrol atas semua sumber daya perangkat keras dipertahankan.
  • Relatif lebih mudah untuk mem-porting program ke platform lain, namun memerlukan modifikasi tergantung pada kompatibilitas perangkat keras.
Minus:
  • Bahasa assembly adalah bahasa pemrograman tingkat rendah. Membuat bagian kode yang kecil sekalipun itu sulit. Selain itu, pengoperasian spesifik peralatan juga perlu diperhitungkan.
  • Ketergantungan platform.
Contoh demo Java paling populer:
public static void main(String[] args) {
    System.out.println("Hello World!");
}
akan terlihat (sintaks NASM, menggunakan Windows API dan kernel32.lib) sebagai berikut:
global _main
	extern  _GetStdHandle@4
	extern  _WriteFile@20
	extern  _ExitProcess@4

	section .text
_main:
	; DWORD  bytes;
	mov 	ebp, esp
	sub 	esp, 4

	; hStdOut = GetstdHandle( STD_OUTPUT_HANDLE)
	push	-11
	call	_GetStdHandle@4
	mov 	ebx, eax

	; WriteFile( hstdOut, message, length(message), &bytes, 0);
    push	0
	lea 	eax, [ebp-4]
	push	eax
	push	(message_end - message)
	push	message
	push	ebx
	call	_WriteFile@20

	; ExitProcess(0)
	push	0
	call	_ExitProcess@4

	; never here
	hlt
message:
	db  	'Hello, World', 10
message_end:
Seperti kode mesin, bahasa rakitan lebih sering digunakan oleh para insinyur dan pemrogram sistem. Ini digunakan untuk menulis bagian-bagian yang bergantung pada perangkat keras dari kernel sistem operasi yang kritis terhadap waktu atau kritis terhadap fitur implementasi driver untuk berbagai perangkat periferal. Namun belakangan ini mereka semakin jarang menggunakannya, karena penggunaannya sangat mengurangi portabilitas program ke platform lain. Terkadang mereka menggunakan proses pembongkaran - mereka membuat daftar perakitan suatu program dari kode digital untuk mengurai logika eksekusi fragmen kecil. Dalam kasus yang jarang terjadi, jika kode tingkat tinggi asli tidak tersedia: analisis virus untuk memberantasnya atau hilangnya kode sumber. Bahasa assembly dianggap sebagai generasi pertama/kedua (kami tidak akan mempertimbangkan pseudocode secara terpisah sebelum munculnya assembler dan perbedaannya dari perintah simbolik). Saya ingin menyoroti penggunaan assembler dalam Demo Scene: perpaduan seni, matematika, dan pengkodean tingkat rendah, yang mewujudkan ide artistik penciptanya dalam bentuk program yang menghasilkan klip video dengan keterbatasan sumber daya. Seringkali ukuran total program dan file data tidak boleh melebihi 256 byte (format 4/64 kilobyte juga populer). Berikut ini contoh program 4 KB:

Bahasa Grup C/Fortran (tingkat menengah/tinggi)

Dengan berkembangnya kemampuan teknologi komputer, jumlah fungsionalitas dan waktu implementasi kode pada assembler tidak lagi memuaskan. Biaya penulisan, pengujian, dan pemeliharaan program tumbuh jauh lebih cepat dibandingkan kemampuannya. Persyaratan dari programmer dalam hal pengetahuan tentang fungsi peralatan perlu dikurangi, untuk memberinya alat yang memungkinkan dia menulis dalam bahasa yang dekat dengan logika manusia. Pindah ke tingkat jenis bahasa pemrograman yang baru. Memberikan kemampuan untuk dipecah menjadi berbagai modul dengan pemanggilan sekuensial lebih lanjut (paradigma pemrograman prosedural), menyediakan berbagai jenis data dengan kemampuan untuk menyusunnya, dll. Selain itu, langkah-langkah ini membawa peningkatan portabilitas kode ke platform lain, pengorganisasian yang lebih nyaman. kerja tim. Salah satu bahasa pertama yang mendukung semua hal di atas adalah Fortran, yang dikembangkan pada tahun 50-an abad terakhir . Kemampuan untuk membuat dalam bentuk teks dengan deskripsi logika eksekusi menggunakan loop, cabang, subrutin dan beroperasi dengan array dan menyajikan data dalam bentuk bilangan real, integer dan kompleks membuat senang para insinyur dan ilmuwan. Dalam waktu singkat, “kerangka kerja” dan perpustakaan ilmiah telah tercipta. Semua ini merupakan konsekuensi dari fakta bahwa Fortran masih relevan hingga saat ini, meskipun dalam lingkungan ilmiah yang sempit, dan terus berkembang, karena beban perkembangannya sangat besar, perpustakaan IMSL sendiri telah aktif berkembang sejak tahun 1970 (!), bagaimana banyak perangkat lunak serupa yang relevan yang dapat Anda ingat? -orang-orang lama? Cabang lain dari perkembangan bahasa pada tingkat ini adalah C. Jika Fortran menjadi alat bagi para ilmuwan, maka C diciptakan untuk membantu pemrogram membuat perangkat lunak aplikasi: sistem operasi, driver, dll. Bahasa ini memungkinkan Anda mengontrol alokasi memori secara manual dan memberikan akses langsung ke sumber daya perangkat keras. Pemrogram C harus mengendalikan entitas tingkat rendah, sehingga banyak yang berpendapat bahwa C adalah bahasa rakitan tingkat lanjut dan sering disebut bahasa “tingkat menengah”. Setelah memperkenalkan pengetikan data ke dalam assembler, elemen pemrograman prosedural dan modular, bahasa C masih menjadi salah satu bahasa utama untuk pemrograman sistem, yang juga difasilitasi oleh pesatnya perkembangan mikroelektronika belakangan ini. Semua jenis gadget, pengontrol, jaringan, dan perangkat lainnya memerlukan driver, penerapan protokol untuk kolaborasi, dan perangkat lunak tingkat rendah lainnya untuk mengimplementasikan interaksi dengan peralatan. Semua hal di atas berkontribusi terhadap permintaan bahasa saat ini. Prinsip-prinsip berorientasi objek dan fungsional dikembangkan lebih lanjut dalam bentuk C++, C#, Java, mengambil banyak dari sintaksis C. Kelebihan:
  • Penyederhanaan proses pembuatan kode: pengenalan tipe, pembagian ke dalam modul, pengurangan daftar program.
  • Logika transparan dari algoritme yang mendasarinya karena peralihan dari kode mesin ke perintah yang lebih mudah dibaca manusia dalam gaya deskriptif semantik.
  • Portabilitas. Sudah cukup untuk mengkompilasi ulang teks program untuk dieksekusi pada platform lain (mungkin dengan sedikit modifikasi).
  • Kecepatan program yang dikompilasi.
Minus:
  • Kurangnya manajemen memori otomatis dan perlunya pemantauan terus-menerus.
  • Kurangnya implementasi konsep pemrograman berorientasi objek dan fungsional.

Perkembangan bahasa tingkat tinggi

Bahasa pemrograman tingkat tinggi, dalam hal pembuatan perangkat lunak, semakin menjauh dari kode mesin dan menerapkan berbagai paradigma pemrograman selain paradigma prosedural. Ini juga mencakup penerapan prinsip berorientasi objek. C++, Java, Python, JavaScript, Ruby... - rangkaian bahasa jenis ini adalah yang paling populer dan diminati saat ini. Mereka memberikan lebih banyak peluang untuk mengimplementasikan berbagai perangkat lunak dan tidak mungkin untuk secara jelas menentukan “spesialisasi” masing-masing perangkat lunak. Namun popularitas aplikasi di bidang yang relevan disebabkan oleh perpustakaan/kerangka kerja untuk bekerja dengannya, misalnya: JavaScript - Frontend. Bahasa ini dirancang untuk interaksi antara browser web klien dan pengguna serta server jarak jauh. Library yang paling populer adalah Angular, React, dan VUE. Saat ini relatif aktif digunakan di web dan server lain (backend), Node.js sangat populer. Ruby - Bagian Belakang. Ini digunakan untuk membuat skrip (file layanan) dan di server web. Kerangka utamanya adalah Ruby On Rails. Python adalah domain ilmiah dan teknik (selain domain web). Ini adalah alternatif untuk paket komputasi dan matematika standar (Mathematica, Octave, MatLab...), tetapi memiliki semantik bahasa yang biasa dan sejumlah besar perpustakaan. Memiliki banyak penggemar di bidang sistem pembelajaran mesin, statistika dan kecerdasan buatan. Pustaka yang sering digunakan termasuk Django, numpy, pandas, dan tensorflow. C++ – Perkembangan bahasa C yang universal dan evolusioner. Menyediakan kemampuan pemrograman fungsional dan berorientasi objek tanpa kehilangan kemampuan untuk berinteraksi dengan perangkat keras tingkat rendah. Oleh karena itu, produktivitas dan fleksibilitas diwujudkan saat membuat perangkat lunak, tetapi harganya juga sesuai: hambatan masuk yang tinggi karena spesifikasi bahasa yang rumit, kebutuhan akan kontrol independen atas sumber daya saat menjalankan program. Banyak pengguna tunggal dan perangkat lunak sistem ditulis menggunakan ini: modul sistem operasi (Windows, Symbian...), permainan, editor (Adobe Photoshop, Autodesk Maya...), database (MSSQL, Oracle...), pemutar ( WinAmp...), dll. Perlu dicatat bahwa perangkat lunak modern adalah produk yang kompleks, yang pengembangannya menggunakan beberapa bahasa pemrograman sekaligus, dan akan sangat sulit untuk menentukan tingkat partisipasi masing-masing bahasa dalam hasil keseluruhan.

Kemajuan lebih lanjut

Baru-baru ini, jenis pemrograman lain semakin populer - fungsional (pengembangan lebih lanjut dari tingkat bahasa) . Berikut adalah jenis abstraksi lain untuk penghitungan - fungsi yang menggunakan sekumpulan fungsi sebagai argumen dan mengembalikan fungsi lainnya. Peran variabel dimainkan oleh fungsi yang sama (variabel yang kita kenal hanyalah ekspresi konstan, mirip dengan final sebelum deklarasi tipe di Java). Fungsi itu sendiri tertutup dalam cakupannya, hasil operasinya hanya bergantung pada argumen yang diteruskan. Dua sifat luar biasa mengikuti dari ini:
  • Untuk pengujian, kita hanya membutuhkan argumen fungsi (hasil pekerjaan tidak bergantung pada variabel eksternal, dll).
  • Program bergaya fungsional secara ajaib siap untuk konkurensi: pemanggilan fungsi berurutan dapat dilakukan di thread tetangga (karena tidak terpengaruh oleh faktor eksternal) dan tidak memerlukan kunci (artinya, tidak ada masalah sinkronisasi). Insentif yang baik untuk mencurahkan waktu pada topik ini, mengingat meluasnya adopsi prosesor multi-core.
Namun, ambang masuknya lebih tinggi daripada OOP: untuk kode yang efektif, perlu dibuat sebuah program, yang menjelaskan algoritma eksekusi dalam bentuk fungsi. Tetapi juga untuk gaya fungsional murni, alangkah baiknya jika mengetahui dasar-dasar logika dan teori kategori. Yang paling populer adalah Haskell, Scala, F#. Namun jangan takut, elemen pemrograman fungsional telah muncul di Java (serta bahasa generasi ketiga modern lainnya) dan dapat digabungkan dengan OOP. Anda akan mengetahui semua detail ini lebih detail di magang online JavaRush. Bidang pemrograman logika (bahasa tingkat berikutnya) belum menemukan penerapan praktis yang luas karena rendahnya permintaan. Membangun program memerlukan pengetahuan tentang dasar-dasar matematika diskrit, logika predikat, alat pembatas, dan cabang logika matematika lainnya. Bahasa aktif yang paling populer adalah Prolog.

Kesimpulan

Saat ini, bahasa yang paling umum adalah OOP. Java, sejak awal berdirinya, selalu berada di posisi teratas, biasanya di tiga besar, bahasa populer. Selain OOP, ini berisi elemen pemrograman fungsional, dan Anda dapat menggabungkan berbagai gaya penulisan program Anda. Kisaran aplikasi Java sangat luas - ini adalah tugas bisnis, implementasi server web (backend), bahasa utama untuk membuat aplikasi Android, lingkungan pemrograman dan tempat kerja lintas platform (IDE/AWM) dan pemodelan, dan banyak lagi. . Posisi Java sangat kuat di sektor Perusahaan - bidang perangkat lunak perusahaan yang membutuhkan kode berkualitas tinggi dan berumur panjang serta penerapan logika bisnis yang paling kompleks.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION