JavaRush /Blog Java /Random-MS /Tahap bahasa pengaturcaraan

Tahap bahasa pengaturcaraan

Diterbitkan dalam kumpulan

pengenalan

Apakah bahasa pengaturcaraan yang berbeza? Apakah jenis konsep yang tertanam di dalamnya? Bagaimana mereka berkembang? Dalam artikel ini, kita akan melihat jenis bahasa pengaturcaraan berdasarkan tahap yang dipanggil - daripada kod mesin (tahap rendah, dekat dengan perkakasan komputer) kepada bahasa seperti Java atau C# (tahap tinggi). Semakin sedikit transformasi yang dilalui penyenaraian teks program sepanjang cara bertukar menjadi satu set sifar dan satu, semakin rendah tahapnya.
Tahap bahasa pengaturcaraan - 1
Seterusnya kita akan melihat:
  1. Bahasa peringkat rendah (kod mesin dan pemasangan)
  2. Tahap pertengahan (C, Fortran….)
  3. Tahap tinggi (C++, Java, Python, Ruby, JavaScript...)
Tahap ini juga mencirikan berapa banyak perincian penyenaraian program masa depan yang perlu diperincikan untuk melaksanakan pelaksanaan. Betapa mudahnya proses ini untuk manusia? Tahap sesuatu bahasa tidak boleh dianggap sebagai penunjuk yang jelas tentang keupayaannya. Bahasa pengaturcaraan ialah alat yang berkesan dalam satu bidang dan kurang berguna dalam bidang lain. Kedua-dua pencantum dan tukang kayu bekerja dengan kayu. Yang pertama mempunyai alat utama - satu set pahat, yang kedua - kapak. Walau bagaimanapun, seorang tukang kayu akan membuat kabinet yang diukir lebih elegan, dan seorang tukang kayu akan membina rumah dengan lebih cepat. Walaupun masing-masing mampu melakukan kerja masing-masing, mereka akan melakukannya dengan kurang cekap. Pelbagai data dalam komputer diwakili sebagai set sifar dan satu. Perintah kawalan untuk pemprosesannya adalah data yang sama yang mengandungi arahan yang menentukan lokasi maklumat yang diperlukan dan kaedah pengubahsuaian.

Bahasa mesin (Tahap terendah)

Kami perlu membuat lawatan singkat dari kawasan Perisian ke kawasan Perkakasan. Mari kita lihat dalam bentuk yang dipermudahkan. Pemproses adalah "otak" utama komputer. Papan induk di mana ia dipasang mengandungi pengawal yang digunakan untuk berinteraksi dengan peranti lain melalui bas (saluran data untuk komunikasi).
Уровни языков программирования - 2
Sesetengah berfungsi pada kelajuan tinggi (anak panah merah): pemproses mengeluarkan arahan daripada memori dan memanipulasi data, kad video, terutamanya dalam permainan 3D, menggunakan sejumlah besar tekstur, bentuk, koordinat piksel dan objek lain untuk membina imej pada skrin monitor . Lain-lain (disebabkan oleh keterbatasan dalam kelajuan pertukaran maklumat) tidak memerlukan penunjuk setinggi itu. Pelbagai peranti dalaman dan luaran disambungkan dalam rajah dengan anak panah hijau.

Dunia dalaman pemproses

