Program komputer

appendChild(). Metode tersebut menambahkan simpul anak baru ke simpul induk yang sudah ada. Metode ini umum digunakan untuk memodifikasi struktur dokumen HTML secara dinamis.Program komputer adalah urutan atau sekumpulan instruksi[a] dalam suatu bahasa pemrograman yang harus dijalankan oleh komputer. Program komputer merupakan salah satu komponen perangkat lunak, yang juga mencakup dokumentasi dan komponen tak berwujud lainnya.[1]
Program komputer dalam bentuk yang dapat dibaca manusia disebut kode sumber. Kode sumber memerlukan program komputer lain untuk menjalankannya karena komputer hanya dapat menjalankan instruksi mesin aslinya. Oleh karena itu, kode sumber dapat diterjemahkan menjadi instruksi mesin menggunakan kompilator yang ditulis untuk bahasa tersebut. (Program dalam bahasa rakitan diterjemahkan menggunakan assembler.) Berkas yang dihasilkan disebut berkas dapat dieksekusi. Sebagai alternatif, kode sumber dapat dijalankan di dalam interpreter yang ditulis untuk bahasa tersebut.[2]
Jika berkas dapat dieksekusi diminta untuk dijalankan,[b] sistem operasi memuatnya ke dalam memori[3] dan memulai sebuah proses.[4] Unit pemrosesan pusat kemudian akan segera beralih ke proses tersebut sehingga dapat mengambil, mendekode, lalu menjalankan setiap instruksi mesin.[5]
Jika kode sumber diminta untuk dijalankan, sistem operasi memuat interpreter yang sesuai ke dalam memori dan memulai sebuah proses. Interpreter kemudian memuat kode sumber ke dalam memori untuk menerjemahkan dan menjalankan setiap pernyataan. Menjalankan kode sumber lebih lambat daripada menjalankan berkas dapat dieksekusi.[6][c] Selain itu, interpreter harus terpasang pada komputer.
Contoh program komputer
[sunting | sunting sumber]Program "Hello, World!" program digunakan untuk mengilustrasikan sintaks dasar suatu bahasa. Sintaks bahasa BASIC (1964) sengaja dibuat terbatas agar bahasa tersebut mudah dipelajari.[7] Misalnya, variabel tidak perlu dideklarasikan sebelum digunakan.[8] Selain itu, variabel secara otomatis diinisialisasi dengan nilai nol.[8] Berikut adalah contoh program komputer dalam Basic untuk menghitung rata-rata suatu daftar bilangan:[9]
10 INPUT "How many numbers to average?", A
20 FOR I = 1 TO A
30 INPUT "Enter number:", B
40 LET C = C + B
50 NEXT I
60 LET D = C/A
70 PRINT "The average is", D
80 END
Setelah mekanisme dasar pemrograman komputer dikuasai, tersedia bahasa yang lebih canggih dan kuat untuk membangun sistem komputer berukuran besar.[10]
Sejarah
[sunting | sunting sumber]Perkembangan dalam pengembangan perangkat lunak merupakan hasil dari perkembangan perangkat keras komputer. Pada setiap tahap dalam sejarah perangkat keras, tugas pemrograman komputer mengalami perubahan yang dramatis.
Mesin Analitik
[sunting | sunting sumber]
Pada tahun 1837, alat tenun Jacquard menginspirasi Charles Babbage untuk mencoba membangun Mesin Analitik.[11] Nama-nama komponen perangkat penghitung tersebut dipinjam dari industri tekstil. Dalam industri tekstil, benang dibawa dari gudang untuk diproses. Perangkat tersebut memiliki sebuah store yang terdiri atas memori untuk menyimpan 1.000 bilangan, masing-masing terdiri atas 50 digit desimal.[12] Bilangan dari store dipindahkan ke mill untuk diproses. Mesin tersebut diprogram menggunakan dua kelompok kartu berlubang. Satu kelompok mengarahkan operasi dan kelompok lainnya memasukkan variabel.[13] Namun, ribuan roda bergigi dan roda gigi tersebut tidak pernah dapat bekerja sepenuhnya secara bersamaan.[14]
Ada Lovelace bekerja untuk Charles Babbage untuk membuat deskripsi tentang Mesin Analitik (1843).[15] Deskripsi tersebut memuat Catatan G yang menjelaskan secara lengkap metode untuk menghitung bilangan Bernoulli menggunakan Mesin Analitik. Catatan ini diakui oleh sebagian sejarawan sebagai program komputer pertama di dunia.[14]
Mesin Turing universal
[sunting | sunting sumber]
Pada tahun 1936, Alan Turing memperkenalkan Mesin Turing universal, sebuah perangkat teoretis yang dapat memodelkan setiap komputasi.[16] Mesin tersebut merupakan mesin keadaan hingga yang memiliki pita baca/tulis dengan panjang tak hingga. Mesin dapat menggerakkan pita maju dan mundur, mengubah isinya saat menjalankan suatu algoritme. Mesin dimulai dalam keadaan awal, melewati serangkaian langkah, dan berhenti ketika mencapai keadaan berhenti.[17] Semua komputer masa kini bersifat Turing lengkap.[18]
ENIAC
[sunting | sunting sumber]
Electronic Numerical Integrator And Computer (ENIAC) dibangun antara Juli 1943 dan musim gugur 1945. ENIAC merupakan komputer serbaguna yang Turing lengkap dan menggunakan 17.468 tabung vakum untuk membentuk sirkuit. Pada intinya, ENIAC merupakan serangkaian Pascaline yang dihubungkan dengan kabel.[19] Ke-40 unitnya memiliki berat 30 ton, menempati area 1,800 square feet (0 m2), dan mengonsumsi listrik senilai $650 per jam (dalam mata uang tahun 1940-an) ketika dalam keadaan tidak aktif.[19] ENIAC memiliki 20 akumulator basis-10. Pemrograman ENIAC membutuhkan waktu hingga dua bulan.[19] Tiga tabel fungsi berada di atas roda dan harus digeser ke panel fungsi tetap. Tabel fungsi dihubungkan ke panel fungsi dengan memasukkan kabel hitam tebal ke dalam plugboard. Setiap tabel fungsi memiliki 728 kenop yang dapat diputar. Pemrograman ENIAC juga melibatkan pengaturan beberapa dari 3.000 sakelar. Debug program membutuhkan waktu satu minggu.[20] ENIAC beroperasi dari tahun 1947 hingga 1955 di Aberdeen Proving Ground, menghitung parameter bom hidrogen, memprediksi pola cuaca, dan menghasilkan tabel penembakan untuk membidik meriam artileri.[21]
Komputer dengan program tersimpan
[sunting | sunting sumber]Alih-alih memasang kabel dan mengubah sakelar, komputer dengan program tersimpan memuat instruksinya ke dalam memori, sama seperti komputer memuat datanya ke dalam memori.[22] Akibatnya, komputer dapat diprogram dengan cepat dan melakukan perhitungan dengan kecepatan yang sangat tinggi.[23] Presper Eckert dan John Mauchly membangun ENIAC. Kedua insinyur tersebut memperkenalkan konsep program tersimpan dalam sebuah memo tiga halaman bertanggal Februari 1944.[24] Kemudian, pada September 1944, John von Neumann mulai bekerja pada proyek ENIAC. Pada 30 Juni 1945, von Neumann menerbitkan First Draft of a Report on the EDVAC, yang menyamakan struktur komputer dengan struktur otak manusia.[23] Rancangan tersebut kemudian dikenal sebagai arsitektur von Neumann. Arsitektur tersebut secara bersamaan diterapkan dalam pembangunan komputer EDVAC dan EDSAC pada tahun 1949.[25][26]
IBM System/360 (1964) merupakan keluarga komputer yang masing-masing memiliki arsitektur set instruksi yang sama. Model 20 merupakan model terkecil dan termurah. Pelanggan dapat melakukan peningkatan dan tetap menggunakan perangkat lunak aplikasi yang sama.[27] Model 195 merupakan model kelas premium. Setiap model System/360 mendukung multiprogramming[27]—memiliki beberapa proses sekaligus di dalam memori. Ketika suatu proses sedang menunggu masukan/keluaran, proses lain dapat melakukan komputasi.
IBM merencanakan agar setiap model diprogram menggunakan PL/I.[28] Sebuah komite dibentuk yang mencakup para pemrogram COBOL, FORTRAN, dan ALGOL. Tujuannya adalah mengembangkan bahasa yang komprehensif, mudah digunakan, dapat diperluas, serta dapat menggantikan COBOL dan FORTRAN.[28] Hasilnya adalah sebuah bahasa yang besar dan kompleks yang membutuhkan waktu lama untuk dikompilasi.[29]

Komputer yang diproduksi hingga tahun 1970-an memiliki sakelar panel depan untuk pemrograman manual.[30] Program komputer ditulis di atas kertas sebagai referensi. Sebuah instruksi direpresentasikan oleh konfigurasi pengaturan hidup/mati. Setelah konfigurasi diatur, tombol eksekusi ditekan. Proses tersebut kemudian diulangi. Program komputer juga dapat dimasukkan secara otomatis melalui pita kertas, kartu berlubang, atau pita magnetik. Setelah media dimuat, alamat awal diatur melalui sakelar, kemudian tombol eksekusi ditekan.[30]
Integrasi skala sangat besar
[sunting | sunting sumber]
Tonggak penting dalam pengembangan perangkat lunak adalah penemuan sirkuit Integrasi Skala Sangat Besar (VLSI).
Robert Noyce, salah satu pendiri Fairchild Semiconductor (1957) dan Intel (1968), mencapai peningkatan teknologi untuk menyempurnakan produksi transistor efek medan (1959).[31] Tujuannya adalah mengubah resistivitas dan konduktivitas listrik suatu sambungan semikonduktor. Pertama, mineral silikat yang terbentuk secara alami diubah menjadi batang polisilikon menggunakan proses Siemens.[32] Kemudian proses Czochralski mengubah batang tersebut menjadi silikon monokristalin, yaitu kristal boule.[33] Kristal tersebut kemudian diiris tipis untuk membentuk wafer substrat. Proses planar fotolitografi kemudian mengintegrasikan transistor unipolar, kapasitor, dioda, dan resistor[34] ke dalam wafer untuk membangun matriks transistor logam–oksida–semikonduktor (MOS). Transistor MOS merupakan komponen utama dalam chip sirkuit terpadu.[31]
Pada awalnya, fungsi chip sirkuit terpadu ditetapkan selama proses manufaktur. Produsen chip merancang chip khusus untuk aplikasi tertentu.[35]
Pada tahun 1969, Busicom, sebuah perusahaan kalkulator Jepang, mengontrak Intel untuk memproduksi 12 chip sirkuit terpadu, masing-masing untuk fungsi kalkulator tertentu. Ted Hoff, insinyur yang ditugaskan untuk pekerjaan tersebut, menyadari bahwa ia dapat membuat satu chip yang dapat menjalankan program komputer untuk melakukan 12 fungsi kalkulator tersebut.[36] Chip yang dihasilkan disebut Intel 4004, sebuah mikroprosesor.