Semua arahan pemproses datang daripada memori untuk pelaksanaan dalam bentuk binari. Format, nombor, subset arahan bergantung pada seni binanya. Kebanyakan mereka tidak serasi antara satu sama lain dan mengikut ideologi yang berbeza. Dan juga jenis arahan sangat bergantung pada mod (8/16/32... kedalaman bit) dan sumber data (memori, daftar, tindanan...) yang mana pemproses berfungsi. Tindakan yang sama boleh diwakili oleh arahan yang berbeza. Pemproses mempunyai arahan untuk menambah dua operan (TAMBAH X,Y) dan menambah satu kepada yang ditentukan (INC X). Menambah tiga kali ganda pada operan boleh dilakukan sebagai ADD X,3 atau dengan memanggil INC X tiga kali. Dan, untuk pemproses yang berbeza, adalah mustahil untuk meramalkan kaedah mana yang akan optimum dari segi kelajuan atau jejak memori. Untuk kemudahan, maklumat binari ditulis dalam bentuk perenambelasan. Mari kita pertimbangkan sebahagian daripada program biasa (bahasa C, yang sintaksnya serupa dengan Java)
int func() {
    int i = getData("7") ;
    return ++i;
   ...
}
Kod yang melaksanakan tindakan yang sama dalam bentuk urutan arahan untuk pemproses: ... 48 83 ec 08 bf bc 05 20 00 31 c0 e8 e8 fe ff ff 48 83 c4 08 83 c0 01 ... Inilah rupa bahasa pengaturcaraan peringkat rendah untuk pemproses Intel. Serpihan yang memanggil kaedah dengan hujah dan mengembalikan hasil yang ditambah dengan satu. Ini adalah bahasa mesin (kod), yang dipindahkan secara langsung, tanpa transformasi, kepada pemproses untuk dilaksanakan. Kelebihan:
  • Kami benar-benar menguasai keadaan, kami mempunyai kemungkinan terluas untuk menggunakan pemproses dan perkakasan komputer.
  • Semua pilihan untuk mengatur dan mengoptimumkan kod tersedia untuk kami.
Kekurangan:
  • Ia adalah perlu untuk mempunyai pengetahuan yang luas tentang fungsi pemproses dan mengambil kira sejumlah besar faktor perkakasan semasa melaksanakan kod.
  • Mencipta atur cara yang lebih kompleks sedikit daripada contoh yang diberikan membawa kepada peningkatan mendadak dalam masa yang dihabiskan untuk menulis kod dan menyahpepijatnya.
  • Pergantungan platform: program yang dibuat untuk satu pemproses secara amnya tidak akan berfungsi pada yang lain. Ada kemungkinan bahawa untuk pemproses ini, dalam mod operasinya yang lain, penyuntingan kod akan diperlukan.
Kod mesin digunakan secara meluas pada permulaan komputer; tidak ada kaedah pengaturcaraan lain dalam era perintis komputer. Pada masa ini, ia kadang-kadang digunakan oleh jurutera dalam bidang mikroelektronik apabila membangunkan atau ujian peringkat rendah pemproses.

Bahasa himpunan (tahap rendah)

Tidak seperti komputer, anda dan saya melihat maklumat lebih baik dalam bentuk teks/semantik berbanding dalam bentuk digital. Anda boleh menamakan lima puluh nama kenalan dengan mudah pada telefon pintar anda, tetapi anda tidak mungkin dapat menulis nombor telefon yang sepadan dengan hati. Ia sama dengan pengaturcaraan. Kami naikkan tangga jenis dengan mengambil tiga langkah asas:
  • Mari kita kaitkan satu arahan simbolik kepada kumpulan arahan pemproses digital yang melakukan tindakan yang sepadan.
  • Mari kita serlahkan hujah arahan pemproses secara berasingan.
  • Mari perkenalkan keupayaan untuk menamakan kawasan memori, pembolehubah, dan lokasi arahan individu.
Mari kita bandingkan serpihan program sebelumnya dalam kod mesin (tengah) dan dalam bahasa pemasangan (kanan):
2004b0     48 83 ec 08      sub    $0x8,%rsp
2004b4     bf bc 05 20 00   mov    $0x2005bc,%edi
2004b9     31 c0            xor    %eax,%eax
2004bb     e8 e8 fe ff ff   callq  getData
2004c0     48 83 c4 08      add    $0x8,%rsp
2004c4     83 c0 01         add    $0x1,%eax
Seperti yang anda lihat, proses menulis atur cara telah dipermudahkan: tidak perlu menggunakan buku rujukan untuk menjana nilai arahan digital, mengira panjang peralihan, mengedarkan data dalam memori merentas selnya dan ciri pemproses lain. Kami menerangkan tindakan yang diperlukan daripada set perintah simbolik dan hujah yang diperlukan untuk logik pelaksanaan, dan kemudian program penterjemah menterjemah fail teks ke dalam set sifar dan yang boleh difahami oleh pemproses. Kelebihan:
  • Proses menulis dan mengubah suai kod telah dipermudahkan.
  • Kawalan ke atas semua sumber perkakasan dikekalkan.
  • Lebih mudah untuk mengalihkan program ke platform lain, tetapi ia memerlukan pengubahsuaian bergantung pada keserasian perkakasan.
Kekurangan:
  • Bahasa perhimpunan ialah bahasa pengaturcaraan peringkat rendah. Mencipta walaupun bahagian kecil kod adalah sukar. Di samping itu, ia juga perlu mengambil kira operasi khusus peralatan.
  • Pergantungan platform.
Contoh demo Java yang paling popular:
public static void main(String[] args) {
    System.out.println("Hello World!");
}
akan kelihatan (sintaks NASM, menggunakan Windows API dan kernel32.lib) seperti berikut:
global _main
	extern  _GetStdHandle@4
	extern  _WriteFile@20
	extern  _ExitProcess@4

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

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

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

	; ExitProcess(0)
	push	0
	call	_ExitProcess@4

	; never here
	hlt
message:
	db  	'Hello, World', 10
message_end:
Seperti kod mesin, bahasa pemasangan lebih kerap digunakan oleh jurutera dan pengaturcara sistem. Ia digunakan untuk menulis bahagian bergantung kepada perkakasan kernel sistem pengendalian yang kritikal masa atau kritikal kepada ciri pelaksanaan pemacu untuk pelbagai peranti persisian. Tetapi akhir-akhir ini mereka semakin kurang menggunakannya, kerana penggunaannya sangat mengurangkan kemudahalihan program ke platform lain. Kadangkala mereka menggunakan proses pembongkaran - mereka mencipta penyenaraian pemasang program daripada kod digital untuk menghuraikan logik untuk melaksanakan serpihan kecil. Dalam kes yang jarang berlaku, jika kod peringkat tinggi asal tidak tersedia: analisis virus untuk memeranginya atau kehilangan kod sumber. Bahasa himpunan dianggap sebagai generasi pertama/kedua (kami tidak akan mempertimbangkan secara berasingan pseudokod sebelum kemunculan penghimpun dan perbezaannya daripada arahan simbolik). Saya ingin menyerlahkan penggunaan assembler dalam Demo Scene: gabungan seni, matematik dan pengekodan peringkat rendah, menjelmakan idea artistik pencipta mereka dalam bentuk program yang menjana klip video dengan had sumber. Selalunya jumlah saiz program dan fail data tidak boleh melebihi 256 bait (format 4/64 kilobait juga popular). Berikut ialah contoh program 4 KB:

Bahasa Kumpulan C/Fortran (peringkat pertengahan/tinggi)