Istilah mikroprosesor dan unit pemrosesan pusat (CPU) kini digunakan secara bergantian. Namun, CPU sudah ada sebelum mikroprosesor. Sebagai contoh, IBM System/360 (1964) memiliki CPU yang dibuat dari papan sirkuit yang berisi komponen diskret pada substrat keramik.[37]
Seri x86
[sunting | sunting sumber]
Pada tahun 1978, lingkungan pengembangan perangkat lunak modern mulai muncul ketika Intel meningkatkan Intel 8080 menjadi Intel 8086. Intel menyederhanakan Intel 8086 untuk memproduksi Intel 8088 yang lebih murah.[38] IBM menggunakan Intel 8088 ketika memasuki pasar komputer pribadi (1981). Seiring meningkatnya permintaan konsumen terhadap komputer pribadi, perkembangan mikroprosesor Intel juga meningkat. Rangkaian perkembangan tersebut dikenal sebagai seri x86. Bahasa rakitan x86 merupakan keluarga instruksi mesin yang kompatibel dengan versi sebelumnya. Instruksi mesin yang dibuat pada mikroprosesor terdahulu tetap dipertahankan sepanjang peningkatan mikroprosesor. Hal ini memungkinkan konsumen membeli komputer baru tanpa harus membeli perangkat lunak aplikasi baru. Kategori utama instruksi tersebut adalah:[d]
- Instruksi memori untuk mengatur dan mengakses bilangan serta string dalam random-access memory.
- Instruksi unit logika aritmetika (ALU) bilangan bulat untuk melakukan operasi aritmetika utama pada bilangan bulat.
- Instruksi ALU aritmetika titik mengambang untuk melakukan operasi aritmetika utama pada bilangan riil.
- Instruksi tumpukan pemanggilan untuk memasukkan dan mengeluarkan word yang diperlukan untuk mengalokasikan memori dan berinteraksi dengan fungsi.
- Instruksi Single instruction, multiple data (SIMD)[e] untuk meningkatkan kecepatan ketika beberapa prosesor tersedia untuk menjalankan algoritme yang sama pada suatu larik data.
Perubahan lingkungan pemrograman
[sunting | sunting sumber]
Sirkuit VLSI memungkinkan lingkungan pemrograman berkembang dari terminal komputer (hingga 1990-an) menjadi komputer dengan antarmuka pengguna grafis (GUI). Terminal komputer membatasi pemrogram pada satu shell yang berjalan dalam lingkungan antarmuka baris perintah. Selama 1970-an, penyuntingan kode sumber layar penuh menjadi mungkin melalui antarmuka pengguna berbasis teks. Terlepas dari teknologi yang tersedia, tujuannya adalah melakukan pemrograman dalam bahasa pemrograman.
Paradigma dan bahasa pemrograman
[sunting | sunting sumber]Fitur bahasa pemrograman ada untuk menyediakan blok penyusun yang dapat digabungkan untuk mengungkapkan gagasan pemrograman.[39] Idealnya, suatu bahasa pemrograman harus:[39]
- mengungkapkan gagasan secara langsung dalam kode.
- mengungkapkan gagasan-gagasan yang independen secara independen.
- mengungkapkan hubungan antargagasan secara langsung dalam kode.
- menggabungkan gagasan secara bebas.
- hanya menggabungkan gagasan jika penggabungannya masuk akal.
- mengungkapkan gagasan sederhana secara sederhana.
Gaya pemrograman suatu bahasa pemrograman dalam menyediakan blok penyusun tersebut dapat dikategorikan ke dalam paradigma pemrograman.[40] Sebagai contoh, paradigma yang berbeda dapat membedakan:[40]
- bahasa prosedural, bahasa fungsional, dan bahasa logika.
- tingkat abstraksi data yang berbeda.
- tingkat hierarki kelas yang berbeda.
- tingkat tipe data masukan yang berbeda, seperti pada tipe kontainer dan pemrograman generik.
Masing-masing gaya pemrograman tersebut telah berkontribusi terhadap sintesis berbagai bahasa pemrograman.[40]
Sebuah bahasa pemrograman adalah sekumpulan kata kunci, simbol, pengenal, dan aturan yang digunakan pemrogram untuk berkomunikasi dengan komputer mengenai instruksi.[41] Bahasa tersebut mengikuti sekumpulan aturan yang disebut sintaks.[41]
- Kata kunci adalah kata tercadang yang digunakan untuk membentuk deklarasi dan pernyataan.
- Simbol adalah karakter yang digunakan untuk membentuk operasi, penugasan, alur kontrol, dan pembatas.
- Pengenal adalah kata yang dibuat oleh pemrogram untuk membentuk konstanta, nama variabel, nama struktur, dan nama fungsi.
- Aturan sintaks didefinisikan dalam bentuk Backus–Naur.
Bahasa pemrograman mendapatkan dasarnya dari bahasa formal.[42] Tujuan mendefinisikan solusi dalam bentuk bahasa formal adalah menghasilkan sebuah algoritma untuk menyelesaikan masalah yang mendasarinya.[42] Sebuah algoritma adalah urutan instruksi sederhana yang menyelesaikan suatu masalah.[43]
Generasi bahasa pemrograman
[sunting | sunting sumber]
Evolusi bahasa pemrograman dimulai ketika EDSAC (1949) menggunakan program komputer tersimpan pertama[44] dalam arsitektur von Neumann. Pemrograman EDSAC merupakan generasi pertama bahasa pemrograman.[45]
- Generasi pertama bahasa pemrograman adalah bahasa mesin.[46] Bahasa mesin mengharuskan pemrogram memasukkan instruksi menggunakan nomor instruksi yang disebut kode mesin. Sebagai contoh, operasi ADD pada PDP-11 memiliki nomor instruksi 24576.[47][f]
- Generasi kedua bahasa pemrograman adalah bahasa rakitan.[48] Bahasa rakitan memungkinkan pemrogram menggunakan instruksi mnemonik alih-alih mengingat nomor instruksi. Sebuah assembler menerjemahkan setiap mnemonik bahasa rakitan menjadi nomor bahasa mesinnya. Sebagai contoh, pada PDP-11, operasi 24576 dapat ditulis sebagai ADD R0,R0 dalam kode sumber.[49] Empat operasi aritmetika dasar memiliki instruksi rakitan seperti ADD, SUB, MUL, dan DIV.[49] Assembler juga memiliki instruksi seperti DW (Define Word) untuk mencadangkan sel memori. Kemudian, instruksi MOV dapat menyalin bilangan bulat antara register dan sel memori tersebut.
-
- Label memungkinkan pemrogram bekerja dengan nama variabel. Assembler nantinya menerjemahkan label menjadi alamat memori fisik.
- Operasi memungkinkan pemrogram bekerja dengan mnemonik.
- Operand memberi tahu assembler data mana yang akan diproses oleh operasi. Assembler nantinya menerjemahkan mnemonik dan operand menjadi nomor instruksi.
- Komentar memungkinkan pemrogram menyampaikan narasi karena instruksi saja dapat sulit dipahami manusia.
- Karakteristik utama program bahasa rakitan adalah membentuk pemetaan satu-ke-satu dengan target bahasa mesin yang bersesuaian.[51]
- Generasi ketiga bahasa pemrograman menggunakan kompilator dan interpreter untuk menjalankan program komputer. Ciri pembeda bahasa generasi ketiga adalah independensinya dari perangkat keras tertentu.[52] Bahasa awalnya mencakup FORTRAN (1958), COBOL (1959), ALGOL (1960), dan BASIC (1964).[48] Pada 1973, bahasa pemrograman C muncul sebagai bahasa tingkat tinggi yang menghasilkan instruksi bahasa mesin secara efisien.[53] Sementara bahasa generasi ketiga secara historis menghasilkan banyak instruksi mesin untuk setiap pernyataan,[54] C memiliki pernyataan yang dapat menghasilkan satu instruksi mesin.[g] Selain itu, kompilator pengoptimal dapat mengabaikan keputusan pemrogram dan menghasilkan lebih sedikit instruksi mesin daripada jumlah pernyataan. Saat ini, keseluruhan paradigma bahasa mengisi spektrum generasi ketiga imperatif.
- Generasi keempat bahasa pemrograman menekankan hasil keluaran yang diinginkan, bukan bagaimana pernyataan pemrograman harus disusun.[48] Bahasa deklaratif berusaha membatasi efek samping dan memungkinkan pemrogram menulis kode dengan kesalahan yang relatif sedikit.[48] Salah satu bahasa generasi keempat yang populer disebut Structured Query Language (SQL).[48] Pengembang basis data tidak lagi perlu memproses setiap rekaman basis data satu per satu. Selain itu, sebuah pernyataan select sederhana dapat menghasilkan rekaman keluaran tanpa harus memahami bagaimana rekaman tersebut diambil.
Bahasa imperatif
[sunting | sunting sumber]
Bahasa imperatif menentukan algoritma berurutan menggunakan deklarasi, ekspresi, dan pernyataan:[55]
- Sebuah deklarasi memperkenalkan nama variabel ke dalam program komputer dan menetapkannya pada tipe data tertentu[56] – misalnya:
var x: integer; - Sebuah ekspresi menghasilkan suatu nilai – misalnya:
2 + 2menghasilkan 4 - Sebuah pernyataan dapat menetapkan suatu ekspresi ke variabel atau menggunakan nilai variabel untuk mengubah alur kontrol program – misalnya:
x := 2 + 2; if x = 4 then do_something();
Fortran
[sunting | sunting sumber]FORTRAN (1958) diperkenalkan sebagai "The IBM Mathematical FORmula TRANslating system". Bahasa ini dirancang untuk perhitungan ilmiah, tanpa fasilitas penanganan string. Selain deklarasi, ekspresi, dan pernyataan, bahasa ini mendukung:
Bahasa ini berhasil karena:
- biaya pemrograman dan debugging lebih rendah daripada biaya menjalankan komputer.
- didukung oleh IBM.
- aplikasi pada saat itu bersifat ilmiah.[57]
Namun, vendor non-IBM juga menulis kompilator Fortran, tetapi dengan sintaks yang kemungkinan gagal dikompilasi oleh kompilator IBM.[57] American National Standards Institute (ANSI) mengembangkan standar Fortran pertama pada 1966. Pada 1978, Fortran 77 menjadi standar hingga 1991. Fortran 90 mendukung:
COBOL
[sunting | sunting sumber]COBOL (1959) merupakan singkatan dari "COmmon Business Oriented Language". Fortran memanipulasi simbol. Segera disadari bahwa simbol tidak harus berupa angka, sehingga string diperkenalkan.[58] Departemen Pertahanan Amerika Serikat memengaruhi pengembangan COBOL, dengan Grace Hopper sebagai salah satu kontributor utama. Pernyataannya menyerupai bahasa Inggris dan bersifat panjang. Tujuannya adalah merancang bahasa agar manajer dapat membaca program. Namun, kurangnya pernyataan terstruktur menghambat tujuan tersebut.[59]
Pengembangan COBOL dikendalikan secara ketat, sehingga tidak muncul dialek-dialek yang memerlukan standar ANSI. Akibatnya, COBOL tidak mengalami perubahan selama 15 tahun hingga 1974. Versi tahun 1990-an memang membuat perubahan penting, seperti pemrograman berorientasi objek.[59]
Algol
[sunting | sunting sumber]ALGOL (1960) merupakan singkatan dari "ALGOrithmic Language". Bahasa ini memiliki pengaruh besar terhadap desain bahasa pemrograman.[60] Dikembangkan oleh komite ahli bahasa pemrograman dari Eropa dan Amerika, bahasa ini menggunakan notasi matematika standar serta memiliki desain yang mudah dibaca dan terstruktur. Algol merupakan bahasa pertama yang mendefinisikan sintaksnya menggunakan bentuk Backus–Naur.[60] Hal ini menghasilkan kompilator terarah sintaks. Bahasa ini menambahkan fitur seperti:
- struktur blok, tempat variabel bersifat lokal terhadap bloknya.
- larik dengan batas yang dapat berubah.
- "for" loop.
- fungsi.
- rekursi.[60]
Keturunan langsung Algol mencakup Pascal, Modula-2, Ada, Delphi dan Oberon pada satu cabang. Pada cabang lainnya, keturunannya mencakup C, C++ dan Java.[60]
Basic
[sunting | sunting sumber]BASIC (1964) merupakan singkatan dari "Beginner's All-Purpose Symbolic Instruction Code". Bahasa ini dikembangkan di Dartmouth College agar semua mahasiswanya dapat mempelajarinya.[9] Jika seorang mahasiswa tidak melanjutkan ke bahasa yang lebih kuat, ia tetap akan mengingat Basic.[9] Sebuah interpreter Basic dipasang pada komputer mikro yang diproduksi pada akhir 1970-an. Seiring pertumbuhan industri komputer mikro, bahasa tersebut juga berkembang.[9]
Basic memelopori sesi interaktif.[9] Bahasa ini menyediakan perintah sistem operasi di dalam lingkungannya:
- Perintah 'new' membuat keadaan kosong.
- Pernyataan dievaluasi segera.
- Pernyataan dapat diprogram dengan menambahkan nomor baris di depannya.[h]
- Perintah 'list' menampilkan program.
- Perintah 'run' menjalankan program.
Namun, sintaks Basic terlalu sederhana untuk program berukuran besar.[9] Dialek-dialek terbaru menambahkan struktur dan ekstensi berorientasi objek. Microsoft Visual Basic masih banyak digunakan dan menghasilkan antarmuka pengguna grafis.[8]
C
[sunting | sunting sumber]Bahasa pemrograman C (1973) mendapatkan namanya karena bahasa BCPL digantikan oleh B, dan AT&T Bell Labs menyebut versi berikutnya "C". Tujuannya adalah menulis UNIX sistem operasi.[53] C merupakan bahasa yang relatif kecil sehingga memudahkan penulisan kompilator. Pertumbuhannya mengikuti perkembangan perangkat keras pada 1980-an.[53] Pertumbuhannya juga disebabkan oleh fasilitas yang dimilikinya dari bahasa rakitan, tetapi menggunakan sintaks tingkat tinggi. Bahasa ini menambahkan fitur-fitur tingkat lanjut seperti:
- assembler inline
- aritmetika pada pointer
- pointer ke fungsi
- operasi bit
- penggabungan bebas operator kompleks[53]

C memungkinkan pemrogram mengendalikan wilayah memori tempat data disimpan. Variabel global dan variabel statis memerlukan jumlah siklus clock paling sedikit untuk disimpan. Stack digunakan secara otomatis untuk deklarasi variabel standar. Memori heap dikembalikan ke variabel pointer dari fungsi malloc().
- Wilayah data global dan statis terletak tepat di atas wilayah program. (Wilayah program secara teknis disebut wilayah text. Di sinilah instruksi mesin disimpan.)
- Wilayah data global dan statis secara teknis terdiri atas dua wilayah.[61] Salah satunya disebut segmen data terinisialisasi, tempat variabel yang dideklarasikan dengan nilai bawaan disimpan. Wilayah lainnya disebut segmen block started by, tempat variabel yang dideklarasikan tanpa nilai bawaan disimpan.
- Variabel yang disimpan di wilayah data global dan statis memiliki alamat yang ditetapkan pada waktu kompilasi. Nilainya dipertahankan sepanjang masa hidup proses.
- Wilayah global dan statis menyimpan variabel global yang dideklarasikan di atas (di luar) fungsi
main().[62] Variabel global terlihat olehmain()dan setiap fungsi lain dalam kode sumber.
- Wilayah global dan statis menyimpan variabel global yang dideklarasikan di atas (di luar) fungsi
- Sebaliknya, deklarasi variabel di dalam
main(), fungsi lain, atau di dalam pembatas blok{}merupakan variabel lokal. Variabel lokal juga mencakup variabel parameter formal. Variabel parameter diapit tanda kurung dari definisi fungsi.[63] Parameter menyediakan antarmuka ke fungsi.
- Variabel lokal yang dideklarasikan menggunakan awalan
staticjuga disimpan di wilayah data global dan statis.[61] Berbeda dengan variabel global, variabel statis hanya terlihat di dalam fungsi atau blok. Variabel statis selalu mempertahankan nilainya. Salah satu contoh penggunaannya adalah fungsi berikut:[i]
- Variabel lokal yang dideklarasikan menggunakan awalan
int increment_counter() {
static int counter = 0;
counter++;
return counter;
}
- Wilayah stack adalah blok memori bersebelahan yang terletak di dekat alamat memori tertinggi.[64] Variabel yang ditempatkan di stack diisi dari atas ke bawah.[j][64] Sebuah stack pointer adalah register khusus yang melacak alamat memori terakhir yang diisi.[64] Variabel ditempatkan ke stack melalui instruksi PUSH dalam bahasa rakitan. Oleh karena itu, alamat variabel tersebut ditetapkan selama runtime. Variabel stack kehilangan lingkupnya melalui instruksi POP.
- Wilayah heap terletak di bawah stack.[61] Wilayah ini diisi dari bawah ke atas. Sistem operasi mengelola heap menggunakan heap pointer dan daftar blok memori yang dialokasikan.[66] Seperti stack, alamat variabel heap ditetapkan selama runtime. Kesalahan kehabisan memori terjadi ketika heap pointer dan stack pointer bertemu.
- C menyediakan fungsi pustaka
malloc()untuk mengalokasikan memori heap.[k][67] Pengisian heap dengan data merupakan fungsi penyalinan tambahan.[l] Variabel yang disimpan di heap dapat diteruskan ke fungsi secara efisien menggunakan pointer. Tanpa pointer, seluruh blok data harus diteruskan ke fungsi melalui stack.
- C menyediakan fungsi pustaka
C++
[sunting | sunting sumber]Pada 1970-an, insinyur perangkat lunak membutuhkan dukungan bahasa untuk memecah proyek besar menjadi modul.[68] Salah satu fitur yang jelas adalah memecah proyek besar secara fisik menjadi berkas terpisah. Fitur yang kurang jelas adalah memecah proyek besar secara logis menjadi tipe data abstrak.[68] Pada saat itu, bahasa pemrograman mendukung tipe data konkret (skalar) seperti bilangan integer, bilangan titik-mengambang, dan string karakter. Tipe data abstrak merupakan struktur dari tipe data konkret yang diberi nama baru. Sebagai contoh, daftar bilangan bulat dapat disebut IntegerList.
Kelas
[sunting | sunting sumber]Dalam terminologi berorientasi objek, tipe data abstrak disebut kelas. Namun, kelas hanyalah definisi; tidak ada memori yang dialokasikan. Ketika memori dialokasikan untuk suatu kelas dan diikat ke sebuah pengenal, kelas tersebut disebut objek.[69]
C++ (1985) awalnya disebut "C with Classes".[70] Bahasa ini dirancang untuk memperluas kemampuan C dengan menambahkan fasilitas berorientasi objek dari bahasa Simula.[71] Sebuah kelas C++ mengenkapsulasi item data yang berkaitan bersama fungsi-fungsi yang memanipulasinya.[72]
Bahasa imperatif berorientasi objek berkembang dengan menggabungkan kebutuhan akan kelas dan kebutuhan akan pemrograman fungsional yang aman.[73] Sebuah fungsi dalam bahasa berorientasi objek ditetapkan ke suatu kelas. Fungsi yang ditetapkan tersebut kemudian disebut metode, fungsi anggota, atau operasi. Pemrograman berorientasi objek adalah pelaksanaan operasi terhadap objek.[74]
Pewarisan
[sunting | sunting sumber]C++ mendukung sintaks untuk memodelkan hubungan subset/superset. Dalam teori himpunan, sebuah elemen dari subset mewarisi semua atribut yang terdapat dalam superset. Sebagai contoh, seorang siswa adalah seseorang. Oleh karena itu, himpunan siswa merupakan subset dari himpunan orang. Akibatnya, siswa mewarisi semua atribut yang umum bagi semua orang. Selain itu, siswa memiliki atribut unik yang tidak dimiliki orang lain. C++ memodelkan hubungan subset/superset menggunakan pewarisan.[75]
Ruang nama
[sunting | sunting sumber]Ruang nama C++ menyediakan konteks ketika terjadi konflik nama.[76] Nama kelas dan nama fungsi dapat digandakan dalam berkas kode sumber lain atau pustaka pihak ketiga. Untuk membungkus nama kelas dan nama fungsi dalam blok ruang nama, gunakan kata kunci namespace. Kata kunci tersebut diikuti oleh sebuah pengenal, dan bloknya diapit tanda kurung.
Untuk membuat instans kelas atau menjalankan fungsi yang berada dalam ruang nama, awali nama kelas atau fungsi dengan nama ruang nama yang diikuti dua titik dua. Sebagai contoh, foo::bar() menunjukkan fungsi bar() yang berada dalam ruang nama foo. Alternatifnya, jalankan direktif using yang diikuti nama ruang nama. Setelah itu, semua nama kelas dan fungsi dapat diakses tanpa awalan dua titik dua.
Modul
[sunting | sunting sumber]Modul C++ memberikan peningkatan dibandingkan direktif #include praprosesor lama.[77] Direktif #include memungkinkan berkas arbitrer disertakan ke dalam program C/C++. Tujuannya adalah memiliki sekumpulan konstanta, tipe data, dan deklarasi fungsi yang sama di seluruh aplikasi besar.[78]
Modul dikenali oleh kompilator dengan menyertakan pernyataan export module yang diikuti nama modul. Berkas kode sumber lainnya kemudian melakukan import terhadap nama modul yang sama untuk menjalankan tugas modul tersebut.[79]
Definisi kelas dan deklarasi bernama lainnya juga harus didahului pernyataan export agar terlihat oleh berkas kode sumber lainnya. Jika sebuah namespace diekspor, maka semua yang berada di dalam ruang nama tersebut juga diekspor.[80]
Contoh
[sunting | sunting sumber]Berikut adalah modul untuk kelas Grade dalam aplikasi yang memodelkan sebuah sekolah:
// Grade.cpp
// Pernyataan "export module" memungkinkan program lain "mengimpor" modul bernama 'wikipedia.examples.Grade'
export module wikipedia.examples.Grade;
// Deklarasikan ruang nama 'wikipedia::examples'
namespace wikipedia::examples {
// Definisikan kelas "Grade"
// Pernyataan "export" memungkinkan modul lain mengakses kelas ini
export class Grade {
private:
// Variabel kelas "letter" bertipe char
char letter;
public:
// Konstruktor
explicit Grade(char letter):
letter{letter} {}
// Operasi anggota
char getLetter() const {
return letter;
}
};
}
Sebuah fungsi konstruktor memiliki nama yang sama dengan nama kelas.[81] Fungsi tersebut dijalankan ketika sebuah objek dari suatu kelas dideklarasikan.[82]
Berikut adalah modul untuk kelas Person dalam aplikasi yang memodelkan sebuah sekolah:
// Person.cpp
export module wikipedia.examples.Person;
// Impor modul pustaka standar 'std'
import std;
// Masukkan tipe 'std::string' ke dalam lingkup
using std::string;
namespace wikipedia::examples {
export class Person {
protected:
// Variabel kelas "name" bertipe kelas std::string
string name;
public:
explicit Person(const string& name):
name{name} {}
string getName() const {
return name;
}
};
}
Berikut adalah modul untuk kelas Student dalam aplikasi yang memodelkan sebuah sekolah:
// Student.cpp
export module wikipedia.examples.Student;
import std;
import wikipedia.examples.Grade;
import wikipedia.examples.Person;
using std::string;
namespace wikipedia::examples {
// 'Student' adalah subkelas dari 'Person'
export class Student : public Person {
private:
Grade grade;
public:
Student(const string& name, const Grade& grade):
Person(name), grade{grade} {}
Grade getGrade() const {
return grade;
}
};
}
Sintaks public Person berarti bahwa kelas Student memperluas kelas Person, dengan mewarisi semua variabel dan metodenya (seperti name dan getName()).[83]
Berikut adalah program penggerak untuk demonstrasi:
// Main.cpp
import std;
import wikipedia.examples.Grade;
import wikipedia.examples.Student;
using wikipedia::examples::Grade;
using wikipedia::examples::Student;
int main() {
Student john("John Doe", Grade('A'));
std::println("Student name: {}, with grade {}", john.getName(), john.getGrade().getLetter());
}
Keluaran:
Student name: John Doe, with grade A
Bahasa deklaratif
[sunting | sunting sumber]Bahasa imperatif memiliki satu kritik utama: menetapkan sebuah ekspresi ke variabel non-lokal dapat menghasilkan efek samping yang tidak diinginkan.[84] Bahasa deklaratif umumnya menghilangkan pernyataan penugasan dan alur kontrol. Bahasa tersebut mendeskripsikan apa yang harus dihitung, bukan bagaimana menghitungnya. Dua kategori luas bahasa deklaratif adalah bahasa fungsional dan bahasa logika.
Prinsip di balik bahasa fungsional adalah menggunakan kalkulus lambda sebagai panduan untuk semantik yang terdefinisi dengan baik.[85] Dalam matematika, fungsi adalah aturan yang memetakan elemen dari sebuah ekspresi ke suatu rentang nilai. Perhatikan fungsi berikut:
times_10(x) = 10 * x
Ekspresi 10 * x dipetakan oleh fungsi times_10() ke suatu rentang nilai. Salah satu nilai tersebut adalah 20. Hal ini terjadi ketika x bernilai 2. Jadi, penerapan fungsi tersebut secara matematis ditulis sebagai:
times_10(2) = 20
Kompilator bahasa fungsional tidak akan menyimpan nilai ini dalam variabel. Sebaliknya, kompilator akan mendorong nilai tersebut ke stack komputer sebelum mengatur program counter kembali ke fungsi pemanggil. Fungsi pemanggil kemudian akan mengeluarkan nilai tersebut dari stack.[86]
Bahasa imperatif juga mendukung fungsi. Oleh karena itu, pemrograman fungsional dapat dicapai dalam bahasa imperatif jika pemrogram menggunakan disiplin tertentu. Namun, bahasa fungsional akan memaksakan disiplin tersebut kepada pemrogram melalui sintaksnya. Bahasa fungsional memiliki sintaks yang disesuaikan untuk menekankan apa yang dilakukan.[87]
Sebuah program fungsional dikembangkan dengan sekumpulan fungsi primitif yang diikuti oleh satu fungsi penggerak.[84] Perhatikan cuplikan berikut:
int max(int a, int b) {
return a < b ? b : a;
}
int min(int a, int b) {
return a < b ? a : b;
}
int range(int a, int b, int c) {
return max(a, max(b, c)) - min(a, min(b, c));
}
Fungsi primitifnya adalah max() dan min(). Fungsi penggeraknya adalah range().
Sebagai contoh, printf("%d", range(10, 4, 7)); akan mencetak 6.
Bahasa fungsional digunakan dalam penelitian ilmu komputer untuk mengeksplorasi fitur bahasa baru.[88] Selain itu, kurangnya efek samping membuatnya populer dalam pemrograman paralel dan pemrograman konkuren.[89] Namun, pengembang aplikasi lebih menyukai fitur berorientasi objek dari bahasa imperatif.[89]
Lisp
[sunting | sunting sumber]Lisp (1958) merupakan singkatan dari "LISt Processor".[90] Bahasa ini disesuaikan untuk memproses daftar. Struktur data lengkap dibentuk dengan membuat daftar yang berisi daftar-daftar. Di dalam memori, sebuah struktur data pohon dibangun. Secara internal, struktur pohon sangat sesuai untuk fungsi rekursif.[91] Sintaks untuk membangun pohon adalah mengapit elemen yang dipisahkan spasi dengan tanda kurung. Berikut adalah daftar yang terdiri dari tiga elemen. Dua elemen pertama merupakan daftar yang masing-masing terdiri dari dua elemen:
((A B) (HELLO WORLD) 94)
Lisp memiliki fungsi untuk mengekstraksi dan membangun kembali elemen.[92] Fungsi head() mengembalikan daftar yang berisi elemen pertama dalam daftar. Fungsi tail() mengembalikan daftar yang berisi semua elemen kecuali elemen pertama. Fungsi cons() mengembalikan daftar yang merupakan hasil penggabungan daftar-daftar lain. Oleh karena itu, ekspresi berikut akan mengembalikan daftar x:
cons(head(x), tail(x))
Salah satu kekurangan Lisp adalah ketika banyak fungsi ditumpuk, tanda kurung dapat terlihat membingungkan.[87] Lingkungan Lisp modern membantu memastikan pasangan tanda kurung cocok. Sebagai tambahan, Lisp mendukung operasi bahasa imperatif berupa pernyataan penugasan dan perulangan goto.[93] Selain itu, Lisp tidak memperhatikan tipe data elemen pada waktu kompilasi.[94] Sebaliknya, bahasa ini menetapkan (dan dapat menetapkan ulang) tipe data pada runtime. Penetapan tipe data pada runtime disebut pengikatan dinamis.[95] Meskipun pengikatan dinamis meningkatkan fleksibilitas bahasa, kesalahan pemrograman dapat bertahan hingga tahap akhir proses pengembangan perangkat lunak.[95]
Menulis program Lisp yang besar, andal, dan mudah dibaca membutuhkan perencanaan yang matang. Jika direncanakan dengan benar, program tersebut dapat jauh lebih pendek daripada program bahasa imperatif yang setara.[87] Lisp banyak digunakan dalam kecerdasan buatan. Namun, penggunaannya diterima hanya karena bahasa ini memiliki operasi bahasa imperatif, yang memungkinkan terjadinya efek samping yang tidak disengaja.[89]
ML
[sunting | sunting sumber]ML (1979) merupakan singkatan dari "Meta Language". ML memastikan bahwa hanya data dengan tipe yang sama yang dibandingkan satu sama lain.[96] Sebagai contoh, fungsi ini memiliki satu parameter masukan (bilangan bulat) dan mengembalikan bilangan bulat:
fun times_10(n : int) : int = 10 * n;
ML tidak berorientasi pada penggunaan tanda kurung seperti Lisp. Berikut adalah penerapan times_10():
times_10 2
Fungsi tersebut mengembalikan "20 : int". (Hasil dan tipe data dikembalikan.)
Seperti Lisp, ML disesuaikan untuk memproses daftar. Berbeda dengan Lisp, setiap elemen memiliki tipe data yang sama.[97] Selain itu, ML menetapkan tipe data suatu elemen pada waktu kompilasi. Penetapan tipe data pada waktu kompilasi disebut pengikatan statis. Pengikatan statis meningkatkan keandalan karena kompilator memeriksa konteks variabel sebelum variabel tersebut digunakan.[98]
Prolog
[sunting | sunting sumber]Prolog (1972) merupakan singkatan dari "PROgramming in LOGic". Prolog adalah bahasa pemrograman logika yang didasarkan pada logika formal. Bahasa ini dikembangkan oleh Alain Colmerauer dan Philippe Roussel di Marseille, Prancis. Bahasa ini merupakan implementasi dari Selective Linear Definite clause resolution, yang dipelopori oleh Robert Kowalski dan lainnya di Universitas Edinburgh.[99]
Blok penyusun program Prolog adalah fakta dan aturan. Berikut adalah contoh sederhana:
cat(tom). % tom adalah seekor kucing
mouse(jerry). % jerry adalah seekor tikus
animal(X) :- cat(X). % setiap kucing adalah hewan
animal(X) :- mouse(X). % setiap tikus adalah hewan
big(X) :- cat(X). % setiap kucing berukuran besar
small(X) :- mouse(X). % setiap tikus berukuran kecil
eat(X,Y) :- mouse(X), cheese(Y). % setiap tikus memakan setiap keju
eat(X,Y) :- big(X), small(Y). % setiap hewan besar memakan setiap hewan kecil
Setelah semua fakta dan aturan dimasukkan, sebuah pertanyaan dapat diajukan:
- Apakah Tom akan memakan Jerry?
?- eat(tom,jerry).
true
Contoh berikut menunjukkan bagaimana Prolog mengubah nilai huruf menjadi nilai numeriknya:
numeric_grade('A', 4).
numeric_grade('B', 3).
numeric_grade('C', 2).
numeric_grade('D', 1).
numeric_grade('F', 0).
numeric_grade(X, -1) :- not X = 'A', not X = 'B', not X = 'C', not X = 'D', not X = 'F'.
grade('The Student', 'A').
?- grade('The Student', X), numeric_grade(X, Y).
X = 'A',
Y = 4
Berikut adalah contoh yang komprehensif:[100]
1) Semua naga menyemburkan api, atau secara ekuivalen, sesuatu menyemburkan api jika sesuatu tersebut adalah naga:
billows_fire(X) :-
is_a_dragon(X).
2) Suatu makhluk menyemburkan api jika salah satu induknya menyemburkan api:
billows_fire(X) :-
is_a_creature(X),
is_a_parent_of(Y,X),
billows_fire(Y).
3) Sesuatu X merupakan induk dari sesuatu Y jika X adalah ibu dari Y atau X adalah ayah dari Y:
is_a_parent_of(X, Y):- is_the_mother_of(X, Y).
is_a_parent_of(X, Y):- is_the_father_of(X, Y).
4) Sesuatu adalah makhluk jika sesuatu tersebut adalah naga:
is_a_creature(X) :-
is_a_dragon(X).
5) Norberta adalah seekor naga, dan Puff adalah seekor makhluk. Norberta adalah ibu dari Puff.
is_a_dragon(norberta).
is_a_creature(puff).
is_the_mother_of(norberta, puff).
Aturan (2) merupakan definisi rekursif (induktif). Aturan ini dapat dipahami secara deklaratif tanpa perlu memahami bagaimana aturan tersebut dieksekusi.
Aturan (3) menunjukkan bagaimana fungsi direpresentasikan menggunakan relasi. Di sini, fungsi ibu dan ayah memastikan bahwa setiap individu hanya memiliki satu ibu dan satu ayah.
Prolog merupakan bahasa tanpa tipe. Meskipun demikian, pewarisan dapat direpresentasikan menggunakan predikat. Aturan (4) menyatakan bahwa makhluk merupakan kelas super dari naga.
Pertanyaan dijawab menggunakan penalaran mundur. Diberikan pertanyaan:
?- billows_fire(X).
Prolog menghasilkan dua jawaban:
X = norberta
X = puff
Penerapan praktis Prolog adalah representasi pengetahuan dan pemecahan masalah dalam kecerdasan buatan.
Pemrograman berorientasi objek
[sunting | sunting sumber]Pemrograman berorientasi objek adalah metode pemrograman untuk menjalankan operasi (fungsi) pada objek.[101] Gagasan dasarnya adalah mengelompokkan karakteristik suatu fenomena ke dalam sebuah wadah objek dan memberikan nama kepada wadah tersebut. Operasi pada fenomena tersebut juga dikelompokkan ke dalam wadah.[101] Pemrograman berorientasi objek berkembang dengan menggabungkan kebutuhan akan wadah dan kebutuhan akan pemrograman fungsional yang aman.[102] Metode pemrograman ini tidak harus terbatas pada bahasa berorientasi objek.[103] Dalam bahasa berorientasi objek, wadah objek disebut kelas. Dalam bahasa yang tidak berorientasi objek, sebuah struktur data (yang juga dikenal sebagai rekaman) dapat menjadi wadah objek. Untuk mengubah struktur data menjadi wadah objek, operasi perlu ditulis secara khusus untuk struktur tersebut. Struktur yang dihasilkan disebut tipe data abstrak.[104] Namun, pewarisan tidak tersedia. Meskipun demikian, kekurangan ini dapat diatasi.
Berikut adalah berkas header C untuk tipe data Grade dalam aplikasi yang memodelkan sebuah sekolah:
// Grade.h
#pragma once
typedef struct {
char letter;
} Grade;
// Konstruktor
Grade *grade_new(char letter);
// Destruktor
void grade_delete(Grade *g);
Fungsi grade_new() berperilaku seperti konstruktor C++, dengan membuat instans Grade baru.
Berikut adalah berkas sumber C untuk tipe data Grade dalam aplikasi yang memodelkan sebuah sekolah:
// Grade.c
#include <stdio.h>
#include <stdlib.h>
#include "Grade.h"
Grade *grade_new(char letter) {
Grade *grade;
// Alokasikan dan nolkan memori heap
if (!(grade = calloc(1, sizeof(Grade)))) {
fprintf(stderr, "Error: calloc() returned empty.\n");
return NULL;
}
grade->letter = letter;
return grade;
}
void grade_delete(Grade *g) {
free(g);
}
Berikut adalah berkas header C untuk tipe data Person dalam aplikasi yang memodelkan sebuah sekolah:
// Person.h
#pragma once
typedef struct {
char *name;
} Person;
Person *person_new(char *name);
void person_delete(Person *p);
Berikut adalah berkas sumber C untuk tipe data Person dalam aplikasi yang memodelkan sebuah sekolah:
// Person.c
#include <stdlib.h>
#include "Person.h"
Person *person_new(char *name) {
Person *person;
// Pemeriksaan kesalahan dihilangkan
person = calloc(1, sizeof(Person));
person->name = name;
return person;
}
void person_delete(Person *p) {
free(p);
}
Berikut adalah berkas header C untuk tipe data Student dalam aplikasi yang memodelkan sebuah sekolah:
// Student.h
#pragma once
#include "Grade.h"
#include "Person.h"
typedef struct {
Person *person;
Grade *grade;
} Student;
Student *student_new(char *name);
void *student_delete(Student *s);
Berikut adalah berkas sumber C untuk tipe data Student dalam aplikasi yang memodelkan sebuah sekolah:
// student.c
#include <stdlib.h>
#include "Person.h"
#include "Student.h"
Student *student_new(char *name) {
Student *student;
// Pertama, konstruksi Student
student = calloc(1, sizeof(Student));
// Kedua, konstruksi Person
student->person = person_new(name);
return student;
}
void student_delete(Student *s) {
person_delete(s->person);
free(s);
}
Berikut adalah program penggerak untuk demonstrasi:
// Main.c
#include <stdio.h>
#include "Student.h"
int main() {
Student *john = student_new("John Doe");
john->grade = grade_new('A');
printf(
"Student name: %s, with grade %d\n"
john->person->name,
john->grade->letter
);
grade_delete(john->grade);
student_delete(john);
return 0;
}
Strategi formal untuk membangun objek berorientasi objek adalah:[105]
- Mengidentifikasi objek. Kemungkinan besar objek tersebut berupa kata benda.
- Mengidentifikasi atribut setiap objek. Apa yang membantu mendeskripsikan objek tersebut?
- Mengidentifikasi tindakan setiap objek. Kemungkinan besar tindakan tersebut berupa kata kerja.
- Mengidentifikasi hubungan dari satu objek ke objek lainnya. Kemungkinan besar hubungan tersebut berupa kata kerja.
Sebagai contoh:
- Seseorang adalah manusia yang diidentifikasi berdasarkan nama.
- Nilai adalah suatu pencapaian yang diidentifikasi berdasarkan huruf.
- Siswa adalah seseorang yang memperoleh nilai.
Sintaks dan semantik
[sunting | sunting sumber]
Sintaks sebuah program komputer adalah daftar aturan produksi yang membentuk tata bahasanya.[106] Tata bahasa sebuah bahasa pemrograman menempatkan deklarasi, ekspresi, dan pernyataan secara benar.[107] Yang melengkapi sintaks suatu bahasa adalah semantiknya. Semantik menjelaskan makna yang melekat pada berbagai konstruksi sintaksis.[108] Suatu konstruksi sintaksis mungkin memerlukan deskripsi semantik karena sebuah aturan produksi dapat memiliki interpretasi yang tidak valid.[109] Selain itu, bahasa yang berbeda mungkin memiliki sintaks yang sama; namun, perilakunya dapat berbeda.
Sintaks sebuah bahasa dijelaskan secara formal dengan mencantumkan aturan produksi. Sementara sintaks bahasa alami sangat rumit, suatu subset bahasa Inggris dapat memiliki daftar aturan produksi berikut:[110]
- sebuah kalimat terdiri atas frasa nomina yang diikuti oleh frasa verba;
- sebuah frasa nomina terdiri atas artikel yang diikuti oleh adjektiva yang diikuti oleh nomina;
- sebuah frasa verba terdiri atas verba yang diikuti oleh frasa nomina;
- sebuah artikel adalah 'the';
- sebuah adjektiva adalah 'big' atau
- sebuah adjektiva adalah 'small';
- sebuah nomina adalah 'cat' atau
- sebuah nomina adalah 'mouse';
- sebuah verba adalah 'eats';
Kata-kata yang dicetak tebal dikenal sebagai nonterminal. Kata-kata dalam 'tanda kutip tunggal' dikenal sebagai terminal.[111]
Dari daftar aturan produksi ini, kalimat lengkap dapat dibentuk menggunakan serangkaian penggantian.[112] Prosesnya adalah mengganti nonterminal dengan nonterminal atau terminal yang valid. Proses penggantian diulangi hingga hanya tersisa terminal. Salah satu kalimat yang valid adalah:
- kalimat
- frasa nomina frasa verba
- artikel adjektiva nomina frasa verba
- the adjektiva nomina frasa verba
- the big nomina frasa verba
- the big cat frasa verba
- the big cat verba frasa nomina
- the big cat eats frasa nomina
- the big cat eats artikel adjektiva nomina
- the big cat eats the adjektiva nomina
- the big cat eats the small nomina
- the big cat eats the small mouse
Namun, kombinasi lain menghasilkan kalimat yang tidak valid:
- the small mouse eats the big cat
Oleh karena itu, diperlukan semantik untuk menjelaskan makna aktivitas eat dengan benar.
Salah satu metode untuk mencantumkan aturan produksi disebut Backus–Naur form (BNF).[113] BNF menjelaskan sintaks suatu bahasa dan BNF sendiri memiliki sintaks. Definisi rekursif ini merupakan contoh metabahasa.[108] Sintaks BNF mencakup:
::=yang berarti terdiri atas ketika sebuah nonterminal berada di sebelah kanannya. Simbol tersebut berarti adalah ketika terminal berada di sebelah kanannya.|yang berarti atau.<dan>yang mengapit nonterminal.
Dengan menggunakan BNF, suatu subset bahasa Inggris dapat memiliki daftar aturan produksi berikut:
<sentence> ::= <noun-phrase><verb-phrase>
<noun-phrase> ::= <article><adjective><noun>
<verb-phrase> ::= <verb><noun-phrase>
<article> ::= the
<adjective> ::= big | small
<noun> ::= cat | mouse
<verb> ::= eats
Dengan menggunakan BNF, sebuah bilangan bulat bertanda memiliki daftar aturan produksi berikut:[114]
<signed-integer> ::= <sign><integer>
<sign> ::= + | -
<integer> ::= <digit> | <digit><integer>
<digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Perhatikan aturan produksi rekursif:
<integer> ::= <digit> | <digit><integer>
Hal ini memungkinkan jumlah kemungkinan yang tidak terbatas. Oleh karena itu, diperlukan semantik untuk menjelaskan batas jumlah digit.
Perhatikan kemungkinan adanya nol di depan dalam aturan produksi:
<integer> ::= <digit> | <digit><integer>
<digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Oleh karena itu, diperlukan semantik untuk menjelaskan bahwa nol di depan harus diabaikan.
Terdapat dua metode formal untuk menjelaskan semantik, yaitu semantik denotasional dan semantik aksiomatik.[115]
Rekayasa perangkat lunak dan pemrograman komputer
[sunting | sunting sumber]
Rekayasa perangkat lunak adalah berbagai teknik untuk menghasilkan program komputer yang berkualitas.[116] Pemrograman komputer adalah proses menulis atau menyunting kode sumber. Dalam lingkungan formal, seorang analis sistem akan mengumpulkan informasi dari para manajer mengenai seluruh proses organisasi yang akan diotomatisasi. Profesional ini kemudian menyiapkan rencana terperinci untuk sistem baru atau sistem yang dimodifikasi.[117] Rencana tersebut analog dengan cetak biru seorang arsitek.[117]
Tujuan kinerja
[sunting | sunting sumber]Analis sistem bertujuan menyampaikan informasi yang tepat kepada orang yang tepat pada waktu yang tepat.[118] Faktor-faktor penting untuk mencapai tujuan ini adalah:[118]
- Kualitas keluaran. Apakah keluaran berguna untuk pengambilan keputusan?
- Keakuratan keluaran. Apakah keluaran mencerminkan situasi yang sebenarnya?
- Format keluaran. Apakah keluaran mudah dipahami?
- Kecepatan keluaran. Informasi yang peka terhadap waktu penting ketika berkomunikasi dengan pelanggan secara waktu nyata.
Tujuan biaya
[sunting | sunting sumber]Pencapaian tujuan kinerja harus diseimbangkan dengan seluruh biaya, termasuk:[119]
- Biaya pengembangan.
- Biaya keunikan. Sistem yang dapat digunakan kembali mungkin mahal. Namun, sistem tersebut mungkin lebih disukai daripada sistem dengan penggunaan terbatas.
- Biaya perangkat keras.
- Biaya pengoperasian.
Penerapan proses pengembangan sistem akan mengurangi dampak aksioma: semakin terlambat suatu kesalahan terdeteksi dalam proses, semakin mahal biaya untuk memperbaikinya.[120]
Model air terjun
[sunting | sunting sumber]Model air terjun adalah penerapan suatu proses pengembangan sistem.[121] Sebagaimana tersirat dari nama air terjun, fase-fase dasarnya saling tumpang tindih:[122]
- Fase investigasi bertujuan memahami masalah yang mendasarinya.
- Fase analisis bertujuan memahami solusi-solusi yang mungkin.
- Fase desain bertujuan merencanakan solusi terbaik.
- Fase implementasi bertujuan memprogram solusi terbaik.
- Fase pemeliharaan berlangsung sepanjang masa hidup sistem. Perubahan pada sistem setelah diterapkan mungkin diperlukan.[123] Kesalahan mungkin ada, termasuk kesalahan spesifikasi, kesalahan desain, atau kesalahan pengodean. Perbaikan mungkin diperlukan. Adaptasi mungkin diperlukan untuk merespons lingkungan yang berubah.
Pemrogram komputer
[sunting | sunting sumber]Seorang pemrogram komputer adalah spesialis yang bertanggung jawab untuk menulis atau memodifikasi kode sumber guna menerapkan rencana terperinci.[117] Tim pemrograman kemungkinan diperlukan karena sebagian besar sistem terlalu besar untuk diselesaikan oleh satu pemrogram saja.[124] Namun, menambahkan pemrogram ke suatu proyek belum tentu memperpendek waktu penyelesaian. Sebaliknya, hal tersebut dapat menurunkan kualitas sistem.[124] Agar efektif, modul program perlu didefinisikan dan didistribusikan kepada anggota tim.[124] Selain itu, anggota tim harus berinteraksi satu sama lain dengan cara yang bermakna dan efektif.[124]
Pemrogram komputer dapat melakukan pemrograman dalam skala kecil: pemrograman di dalam satu modul.[125] Kemungkinan besar sebuah modul akan menjalankan modul yang terdapat dalam berkas kode sumber lainnya. Oleh karena itu, pemrogram komputer dapat melakukan pemrograman dalam skala besar: memprogram modul agar dapat saling terhubung secara efektif.[125] Pemrograman dalam skala besar mencakup kontribusi terhadap application programming interface (API).
Modul program
[sunting | sunting sumber]Pemrograman modular adalah teknik untuk menyempurnakan program bahasa imperatif. Program yang disempurnakan dapat mengurangi ukuran perangkat lunak, memisahkan tanggung jawab, dan dengan demikian mengurangi penuaan perangkat lunak. Sebuah modul program adalah rangkaian pernyataan yang dibatasi di dalam sebuah blok dan secara bersama-sama diidentifikasi dengan sebuah nama.[126] Modul memiliki fungsi, konteks, dan logika:[127]
- Fungsi suatu modul adalah apa yang dilakukannya.
- Konteks suatu modul adalah elemen-elemen yang dikenai operasi.
- Logika suatu modul adalah bagaimana modul tersebut menjalankan fungsinya.
Nama modul harus terlebih dahulu diturunkan dari fungsinya, kemudian dari konteksnya. Logika tidak boleh menjadi bagian dari nama.[127] Sebagai contoh, function compute_square_root( x ) atau function compute_square_root_integer( i : integer ) merupakan nama modul yang sesuai. Namun, function compute_square_root_by_division( x ) tidak sesuai.
Derajat interaksi di dalam sebuah modul adalah tingkat kohesi-nya.[127] Kohesi merupakan penilaian terhadap hubungan antara nama modul dan fungsinya. Derajat interaksi antar modul adalah tingkat kopling.[128] Kopling merupakan penilaian terhadap hubungan antara konteks modul dan elemen-elemen yang dikenai operasi.
Kohesi
[sunting | sunting sumber]Tingkat kohesi dari yang terburuk hingga yang terbaik adalah:[129]
- Kohesi kebetulan (Coincidental Cohesion): Sebuah modul memiliki kohesi kebetulan jika menjalankan banyak fungsi dan fungsi-fungsi tersebut sama sekali tidak berkaitan. Contohnya,
function read_sales_record_print_next_line_convert_to_float(). Kohesi kebetulan dapat terjadi dalam praktik jika manajemen memberlakukan aturan yang tidak masuk akal. Misalnya, "Setiap modul harus memiliki antara 35 dan 50 pernyataan yang dapat dieksekusi."[129] - Kohesi logis (Logical Cohesion): Sebuah modul memiliki kohesi logis jika tersedia serangkaian fungsi, tetapi hanya salah satunya yang dijalankan. Contohnya,
function perform_arithmetic( perform_addition, a, b ). - Kohesi temporal (Temporal Cohesion): Sebuah modul memiliki kohesi temporal jika menjalankan fungsi-fungsi yang berkaitan dengan waktu. Salah satu contohnya adalah
function initialize_variables_and_open_files(). Contoh lainnya adalahstage_one(),stage_two(), ... - Kohesi prosedural (Procedural Cohesion): Sebuah modul memiliki kohesi prosedural jika menjalankan beberapa fungsi yang hanya berkaitan secara longgar. Contohnya,
function read_part_number_update_employee_record(). - Kohesi komunikasional (Communicational Cohesion): Sebuah modul memiliki kohesi komunikasional jika menjalankan beberapa fungsi yang berkaitan erat. Contohnya,
function read_part_number_update_sales_record(). - Kohesi informasional (Informational Cohesion): Sebuah modul memiliki kohesi informasional jika menjalankan beberapa fungsi, tetapi setiap fungsi memiliki titik masuk dan keluar sendiri. Selain itu, fungsi-fungsi tersebut berbagi struktur data yang sama. Kelas berorientasi objek bekerja pada tingkat ini.
- Kohesi fungsional (Functional Cohesion): Sebuah modul memiliki kohesi fungsional jika mencapai satu tujuan dan hanya bekerja pada variabel lokal. Selain itu, modul tersebut dapat digunakan kembali dalam konteks lain.
Kopling
[sunting | sunting sumber]Tingkat kopling dari yang terburuk hingga yang terbaik adalah:[128]
- Kopling konten (Content Coupling): Sebuah modul memiliki kopling konten jika memodifikasi variabel lokal dari fungsi lain. COBOL dahulu melakukan hal ini dengan verba alter.
- Kopling umum (Common Coupling): Sebuah modul memiliki kopling umum jika memodifikasi variabel global.
- Kopling kontrol (Control Coupling): Sebuah modul memiliki kopling kontrol jika modul lain dapat memodifikasi alur kontrolnya. Contohnya,
perform_arithmetic( perform_addition, a, b ). Sebaliknya, kontrol seharusnya ditentukan oleh susunan objek yang dikembalikan. - Kopling cap (Stamp Coupling): Sebuah modul memiliki kopling cap jika sebuah elemen dari struktur data yang diberikan sebagai parameter dimodifikasi. Kelas berorientasi objek bekerja pada tingkat ini.
- Kopling data (Data Coupling): Sebuah modul memiliki kopling data jika semua parameter masukan diperlukan dan tidak ada yang dimodifikasi. Selain itu, hasil fungsi dikembalikan sebagai satu objek.
Analisis aliran data
[sunting | sunting sumber]
Analisis aliran data adalah metode desain yang digunakan untuk mencapai modul dengan kohesi fungsional dan kopling data.[130] Masukan untuk metode ini adalah diagram aliran data. Diagram aliran data adalah sekumpulan oval yang mewakili modul. Nama setiap modul ditampilkan di dalam ovalnya. Modul dapat berada pada tingkat yang dapat dieksekusi atau tingkat fungsi.
Diagram tersebut juga memiliki panah yang menghubungkan modul satu sama lain. Panah yang menunjuk ke dalam modul mewakili sekumpulan masukan. Setiap modul seharusnya hanya memiliki satu panah yang keluar darinya untuk mewakili objek keluaran tunggalnya. (Secara opsional, panah pengecualian tambahan dapat keluar.) Sebuah rangkaian oval berbentuk rantai daisy akan menyampaikan keseluruhan algoritma. Modul masukan harus mengawali diagram. Modul masukan harus terhubung ke modul transformasi. Modul transformasi harus terhubung ke modul keluaran.[131]
Kategori fungsional
[sunting | sunting sumber]
Program komputer dapat dikategorikan berdasarkan fungsi. Kategori fungsional utama adalah perangkat lunak aplikasi dan perangkat lunak sistem. Perangkat lunak sistem mencakup sistem operasi, yang menghubungkan perangkat keras komputer dengan perangkat lunak aplikasi.[132] Tujuan sistem operasi adalah menyediakan lingkungan tempat perangkat lunak aplikasi dapat dijalankan secara nyaman dan efisien.[132] Baik perangkat lunak aplikasi maupun perangkat lunak sistem menjalankan program utilitas. Pada tingkat perangkat keras, sebuah program mikrokode mengendalikan rangkaian di seluruh unit pemrosesan pusat.
Perangkat lunak aplikasi
[sunting | sunting sumber]Perangkat lunak aplikasi merupakan kunci untuk membuka potensi sistem komputer.[133] Perangkat lunak aplikasi perusahaan menggabungkan aplikasi akuntansi, personalia, pelanggan, dan pemasok. Contohnya mencakup perencanaan sumber daya perusahaan, manajemen hubungan pelanggan, dan perangkat lunak manajemen rantai pasokan.
Aplikasi perusahaan dapat dikembangkan secara internal sebagai perangkat lunak proprietari yang dibuat khusus.[134] Alternatifnya, aplikasi tersebut dapat dibeli sebagai perangkat lunak siap pakai. Perangkat lunak yang dibeli dapat dimodifikasi untuk menyediakan perangkat lunak kustom. Jika aplikasi dikustomisasi, sumber daya perusahaan digunakan atau sumber daya tersebut dialihdayakan. Pengembangan perangkat lunak yang dialihdayakan dapat dilakukan oleh vendor perangkat lunak asli atau pengembang pihak ketiga.[135]
Keuntungan potensial perangkat lunak yang dikembangkan secara internal adalah fitur dan laporan dapat dikembangkan sesuai spesifikasi secara tepat.[136] Manajemen juga dapat terlibat dalam proses pengembangan dan memberikan tingkat kendali tertentu.[137] Manajemen dapat memutuskan untuk menanggapi inisiatif baru pesaing atau menerapkan kebutuhan pelanggan atau pemasok.[138] Merger atau akuisisi mungkin mengharuskan perubahan pada perangkat lunak perusahaan. Kerugian potensial perangkat lunak yang dikembangkan secara internal adalah waktu dan biaya sumber daya dapat menjadi sangat besar.[134] Selain itu, risiko terkait fitur dan kinerja dapat muncul.
Keuntungan potensial perangkat lunak siap pakai adalah biaya awal dapat diketahui, kebutuhan dasar seharusnya terpenuhi, serta kinerja dan keandalannya telah terbukti melalui rekam jejak.[134] Kerugian potensial perangkat lunak siap pakai adalah perangkat lunak tersebut mungkin memiliki fitur yang tidak diperlukan dan membingungkan pengguna akhir, mungkin tidak memiliki fitur yang dibutuhkan perusahaan, dan aliran datanya mungkin tidak sesuai dengan proses kerja perusahaan.[134]
Penyedia layanan aplikasi
[sunting | sunting sumber]Salah satu pendekatan untuk memperoleh aplikasi perusahaan yang dikustomisasi secara ekonomis adalah melalui penyedia layanan aplikasi.[139] Perusahaan khusus menyediakan perangkat keras, perangkat lunak kustom, dan dukungan pengguna akhir. Mereka dapat mempercepat pengembangan aplikasi baru karena memiliki staf sistem informasi yang terampil. Keuntungan terbesar adalah sumber daya internal terbebas dari tugas mempekerjakan staf dan mengelola proyek komputer yang kompleks.[139] Banyak penyedia layanan aplikasi menargetkan perusahaan kecil yang berkembang pesat dengan sumber daya sistem informasi yang terbatas.[139] Di sisi lain, perusahaan yang lebih besar dengan sistem utama kemungkinan sudah memiliki infrastruktur teknis sendiri. Salah satu risikonya adalah harus mempercayakan informasi sensitif kepada organisasi eksternal. Risiko lainnya adalah harus mempercayai keandalan infrastruktur penyedia.[139]
Sistem operasi
[sunting | sunting sumber]
Penjadwalan, preempsi, peralihan konteks
Sistem operasi adalah perangkat lunak tingkat rendah yang mendukung fungsi dasar komputer, seperti penjadwalan proses dan pengendalian periferal.[132]
Pada tahun 1950-an, pemrogram yang juga bertindak sebagai operator akan menulis sebuah program dan menjalankannya. Setelah program selesai dieksekusi, keluarannya mungkin dicetak, atau mungkin dilubangi pada pita kertas atau kartu untuk diproses kemudian.[30] Lebih sering daripada tidak, program tersebut tidak bekerja. Pemrogram kemudian melihat lampu konsol dan mengutak-atik sakelar konsol. Jika kurang beruntung, cetakan memori dibuat untuk dipelajari lebih lanjut. Pada tahun 1960-an, pemrogram mengurangi jumlah waktu yang terbuang dengan mengotomatiskan pekerjaan operator. Sebuah program yang disebut sistem operasi disimpan di dalam komputer setiap saat.[140]
Istilah sistem operasi dapat merujuk pada dua tingkat perangkat lunak.[141] Sistem operasi dapat merujuk pada program kernel yang mengelola proses, memori, dan perangkat. Dalam arti yang lebih luas, sistem operasi dapat merujuk pada keseluruhan paket perangkat lunak inti. Paket tersebut mencakup program kernel, penerjemah baris perintah, antarmuka pengguna grafis, program utilitas, dan penyunting kode sumber.[141]
Program kernel
[sunting | sunting sumber]
Tujuan utama kernel adalah mengelola sumber daya komputer yang terbatas:
- Program kernel harus melakukan penjadwalan proses,[142] yang juga dikenal sebagai peralihan konteks. Kernel membuat process control block ketika sebuah program komputer dipilih untuk dieksekusi. Namun, program yang sedang dieksekusi hanya memperoleh akses eksklusif ke unit pemrosesan pusat selama suatu irisan waktu. Untuk memberikan setiap pengguna kesan akses berkelanjutan, kernel dengan cepat melakukan preempsi terhadap setiap blok kontrol proses untuk mengeksekusi blok lainnya. Tujuan pengembang pemrograman sistem adalah meminimalkan latensi pengiriman.

- Program kernel harus melakukan manajemen memori.
- Ketika kernel pertama kali memuat suatu berkas eksekusi ke dalam memori, kernel membagi ruang alamat secara logis menjadi wilayah.[143] Kernel memelihara tabel wilayah utama dan banyak tabel wilayah per proses (pregion)—satu untuk setiap proses yang berjalan.[143] Tabel-tabel ini membentuk ruang alamat virtual. Tabel wilayah utama digunakan untuk menentukan lokasi isinya dalam memori fisik. Tabel pregion memungkinkan setiap proses memiliki pregion program (teks), pregion data, dan pregion stack sendiri.
- Pregion program menyimpan instruksi mesin. Karena instruksi mesin tidak berubah, pregion program dapat digunakan bersama oleh banyak proses dari executable yang sama.[143]
- Untuk menghemat waktu dan memori, kernel dapat memuat hanya blok instruksi eksekusi dari kandar cakram, bukan seluruh berkas eksekusi sekaligus.[142]
- Kernel bertanggung jawab menerjemahkan alamat virtual menjadi alamat fisik. Kernel dapat meminta data dari pengendali memori dan, sebagai gantinya, menerima galat halaman.[144] Jika demikian, kernel mengakses unit manajemen memori untuk mengisi wilayah data fisik dan menerjemahkan alamat tersebut.[145]
- Kernel mengalokasikan memori dari heap atas permintaan suatu proses.[146] Ketika proses selesai menggunakan memori tersebut, proses dapat meminta agar memori tersebut dibebaskan.[147] Jika proses berakhir tanpa meminta agar seluruh memori yang dialokasikan dibebaskan, kernel melakukan pengumpulan sampah untuk membebaskan memori tersebut.[148]
- Kernel juga memastikan bahwa suatu proses hanya mengakses memorinya sendiri, bukan memori kernel atau proses lain.[142]
- Program kernel harus melakukan manajemen sistem berkas.[142] Kernel memiliki instruksi untuk membuat, mengambil, memperbarui, dan menghapus berkas.
- Program kernel harus melakukan manajemen perangkat.[142] Kernel menyediakan program untuk menstandarkan dan menyederhanakan antarmuka ke tetikus, papan ketik, kandar cakram, pencetak, dan perangkat lainnya. Selain itu, kernel harus mengatur akses ke suatu perangkat jika dua proses memintanya pada saat yang sama.
- Program kernel harus melakukan manajemen jaringan.[149] Kernel mengirim dan menerima paket atas nama proses. Salah satu layanan utamanya adalah menemukan rute yang efisien menuju sistem tujuan.
- Program kernel harus menyediakan fungsi tingkat sistem untuk digunakan oleh pemrogram.[150]
- Pemrogram mengakses berkas melalui antarmuka yang relatif sederhana, yang pada gilirannya menjalankan antarmuka I/O tingkat rendah yang relatif rumit. Antarmuka tingkat rendah tersebut mencakup pembuatan berkas, deskriptor berkas, pencarian berkas, pembacaan fisik, dan penulisan fisik.
- Pemrogram membuat proses melalui antarmuka yang relatif sederhana, yang pada gilirannya menjalankan antarmuka tingkat rendah yang relatif rumit.
- Pemrogram melakukan aritmetika tanggal/waktu melalui antarmuka yang relatif sederhana, yang pada gilirannya menjalankan antarmuka waktu tingkat rendah yang relatif rumit.[151]
- Program kernel harus menyediakan saluran komunikasi antara proses yang sedang dieksekusi.[152] Untuk sistem perangkat lunak yang besar, mungkin diinginkan untuk merekayasa sistem menjadi proses-proses yang lebih kecil. Proses dapat berkomunikasi satu sama lain dengan mengirim dan menerima sinyal.
Pada awalnya, sistem operasi diprogram dalam bahasa rakitan; namun, sistem operasi modern biasanya ditulis dalam bahasa tingkat tinggi seperti C, Objective-C, dan Swift.[m]
Program utilitas
[sunting | sunting sumber]Sebuah utilitas adalah program yang membantu administrasi sistem dan eksekusi perangkat lunak. Sistem operasi biasanya menyediakan utilitas untuk memeriksa perangkat keras seperti penyimpanan, memori, pengeras suara, dan pencetak.[153] Sebuah utilitas dapat mengoptimalkan kinerja perangkat penyimpanan. Utilitas sistem memantau kinerja perangkat keras dan jaringan serta dapat memicu peringatan ketika suatu metrik berada di luar rentang normal.[154] Sebuah utilitas dapat mengompresi berkas untuk mengurangi ruang penyimpanan dan waktu transmisi jaringan.[153] Sebuah utilitas dapat mengurutkan dan menggabungkan kumpulan data[154] atau mendeteksi virus komputer.[154]
Program mikrokode
[sunting | sunting sumber]Sebuah program mikrokode adalah interpreter tingkat paling bawah[n] yang mengendalikan datapath komputer yang digerakkan oleh perangkat lunak.[156] (Kemajuan dalam perangkat keras telah memindahkan operasi ini ke rangkaian eksekusi perangkat keras.)[156] Instruksi mikrokode memungkinkan pemrogram lebih mudah mengimplementasikan tingkat logika digital[157]—perangkat keras komputer yang sebenarnya. Tingkat logika digital merupakan batas antara ilmu komputer dan teknik komputer.[158]
Sebuah gerbang logika adalah transistor kecil yang dapat menghasilkan salah satu dari dua sinyal: hidup atau mati.[159]
- Satu transistor membentuk gerbang NOT.
- Menghubungkan dua transistor secara seri membentuk gerbang NAND.
- Menghubungkan dua transistor secara paralel membentuk gerbang NOR.
- Menghubungkan gerbang NOT ke gerbang NAND membentuk gerbang AND.
- Menghubungkan gerbang NOT ke gerbang NOR membentuk gerbang OR.
Kelima gerbang ini membentuk blok pembangun aljabar biner—fungsi logika digital komputer.
Instruksi mikrokode adalah mnemonik yang dapat digunakan pemrogram untuk menjalankan fungsi logika digital alih-alih membentuknya dalam aljabar biner. Instruksi tersebut disimpan dalam penyimpanan kontrol CPU.[160] Instruksi tingkat perangkat keras ini memindahkan data di seluruh jalur data.
Siklus instruksi mikro dimulai ketika microsequencer menggunakan penghitung program mikronya untuk mengambil instruksi mesin berikutnya dari memori akses acak.[161] Langkah berikutnya adalah mendekode instruksi mesin dengan memilih jalur keluaran yang tepat menuju modul perangkat keras.[162] Langkah terakhir adalah mengeksekusi instruksi menggunakan kumpulan gerbang pada modul perangkat keras.

Instruksi untuk melakukan aritmetika diteruskan melalui unit logika aritmetika (ALU).[163] ALU memiliki rangkaian untuk melakukan operasi dasar guna menjumlahkan, menggeser, dan membandingkan bilangan bulat. Dengan menggabungkan dan mengulang operasi dasar melalui ALU, CPU menjalankan operasi aritmetika yang kompleks.
Instruksi mikrokode memindahkan data antara CPU dan pengendali memori. Instruksi mikrokode pengendali memori memanipulasi dua register. Register alamat memori digunakan untuk mengakses alamat setiap sel memori. Register data memori digunakan untuk menetapkan dan membaca isi setiap sel.[164]
Catatan
[sunting | sunting sumber]- ↑ Bahasa Prolog memungkinkan basis data fakta dan aturan dimasukkan dalam urutan apa pun. Namun, pertanyaan tentang suatu basis data harus berada di bagian paling akhir.
- ↑ Permintaan tersebut dapat dilakukan oleh pengguna atau program lain.
- ↑ Berkas dapat dieksekusi memiliki setiap instruksi mesin yang sudah siap untuk CPU.
- ↑ Untuk informasi lebih lanjut, lihat X86 assembly language#Instruction types.
- ↑ diperkenalkan pada tahun 1999
- ↑ Meskipun ini merupakan bilangan desimal, kode PDP-11 selalu dinyatakan dalam oktal.
- ↑ Operator seperti
x++biasanya dikompilasi menjadi satu instruksi. - ↑ Nomor baris biasanya dinaikkan sebesar 10 untuk menyediakan ruang jika pernyataan tambahan ditambahkan kemudian.
- ↑ Fungsi ini dapat ditulis secara lebih ringkas sebagai
Variabel statis secara otomatis diinisialisasi menjadi nol.
int increment_counter() { static int counter; return ++counter; }
++counteradalah operator increment awalan. - ↑ Hal ini berlawanan dengan metafora stack, yang biasanya berkembang dari bawah ke atas.
- ↑ C juga menyediakan fungsi
calloc()untuk mengalokasikan memori heap. Fungsi ini menyediakan dua layanan tambahan: 1) memungkinkan pemrogram membuat larik dengan ukuran sembarang; 2) menetapkan setiap sel memori menjadi nol. - ↑ Untuk variabel string, C menyediakan fungsi
strdup(). Fungsi tersebut menjalankan fungsi alokasi sekaligus fungsi penyalinan. - ↑ Sistem operasi UNIX ditulis dalam C, macOS ditulis dalam Objective-C, dan Swift menggantikan Objective-C.
- ↑ Interpreter tingkat paling bawah secara teknis disebut lapisan Tingkat 1. Lapisan Tingkat 0 adalah lapisan logika digital. Terdapat tiga lapisan tengah, dan lapisan Tingkat 5 adalah lapisan bahasa berorientasi masalah.[155]
Referensi
[sunting | sunting sumber]- ↑ "ISO/IEC 2382:2015". ISO. 2020-09-03. Diarsipkan dari versi aslinya tanggal 2016-06-17. Diakses tanggal 2022-05-26.
[Software includes] all or part of the programs, procedures, rules, and associated documentation of an information processing system.
- ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 7. ISBN 0-201-71012-9.
An alternative to compiling a source program is to use an interpreter. An interpreter can directly execute a source program[.]
- ↑ Kerrisk, Michael (2010). The Linux Programming Interface. No Starch Press. hlm. 22. ISBN 978-1-59327-220-3.
The kernel can load a new program into memory[.]
- ↑ Silberschatz, Abraham (1994). Operating System Concepts, Fourth Edition. Addison-Wesley. hlm. 98. ISBN 978-0-201-50480-4.
Informally, a process is a program in execution.
- ↑ Tanenbaum, Andrew S. (1990). Structured Computer Organization, Third Edition. Prentice Hall. hlm. 32. ISBN 978-0-13-854662-5.
- ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 7. ISBN 0-201-71012-9.
- ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 30. ISBN 0-201-71012-9.
Their intention was to produce a language that was very simple for students to learn[.]
- 1 2 3 Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 31. ISBN 0-201-71012-9.
- 1 2 3 4 5 6 Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 30. ISBN 0-201-71012-9.
- ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 30. ISBN 0-201-71012-9.
The idea was that students could be merely casual users or go on from Basic to more sophisticated and powerful languages[.]
- ↑ McCartney, Scott (1999). ENIAC – The Triumphs and Tragedies of the World's First Computer. Walker and Company. hlm. 16. ISBN 978-0-8027-1348-3.
- ↑ Tanenbaum, Andrew S. (1990). Structured Computer Organization, Third Edition. Prentice Hall. hlm. 14. ISBN 978-0-13-854662-5.
- ↑ McCartney, Scott (1999). ENIAC – The Triumphs and Tragedies of the World's First Computer. Walker and Company. hlm. 16. ISBN 978-0-8027-1348-3.
Babbage decided to make a calculating device driven by two sets of cards, one to direct the operation to be performed, and the other for the variables of the problem.
- 1 2 Tanenbaum, Andrew S. (1990). Structured Computer Organization, Third Edition. Prentice Hall. hlm. 15. ISBN 978-0-13-854662-5.
- ↑ J. Fuegi; J. Francis (Oktober–Desember 2003), "Lovelace & Babbage and the creation of the 1843 'notes'", Annals of the History of Computing, 25 (4): 16, 19, 25, Bibcode:2003IAHC...25d..16F, doi:10.1109/MAHC.2003.1253887
{{citation}}: Pemeliharaan CS1: Tanggal diterjemahkan otomatis (link) - ↑ Rosen, Kenneth H. (1991). Discrete Mathematics and Its Applications. McGraw-Hill, Inc. hlm. 654. ISBN 978-0-07-053744-6.
Turing machines can model all the computations that can be performed on a computing machine.
- ↑ Linz, Peter (1990). An Introduction to Formal Languages and Automata. D. C. Heath and Company. hlm. 234. ISBN 978-0-669-17342-0.
- ↑ Linz, Peter (1990). An Introduction to Formal Languages and Automata. D. C. Heath and Company. hlm. 243. ISBN 978-0-669-17342-0.
[A]ll the common mathematical functions, no matter how complicated, are Turing-computable.
- 1 2 3 McCartney, Scott (1999). ENIAC – The Triumphs and Tragedies of the World's First Computer. Walker and Company. hlm. 102. ISBN 978-0-8027-1348-3.
- ↑ McCartney, Scott (1999). ENIAC – The Triumphs and Tragedies of the World's First Computer. Walker and Company. hlm. 94. ISBN 978-0-8027-1348-3.
- ↑ McCartney, Scott (1999). ENIAC – The Triumphs and Tragedies of the World's First Computer. Walker and Company. hlm. 107. ISBN 978-0-8027-1348-3.
- ↑ McCartney, Scott (1999). ENIAC – The Triumphs and Tragedies of the World's First Computer. Walker and Company. hlm. 120. ISBN 978-0-8027-1348-3.
- 1 2 McCartney, Scott (1999). ENIAC – The Triumphs and Tragedies of the World's First Computer. Walker and Company. hlm. 118. ISBN 978-0-8027-1348-3.
- ↑ McCartney, Scott (1999). ENIAC – The Triumphs and Tragedies of the World's First Computer. Walker and Company. hlm. 119. ISBN 978-0-8027-1348-3.
- ↑ McCartney, Scott (1999). ENIAC – The Triumphs and Tragedies of the World's First Computer. Walker and Company. hlm. 123. ISBN 978-0-8027-1348-3.
- ↑ Huskey, Harry D. (2003-01-01), "EDVAC", Encyclopedia of Computer Science, GBR: John Wiley and Sons Ltd., hlm. 626–628, ISBN 978-0-470-86412-8, diakses tanggal 2025-04-25
- 1 2 Tanenbaum, Andrew S. (1990). Structured Computer Organization, Third Edition. Prentice Hall. hlm. 21. ISBN 978-0-13-854662-5.
- 1 2 Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 27. ISBN 0-201-71012-9.
- ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 29. ISBN 0-201-71012-9.
- 1 2 3 Silberschatz, Abraham (1994). Operating System Concepts, Fourth Edition. Addison-Wesley. hlm. 6. ISBN 978-0-201-50480-4.
- 1 2 To the Digital Age: Research Labs, Start-up Companies, and the Rise of MOS. Johns Hopkins University Press. 2002. ISBN 9780801886393. Diarsipkan dari versi aslinya tanggal Februari 2, 2023. Diakses tanggal Februari 3, 2022.
{{cite book}}: Pemeliharaan CS1: Tanggal diterjemahkan otomatis (link) - ↑ Chalamala, Babu (2017). "Manufacturing of Silicon Materials for Microelectronics and Solar PV". Sandia National Laboratories. Diarsipkan dari versi aslinya tanggal Maret 23, 2023. Diakses tanggal Februari 8, 2022.
{{cite web}}: Pemeliharaan CS1: Tanggal diterjemahkan otomatis (link) - ↑ "Fabricating ICs Making a base wafer". Britannica. Diarsipkan dari versi aslinya tanggal Februari 8, 2022. Diakses tanggal Februari 8, 2022.
{{cite web}}: Pemeliharaan CS1: Tanggal diterjemahkan otomatis (link) - ↑ "1959: Practical Monolithic Integrated Circuit Concept Patented". Computer History Museum. Diakses tanggal 13 Agustus 2019.
{{cite web}}: Pemeliharaan CS1: Tanggal diterjemahkan otomatis (link) - ↑ Faggin, Federico (2021). Silicon. Waterside Productions. hlm. 97. ISBN 978-1-949003-41-3.
In 1972, Vadasz abruptly told me he had hired someone to run Intel's custom chip business ...
- ↑ Miller, Christopher (2022). Chip War. Simon & Schuster, LLC. hlm. 70. ISBN 978-1-9821-7200-8.
Hoff bet it would soon be cheaper to design a standardized logic chip that, coupled with a powerful memory chip [and] programmed with different types of software, could compute many different things.
- ↑ "360 Revolution" (PDF). Father, Son & Co. 1990. Diarsipkan (PDF) dari versi aslinya tanggal 2022-10-10. Diakses tanggal Februari 5, 2022.
{{cite web}}: Pemeliharaan CS1: Tanggal diterjemahkan otomatis (link) - ↑ "Bill Gates, Microsoft and the IBM Personal Computer". InfoWorld. Agustus 23, 1982. Diarsipkan dari versi aslinya tanggal 18 Februari 2023. Diakses tanggal 1 Februari 2022.
{{cite web}}: Pemeliharaan CS1: Tanggal diterjemahkan otomatis (link) - 1 2 Stroustrup, Bjarne (2013). The C++ Programming Language, Fourth Edition. Addison-Wesley. hlm. 10. ISBN 978-0-321-56384-2.
- 1 2 3 Stroustrup, Bjarne (2013). The C++ Programming Language, Fourth Edition. Addison-Wesley. hlm. 11. ISBN 978-0-321-56384-2.
- 1 2 Stair, Ralph M. (2003). Principles of Information Systems, Sixth Edition. Thomson. hlm. 159. ISBN 0-619-06489-7.
- 1 2 Linz, Peter (1990). An Introduction to Formal Languages and Automata. D. C. Heath and Company. hlm. 2. ISBN 978-0-669-17342-0.
- ↑ Weiss, Mark Allen (1994). Data Structures and Algorithm Analysis in C++. Benjamin/Cummings Publishing Company, Inc. hlm. 29. ISBN 0-8053-5443-3.
- ↑ Dasgupta, Subrata (2014). It Began with Babbage -- The Genesis of Computer Science. Oxford University Press. ISBN 978-0-19-930941-2.
It [the EDSAC project] opened up an entirely new region of the stored-program computer paradigm, a new class of artifacts the likes of which had never been seen before: computer-programs or software.
- ↑ Tanenbaum, Andrew S. (1990). Structured Computer Organization, Third Edition. Prentice Hall. hlm. 17. ISBN 978-0-13-854662-5.
His [John von Neumann] basic design, now known as a von Neumann machine, was used in the EDSAC, the first stored program computer, and is still the basis for nearly all digital computers, even now, almost half a century later. ... Each word held either two 20-bit instructions [a stored program] or a 39-bit signed integer.
- ↑ Stair, Ralph M. (2003). Principles of Information Systems, Sixth Edition. Thomson. hlm. 160. ISBN 0-619-06489-7.
The first generation of programming languages is machine language, which requires the use of binary symbols (0s and 1s).
- ↑ Tanenbaum, Andrew S. (1990). Structured Computer Organization, Third Edition. Prentice Hall. hlm. 399. ISBN 978-0-13-854662-5.
Most people can remember that the abbreviations for add, subtract, multiply, and divide are ADD, SUB, MUL, and DIV, but few can remember that the machine instructions (for the PDP-11) are 24576, 57344, 28672, and 29184.
- 1 2 3 4 5 Stair, Ralph M. (2003). Principles of Information Systems, Sixth Edition. Thomson. hlm. 160. ISBN 0-619-06489-7.
- 1 2 Tanenbaum, Andrew S. (1990). Structured Computer Organization, Third Edition. Prentice Hall. hlm. 399. ISBN 978-0-13-854662-5.
- ↑ Tanenbaum, Andrew S. (1990). Structured Computer Organization, Third Edition. Prentice Hall. hlm. 400. ISBN 978-0-13-854662-5.
- ↑ Tanenbaum, Andrew S. (1990). Structured Computer Organization, Third Edition. Prentice Hall. hlm. 398. ISBN 978-0-13-854662-5.
- ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 26. ISBN 0-201-71012-9.
- 1 2 3 4 Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 37. ISBN 0-201-71012-9.
- ↑ Stair, Ralph M. (2003). Principles of Information Systems, Sixth Edition. Thomson. hlm. 160. ISBN 0-619-06489-7.
With third-generation and higher-level programming languages, each statement in the language translates into several instructions in machine language.
- ↑ Wilson, Leslie B. (1993). Comparative Programming Languages, Second Edition. Addison-Wesley. hlm. 75. ISBN 978-0-201-56885-1.
- ↑ Stroustrup, Bjarne (2013). The C++ Programming Language, Fourth Edition. Addison-Wesley. hlm. 40. ISBN 978-0-321-56384-2.
- 1 2 Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 16. ISBN 0-201-71012-9.
- ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 24. ISBN 0-201-71012-9.
- 1 2 Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 25. ISBN 0-201-71012-9.
- 1 2 3 4 Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 19. ISBN 0-201-71012-9.
- 1 2 3 4 "Memory Layout of C Programs". 12 September 2011. Diarsipkan dari versi aslinya tanggal 6 November 2021. Diakses tanggal 6 November 2021.
{{cite web}}: Pemeliharaan CS1: Tanggal diterjemahkan otomatis (link) - 1 2 Kernighan, Brian W.; Ritchie, Dennis M. (1988). The C Programming Language Second Edition. Prentice Hall. hlm. 31. ISBN 0-13-110362-8.
- ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 128. ISBN 0-201-71012-9.
- 1 2 3 Kerrisk, Michael (2010). The Linux Programming Interface. No Starch Press. hlm. 121. ISBN 978-1-59327-220-3.
- ↑ Kerrisk, Michael (2010). The Linux Programming Interface. No Starch Press. hlm. 122. ISBN 978-1-59327-220-3.
- ↑ Kernighan, Brian W.; Ritchie, Dennis M. (1988). The C Programming Language Second Edition. Prentice Hall. hlm. 185. ISBN 0-13-110362-8.
- ↑ Kernighan, Brian W.; Ritchie, Dennis M. (1988). The C Programming Language Second Edition. Prentice Hall. hlm. 187. ISBN 0-13-110362-8.
- 1 2 Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 38. ISBN 0-201-71012-9.
- ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 193. ISBN 0-201-71012-9.
- ↑ Stroustrup, Bjarne (2013). The C++ Programming Language, Fourth Edition. Addison-Wesley. hlm. 22. ISBN 978-0-321-56384-2.
- ↑ Stroustrup, Bjarne (2013). The C++ Programming Language, Fourth Edition. Addison-Wesley. hlm. 21. ISBN 978-0-321-56384-2.
- ↑ Hunter, David (1995). The Essentials of C++. Research & Education Association. hlm. 46. ISBN 0-87891-748-9.
Just as a structure definition encapsulates a set of related data items, a class definition encapsulates related data items and functions that manipulate them.
- ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 39. ISBN 0-201-71012-9.
- ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 35. ISBN 0-201-71012-9.
- ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 192. ISBN 0-201-71012-9.
- ↑ Gregoire, Marc (2024). Professional C++ (Edisi 6th). John Wiley and Sons, Inc. hlm. 9. ISBN 9781394193172.
Namespaces address the problem of naming conflicts between different pieces of code.
- ↑ Gregoire, Marc (2024). Professional C++ (Edisi 6th). John Wiley and Sons, Inc. hlm. 422. ISBN 9781394193172.
Header files do have a number of problems, though, such as avoiding multiple includes of the same header file and making sure header files are included in the correct order.
- ↑ Gehani, Narain (1985). Advanced C: Food for the Educated Palate. Computer Science Press. hlm. 196. ISBN 0-88175-078-6.
- ↑ Gregoire, Marc (2024). Professional C++ (Edisi 6th). John Wiley and Sons, Inc. hlm. 5. ISBN 9781394193172.
If the program did not import that module, it would be unable to perform its only task of printing text.
- ↑ Gregoire, Marc (2024). Professional C++ (Edisi 6th). John Wiley and Sons, Inc. hlm. 424. ISBN 9781394193172.
- ↑ Stroustrup, Bjarne (2013). The C++ Programming Language, Fourth Edition. Addison-Wesley. hlm. 49. ISBN 978-0-321-56384-2.
- ↑ Hunter, David (1999). The Essentials of C++. Research & Education Association. hlm. 46. ISBN 0-87891-748-9.
- ↑ Hunter, David (1999). The Essentials of C++. Research & Education Association. hlm. 65. ISBN 0-87891-748-9.
- 1 2 Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 218. ISBN 0-201-71012-9.
- ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 217. ISBN 0-201-71012-9.
- ↑ Weiss, Mark Allen (1994). Data Structures and Algorithm Analysis in C++. Benjamin/Cummings Publishing Company, Inc. hlm. 103. ISBN 0-8053-5443-3.
When there is a function call, all the important information needs to be saved, such as register values (corresponding to variable names) and the return address (which can be obtained from the program counter)[.] ... When the function wants to return, it ... restores all the registers. It then makes the return jump. Clearly, all of this work can be done using a stack, and that is exactly what happens in virtually every programming language that implements recursion.
- 1 2 3 Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 230. ISBN 0-201-71012-9.
- ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 240. ISBN 0-201-71012-9.
- 1 2 3 Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 241. ISBN 0-201-71012-9.
- ↑ Jones, Robin; Maynard, Clive; Stewart, Ian (Desember 6, 2012). The Art of Lisp Programming. Springer Science & Business Media. hlm. 2. ISBN 9781447117193.
{{cite book}}: Pemeliharaan CS1: Tanggal diterjemahkan otomatis (link) - ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 220. ISBN 0-201-71012-9.
- ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 221. ISBN 0-201-71012-9.
- ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 229. ISBN 0-201-71012-9.
- ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 227. ISBN 0-201-71012-9.
- 1 2 Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 222. ISBN 0-201-71012-9.
- ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 233. ISBN 0-201-71012-9.
- ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 235. ISBN 0-201-71012-9.
- ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 55. ISBN 0-201-71012-9.
- ↑ Colmerauer, A.; Roussel, P. (1992). "The birth of Prolog" (PDF). ACM SIGPLAN Notices. 28 (3). Association for Computing Machinery: 5. doi:10.1145/155360.155362.
- ↑ Kowalski, R., Dávila, J., Sartor, G. and Calejo, M., 2023. Logical English for law and education. In Prolog: The Next 50 Years (pp. 287–299). Cham: Springer Nature Switzerland.
- 1 2 Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 35. ISBN 0-201-71012-9.
Simula was based on Algol 60 with one very important addition — the class concept. ... The basic idea was that the data (or data structure) and the operations performed on it belong together[.]
- ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 39. ISBN 0-201-71012-9.
Originally, a large number of experimental languages were designed, many of which combined object-oriented and functional programming.
- ↑ Schach, Stephen R. (1990). Software Engineering. Aksen Associates Incorporated Publishers. hlm. 284. ISBN 0-256-08515-3.
While it is true that OOD [(object oriented design)] as such is not supported by the majority of popular languages, a large subset of OOD can be used.
- ↑ Weiss, Mark Allen (1994). Data Structures and Algorithm Analysis in C++. Benjamin/Cummings Publishing Company, Inc. hlm. 57. ISBN 0-8053-5443-3.
- ↑ Schach, Stephen R. (1990). Software Engineering. Aksen Associates Incorporated Publishers. hlm. 285. ISBN 0-256-08515-3.
- ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 290. ISBN 0-201-71012-9.
The syntax (or grammar) of a programming language describes the correct form in which programs may be written[.]
- ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 78. ISBN 0-201-71012-9.
The main components of an imperative language are declarations, expressions, and statements.
- 1 2 Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 290. ISBN 0-201-71012-9.
- ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 294. ISBN 0-201-71012-9.
- ↑ Rosen, Kenneth H. (1991). Discrete Mathematics and Its Applications. McGraw-Hill, Inc. hlm. 615. ISBN 978-0-07-053744-6.
- ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 291. ISBN 0-201-71012-9.
- ↑ Rosen, Kenneth H. (1991). Discrete Mathematics and Its Applications. McGraw-Hill, Inc. hlm. 616. ISBN 978-0-07-053744-6.
- ↑ Rosen, Kenneth H. (1991). Discrete Mathematics and Its Applications. McGraw-Hill, Inc. hlm. 623. ISBN 978-0-07-053744-6.
- ↑ Rosen, Kenneth H. (1991). Discrete Mathematics and Its Applications. McGraw-Hill, Inc. hlm. 624. ISBN 978-0-07-053744-6.
- ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. hlm. 297. ISBN 0-201-71012-9.
- ↑ Schach, Stephen R. (1990). Software Engineering. Aksen Associates Incorporated Publishers. hlm. Preface. ISBN 0-256-08515-3.
- 1 2 3 Stair, Ralph M. (2003). Principles of Information Systems, Sixth Edition. Thomson. hlm. 507. ISBN 0-619-06489-7.
- 1 2 Stair, Ralph M. (2003). Principles of Information Systems, Sixth Edition. Thomson. hlm. 513. ISBN 0-619-06489-7.
- ↑ Stair, Ralph M. (2003). Principles of Information Systems, Sixth Edition. Thomson. hlm. 514. ISBN 0-619-06489-7.
- ↑ Stair, Ralph M. (2003). Principles of Information Systems, Sixth Edition. Thomson. hlm. 516. ISBN 0-619-06489-7.
- ↑ Schach, Stephen R. (1990). Software Engineering. Aksen Associates Incorporated Publishers. hlm. 8. ISBN 0-256-08515-3.
- ↑ Stair, Ralph M. (2003). Principles of Information Systems, Sixth Edition. Thomson. hlm. 517. ISBN 0-619-06489-7.
- ↑ Schach, Stephen R. (1990). Software Engineering. Aksen Associates Incorporated Publishers. hlm. 345. ISBN 0-256-08515-3.
- 1 2 3 4 Schach, Stephen R. (1990). Software Engineering. Aksen Associates Incorporated Publishers. hlm. 319. ISBN 0-256-08515-3.
- 1 2 Schach, Stephen R. (1990). Software Engineering. Aksen Associates Incorporated Publishers. hlm. 331. ISBN 0-256-08515-3.
- ↑ Schach, Stephen R. (1990). Software Engineering. Aksen Associates Incorporated Publishers. hlm. 216. ISBN 0-256-08515-3.
- 1 2 3 Schach, Stephen R. (1990). Software Engineering. Aksen Associates Incorporated Publishers. hlm. 219. ISBN 0-256-08515-3.
- 1 2 Schach, Stephen R. (1990). Software Engineering. Aksen Associates Incorporated Publishers. hlm. 226. ISBN 0-256-08515-3.
- 1 2 Schach, Stephen R. (1990). Software Engineering. Aksen Associates Incorporated Publishers. hlm. 220. ISBN 0-256-08515-3.
- ↑ Schach, Stephen R. (1990). Software Engineering. Aksen Associates Incorporated Publishers. hlm. 258. ISBN 0-256-08515-3.
- ↑ Schach, Stephen R. (1990). Software Engineering. Aksen Associates Incorporated Publishers. hlm. 259. ISBN 0-256-08515-3.
- 1 2 3 Silberschatz, Abraham (1994). Operating System Concepts, Fourth Edition. Addison-Wesley. hlm. 1. ISBN 978-0-201-50480-4.
- ↑ Stair, Ralph M. (2003). Principles of Information Systems, Sixth Edition. Thomson. hlm. 147. ISBN 0-619-06489-7.
The key to unlocking the potential of any computer system is application software.
- 1 2 3 4 Stair, Ralph M. (2003). Principles of Information Systems, Sixth Edition. Thomson. hlm. 147. ISBN 0-619-06489-7.
- ↑ Stair, Ralph M. (2003). Principles of Information Systems, Sixth Edition. Thomson. hlm. 147. ISBN 0-619-06489-7.
[A] third-party software firm, often called a value-added software vendor, may develop or modify a software program to meet the needs of a particular industry or company.
- ↑ Stair, Ralph M. (2003). Principles of Information Systems, Sixth Edition. Thomson. hlm. 148. ISBN 0-619-06489-7.
Heading: Proprietary Software; Subheading: Advantages; Quote: You can get exactly what you need in terms of features, reports, and so on.
- ↑ Stair, Ralph M. (2003). Principles of Information Systems, Sixth Edition. Thomson. hlm. 148. ISBN 0-619-06489-7.
Heading: Proprietary Software; Subheading: Advantages; Quote: Being involved in the development offers a further level of control over the results.
- ↑ Stair, Ralph M. (2003). Principles of Information Systems, Sixth Edition. Thomson. hlm. 147. ISBN 0-619-06489-7.
Heading: Proprietary Software; Subheading: Advantages; Quote: There is more flexibility in making modifications that may be required to counteract a new initiative by one of your competitors or to meet new supplier and/or customer requirements.
- 1 2 3 4 Stair, Ralph M. (2003). Principles of Information Systems, Sixth Edition. Thomson. hlm. 149. ISBN 0-619-06489-7.
- ↑ Tanenbaum, Andrew S. (1990). Structured Computer Organization, Third Edition. Prentice Hall. hlm. 11. ISBN 978-0-13-854662-5.
- 1 2 Kerrisk, Michael (2010). The Linux Programming Interface. No Starch Press. hlm. 21. ISBN 978-1-59327-220-3.
- 1 2 3 4 5 Kerrisk, Michael (2010). The Linux Programming Interface. No Starch Press. hlm. 22. ISBN 978-1-59327-220-3.
- 1 2 3 Bach, Maurice J. (1986). The Design of the UNIX Operating System. Prentice-Hall, Inc. hlm. 152. ISBN 0-13-201799-7.
- ↑ Tanenbaum, Andrew S. (2013). Structured Computer Organization, Sixth Edition. Pearson. hlm. 443. ISBN 978-0-13-291652-3.
- ↑ Lacamera, Daniele (2018). Embedded Systems Architecture. Packt. hlm. 8. ISBN 978-1-78883-250-2.
- ↑ Kernighan, Brian W.; Ritchie, Dennis M. (1988). The C Programming Language Second Edition. Prentice Hall. hlm. 185. ISBN 0-13-110362-8.
malloc calls upon the operating system to obtain more memory as needed.
- ↑ Kernighan, Brian W.; Ritchie, Dennis M. (1988). The C Programming Language Second Edition. Prentice Hall. hlm. 185. ISBN 0-13-110362-8.
Thus its [the operating system's] free storage is kept as a list of free blocks.
- ↑ Kerrisk, Michael (2010). The Linux Programming Interface. No Starch Press. hlm. 22. ISBN 978-1-59327-220-3.
Once a process has completed execution, the kernel ensures that the resources it uses are freed for subsequent reuse by later programs.
- ↑ Kerrisk, Michael (2010). The Linux Programming Interface. No Starch Press. hlm. 23. ISBN 978-1-59327-220-3.
- ↑ Kernighan, Brian W. (1984). The Unix Programming Environment. Prentice Hall. hlm. 201. ISBN 0-13-937699-2.
- ↑ Kerrisk, Michael (2010). The Linux Programming Interface. No Starch Press. hlm. 187. ISBN 978-1-59327-220-3.
- ↑ Haviland, Keith (1987). Unix System Programming. Addison-Wesley Publishing Company. hlm. 121. ISBN 0-201-12919-1.
- 1 2 Stair, Ralph M. (2003). Principles of Information Systems, Sixth Edition. Thomson. hlm. 145. ISBN 0-619-06489-7.
- 1 2 3 Stair, Ralph M. (2003). Principles of Information Systems, Sixth Edition. Thomson. hlm. 146. ISBN 0-619-06489-7.
- ↑ Tanenbaum, Andrew S. (2013). Structured Computer Organization, Sixth Edition. Pearson. hlm. 5. ISBN 978-0-13-291652-3.
- 1 2 Tanenbaum, Andrew S. (2013). Structured Computer Organization, Sixth Edition. Pearson. hlm. 6. ISBN 978-0-13-291652-3.
- ↑ Tanenbaum, Andrew S. (2013). Structured Computer Organization, Sixth Edition. Pearson. hlm. 243. ISBN 978-0-13-291652-3.
- ↑ Tanenbaum, Andrew S. (2013). Structured Computer Organization, Sixth Edition. Pearson. hlm. 147. ISBN 978-0-13-291652-3.
- ↑ Tanenbaum, Andrew S. (2013). Structured Computer Organization, Sixth Edition. Pearson. hlm. 148. ISBN 978-0-13-291652-3.
- ↑ Tanenbaum, Andrew S. (2013). Structured Computer Organization, Sixth Edition. Pearson. hlm. 253. ISBN 978-0-13-291652-3.
- ↑ Tanenbaum, Andrew S. (2013). Structured Computer Organization, Sixth Edition. Pearson. hlm. 255. ISBN 978-0-13-291652-3.
- ↑ Tanenbaum, Andrew S. (2013). Structured Computer Organization, Sixth Edition. Pearson. hlm. 161. ISBN 978-0-13-291652-3.
- ↑ Tanenbaum, Andrew S. (2013). Structured Computer Organization, Sixth Edition. Pearson. hlm. 166. ISBN 978-0-13-291652-3.
- ↑ Tanenbaum, Andrew S. (2013). Structured Computer Organization, Sixth Edition. Pearson. hlm. 249. ISBN 978-0-13-291652-3.