Dengan perkembangan keupayaan teknologi komputer, jumlah fungsi dan masa pelaksanaan kod dalam pemasang tidak lagi memuaskan. Kos untuk menulis, menguji dan menyelenggara program meningkat mengikut magnitud lebih cepat daripada kemampuannya. Ia adalah perlu untuk mengurangkan keperluan dari pengaturcara dari segi pengetahuan tentang fungsi peralatan, untuk memberinya alat yang membolehkannya menulis dalam bahasa yang dekat dengan logik manusia. Beralih ke tahap baharu jenis bahasa pengaturcaraan. Menyediakan keupayaan untuk berpecah kepada pelbagai modul dengan panggilan berurutan selanjutnya (paradigma pengaturcaraan prosedur), menyediakan pelbagai jenis data dengan keupayaan untuk membinanya, dsb. Selain itu, langkah-langkah ini membawa kemudahalihan kod yang lebih baik ke platform lain, organisasi yang lebih selesa kerja berpasukan. Salah satu bahasa pertama yang menyokong semua perkara di atas ialah Fortran, dibangunkan pada 50-an abad yang lalu . Keupayaan untuk mencipta dalam bentuk teks dengan penerangan tentang logik pelaksanaan menggunakan gelung, cawangan, subrutin dan operasi dengan tatasusunan dan mempersembahkan data dalam bentuk nombor nyata, integer dan kompleks menggembirakan jurutera dan saintis. Dalam masa yang singkat, "rangka kerja" dan perpustakaan saintifik telah dicipta. Semua ini adalah akibat daripada fakta bahawa Fortran masih relevan hari ini, walaupun dalam persekitaran saintifik yang sempit, dan sedang berkembang, memandangkan bagasi pembangunan adalah sangat besar, perpustakaan IMSL sahaja telah berkembang secara aktif sejak 1970 (!), betapa banyak perisian berkaitan yang serupa bolehkah anda ingat? -pemasa lama? Satu lagi cabang perkembangan bahasa pada tahap ini ialah C. Jika Fortran menjadi alat untuk saintis, maka C dicipta untuk membantu pengaturcara mencipta perisian aplikasi: sistem pengendalian, pemacu, dll. Bahasa ini membolehkan anda mengawal peruntukan memori secara manual dan memberikan akses terus kepada sumber perkakasan. Pengaturcara C perlu mengawal entiti peringkat rendah, jadi ramai yang berpendapat bahawa C ialah bahasa perhimpunan lanjutan dan sering dipanggil bahasa "peringkat pertengahan". Setelah memperkenalkan penaip data ke dalam pemasang, unsur-unsur pengaturcaraan prosedur dan modular, bahasa C masih merupakan salah satu bahasa utama untuk pengaturcaraan sistem, yang juga difasilitasi oleh perkembangan pesat mikroelektronik dalam beberapa tahun kebelakangan ini. Semua jenis alat, pengawal, rangkaian dan peranti lain memerlukan pemacu, pelaksanaan protokol untuk kerjasama dan perisian peringkat rendah lain untuk melaksanakan interaksi dengan peralatan. Semua perkara di atas menyumbang kepada permintaan untuk bahasa hari ini. Prinsip berorientasikan objek dan fungsi dikembangkan lagi dalam bentuk C++, C#, Java, mengambil banyak daripada sintaks C. Kelebihan:
  • Memudahkan proses penciptaan kod: pengenalan jenis, pembahagian kepada modul, pengurangan penyenaraian program.
  • Прозрачная логика заложенного алгоритма вследствие ухода от машинных codeов к более понятным для человека командам в семантически описательном стиле.
  • Переносимость. Стало достаточно перекомпorровать текст программы для выполнения на другой платформе (возможно, с небольшой модификацией).
  • Скорость откомпorрованных программ.
Минусы:
  • Отсутствие автоматического управления памятью и необходимость постоянного её контроля.
  • Отсутствие реализации концепций an objectно-ориентированного и функционального программирования.

Развитие языков высокого уровня

Bahasa pengaturcaraan peringkat tinggi, dari segi penciptaan perisian, semakin mula beralih daripada kod mesin dan melaksanakan pelbagai paradigma pengaturcaraan sebagai tambahan kepada yang prosedural. Ini juga termasuk pelaksanaan prinsip berorientasikan objek. C++, Java, Python, JavaScript, Ruby... - julat bahasa jenis ini adalah yang paling popular dan dalam permintaan hari ini. Mereka menyediakan lebih banyak peluang untuk melaksanakan pelbagai perisian dan adalah mustahil untuk menentukan dengan jelas "pengkhususan" setiap daripada mereka. Tetapi populariti aplikasi di kawasan yang berkaitan adalah disebabkan oleh perpustakaan/rangka kerja untuk bekerja dengan mereka, contohnya: JavaScript - Frontend. Bahasa ini direka untuk interaksi antara pelayar web pelanggan dan pengguna dan pelayan jauh. Pustaka yang paling popular ialah Angular, React dan VUE. Pada masa ini, ia secara relatifnya digunakan secara aktif di web dan pelayan lain (backend), Node.js amat popular. Ruby - Bahagian belakang. Ia digunakan untuk mencipta skrip (fail perkhidmatan) dan pada pelayan web. Rangka kerja utama ialah Ruby On Rails. Python ialah domain saintifik dan kejuruteraan (selain domain web). Ia adalah alternatif kepada pengkomputeran standard dan pakej matematik (Mathematica, Octave, MatLab...), tetapi mempunyai semantik biasa bahasa dan sejumlah besar perpustakaan. Mempunyai ramai peminat dalam bidang sistem pembelajaran mesin, statistik dan kecerdasan buatan. Perpustakaan yang kerap digunakan termasuk django, numpy, panda dan aliran tensor. C++ – Pembangunan universal, evolusi bahasa C. Menyediakan keupayaan pengaturcaraan berfungsi dan berorientasikan objek tanpa kehilangan keupayaan untuk berinteraksi dengan perkakasan peringkat rendah. Disebabkan ini, produktiviti dan fleksibiliti direalisasikan apabila mencipta perisian, tetapi harganya juga sepadan: halangan yang tinggi untuk masuk disebabkan oleh spesifikasi bahasa yang kompleks, keperluan untuk kawalan bebas ke atas sumber semasa melaksanakan program. Banyak perisian pengguna tunggal dan sistem ditulis menggunakannya: modul sistem pengendalian (Windows, Symbian...), permainan, editor (Adobe Photoshop, Autodesk Maya...), pangkalan data (MSSQL, Oracle...), pemain ( WinAmp...), dll. Perlu diingatkan bahawa perisian moden adalah produk yang kompleks, pembangunannya menggunakan beberapa bahasa pengaturcaraan sekaligus, dan boleh menjadi sangat sukar untuk menentukan tahap penyertaan setiap daripada mereka dalam keputusan keseluruhan.

Kemajuan selanjutnya

Baru-baru ini, satu lagi jenis pengaturcaraan telah mendapat populariti - berfungsi (perkembangan lanjut tahap bahasa) . Berikut ialah satu lagi jenis abstraksi untuk pengiraan - fungsi yang mengambil set fungsi sebagai hujah dan mengembalikan satu lagi. Peranan pembolehubah dimainkan oleh fungsi yang sama (pembolehubah yang biasa kepada kita hanyalah ungkapan malar, serupa dengan akhir sebelum pengisytiharan jenis di Jawa). Fungsi itu sendiri ditutup dalam skopnya, hasil operasinya hanya bergantung pada hujah yang diluluskan. Dua sifat yang luar biasa berikutan dari ini:
  • Untuk ujian, kami hanya memerlukan argumen fungsi (hasil kerja tidak bergantung pada pembolehubah luaran, dll.).
  • Atur cara gaya berfungsi secara ajaib sedia serentak: panggilan fungsi berjujukan boleh dikeluarkan dalam rangkaian jiran (kerana ia tidak dipengaruhi oleh faktor luaran) dan tidak memerlukan kunci (iaitu, tiada masalah penyegerakan). Insentif yang baik untuk menumpukan masa kepada topik ini, memandangkan penggunaan pemproses berbilang teras yang meluas.
Walau bagaimanapun, ambang kemasukan adalah lebih tinggi daripada OOP: untuk kod yang berkesan adalah perlu untuk membina program, menerangkan algoritma pelaksanaan dalam bentuk fungsi. Tetapi juga untuk gaya berfungsi tulen adalah baik untuk mengetahui asas logik dan teori kategori. Yang paling popular ialah Haskell, Scala, F#. Tetapi jangan takut, unsur-unsur pengaturcaraan berfungsi telah muncul di Java (serta dalam bahasa generasi ketiga moden yang lain) dan ia boleh digabungkan dengan OOP. Anda akan mengetahui semua butiran ini dengan lebih terperinci di latihan dalam talian JavaRush. Bidang pengaturcaraan logik (peringkat bahasa seterusnya) masih belum menemui aplikasi praktikal yang luas kerana permintaannya yang rendah. Membina program memerlukan pengetahuan tentang asas matematik diskret, logik predikat, alat kekangan dan cabang logik matematik yang lain. Bahasa aktif yang paling popular ialah Prolog.

Kesimpulan

Pada masa ini, bahasa yang paling biasa ialah OOP. Java, sejak penubuhannya, sentiasa berada di atas, biasanya dalam tiga teratas, bahasa popular. Selain OOP, ia mengandungi elemen pengaturcaraan berfungsi, dan anda boleh menggabungkan gaya penulisan program anda yang berbeza. Julat aplikasi Java sangat luas - ini adalah tugas perniagaan, pelaksanaan pelayan web (backend), bahasa utama untuk mencipta aplikasi Android, persekitaran pengaturcaraan merentas platform dan tempat kerja (IDE/AWM) dan pemodelan, dan banyak lagi . Kedudukan Java sangat kukuh dalam sektor Perusahaan - kawasan perisian korporat yang memerlukan kod berkualiti tinggi dan tahan lama serta pelaksanaan logik perniagaan yang paling kompleks.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION