JavaRush /Java Blogu /Random-AZ /Proqramlaşdırma dillərinin səviyyələri
Marat Sadykov
Səviyyə

Proqramlaşdırma dillərinin səviyyələri

Qrupda dərc edilmişdir

Giriş

Fərqli proqramlaşdırma dilləri hansılardır? Onlarda hansı anlayışlar var? Necə inkişaf etdilər? Bu yazıda biz sözdə səviyyələrə əsaslanan proqramlaşdırma dillərinin növlərinə baxacağıq - maşın kodlarından (aşağı səviyyə, kompüter avadanlığına yaxın) Java və ya C# (yüksək səviyyə) kimi dillərə qədər. Proqramın mətn siyahısı sıfırlar və birlər dəstinə çevrilmə yolu ilə nə qədər az çevrilirsə, səviyyə bir o qədər aşağı olur.
Proqramlaşdırma dillərinin səviyyələri - 1
Sonra baxacağıq:
  1. Aşağı səviyyəli dillər (maşın kodları və montaj)
  2. Orta səviyyə (C, Fortran….)
  3. Yüksək səviyyə (C++, Java, Python, Ruby, JavaScript...)
Səviyyə həmçinin gələcək proqramın siyahısının həyata keçirilməsi üçün nə qədər təfərrüatlı olması lazım olduğunu xarakterizə edir. Bu proses insanlar üçün nə qədər sadədir? Dilin səviyyəsini onun imkanlarının birmənalı göstəricisi hesab etmək olmaz. Proqramlaşdırma dili bir sahədə effektiv, digərlərində isə daha az faydalı olan alətdir. Həm dülgər, həm də dülgər taxta ilə işləyir. Birincinin əsas aləti var - bir dəst kəsik, ikincisi - balta. Bununla belə, dülgər oyma şkafı daha qəşəng edəcək, dülgər isə daha tez ev tikəcək. Hər biri digərinin işini görməyə qadir olsa da, bunu daha az səmərəli edəcəklər. Kompüterdəki müxtəlif məlumatlar sıfırlar və birlər dəsti kimi təmsil olunur. Onun emalı üçün idarəetmə əmrləri lazımi məlumatların yerini və dəyişdirilmə üsulunu təyin edən təlimatları ehtiva edən eyni məlumatlardır.

Maşın dilləri (Ən aşağı səviyyə)

Proqram təminatı sahəsindən Aparat sahəsinə qısa bir səfər etməli olacağıq. Buna sadələşdirilmiş formada baxaq. Prosessor kompüterin əsas “beyni”dir. Quraşdırıldığı ana plata avtobuslar vasitəsilə digər cihazlarla qarşılıqlı əlaqədə olmaq üçün istifadə olunan nəzarətçiləri ehtiva edir (ünsiyyət üçün məlumat kanalları).
Proqramlaşdırma dillərinin səviyyələri - 2
Bəziləri yüksək sürətlə işləyir (qırmızı oxlar): prosessor yaddaşdan əmrlər çəkir və məlumatları manipulyasiya edir, video kart, xüsusən də 3D oyunlarda, monitor ekranında təsvir yaratmaq üçün çoxlu miqdarda tekstura, forma, piksel koordinatları və digər obyektləri istehlak edir. . Digərləri (məlumat mübadiləsi sürətindəki məhdudiyyətlərə görə) belə yüksək göstəricilərə ehtiyac duymurlar. Diaqramda yaşıl oxlarla müxtəlif daxili və xarici qurğular birləşdirilir.

Prosessorun daxili aləmi

Bütün prosessor əmrləri ikili formada icra üçün yaddaşdan gəlir. Təlimatların formatı, sayı, alt dəsti onun arxitekturasından asılıdır. Əksəriyyəti bir-biri ilə uzlaşmır və müxtəlif ideologiyaları izləyir. Həm də əmrin növü prosessorun işlədiyi rejimdən (8/16/32... bit dərinliyi) və məlumat mənbəyindən (yaddaş, registr, yığın...) çox asılıdır. Eyni hərəkət müxtəlif göstərişlərlə təmsil oluna bilər. Prosessorda iki operand əlavə etmək (ADD X,Y) və göstərilən birinə bir əlavə etmək (INC X) təlimatları var. Operanda üçlü əlavə etmək ADD X,3 kimi və ya INC X-ə üç dəfə zəng etməklə edilə bilər.Və müxtəlif prosessorlar üçün bu üsullardan hansının sürət və ya yaddaş izi baxımından optimal olacağını təxmin etmək mümkün deyil. Rahatlıq üçün binar məlumat onaltılıq formada yazılır. Gəlin tanış bir proqramın bir hissəsini nəzərdən keçirək (sintaksisi Java-ya bənzəyən C dili)
int func() {
    int i = getData("7") ;
    return ++i;
   ...
}
Prosessor üçün təlimatlar ardıcıllığı şəklində eyni hərəkətləri həyata keçirən kod: ... 48 83 ec 08 bf bc 05 20 00 31 c0 e8 e8 fe ff ff 48 83 c4 08 83 c0 01 ... Intel prosessoru üçün aşağı səviyyəli proqramlaşdırma dili əslində belə görünür. Arqumentlə metodu çağıran və nəticəni bir artıraraq qaytaran fraqment. Bu, icra üçün prosessora çevrilmədən birbaşa ötürülən maşın dilidir (kod). Müsbət cəhətləri:
  • Biz vəziyyətin tamamilə ustalarıyıq, prosessor və kompüter avadanlıqlarından istifadə etmək üçün ən geniş imkanlarımız var.
  • Kodun təşkili və optimallaşdırılması üçün bütün seçimlər bizim üçün mövcuddur.
Minuslar:
  • Prosessorların işləməsi haqqında geniş biliyə sahib olmaq və kodu icra edərkən çoxlu sayda aparat amillərini nəzərə almaq lazımdır.
  • Verilən nümunədən bir qədər mürəkkəb proqramların yaradılması kodun yazılması və onun sazlanması üçün sərf olunan vaxtın kəskin artmasına gətirib çıxarır.
  • Platformadan asılılıq: bir prosessor üçün yaradılmış proqram, ümumiyyətlə, digərlərində işləməyəcək. Ola bilsin ki, bu prosessor üçün onun digər iş rejimlərində kodun redaktəsi tələb olunacaq.
Maşın kodları kompüterlərin başlanğıcında geniş istifadə olunurdu, kompüter pionerləri dövründə proqramlaşdırmanın başqa üsulları yox idi. Hal-hazırda, prosessorları inkişaf etdirərkən və ya aşağı səviyyəli sınaqdan keçirərkən mikroelektronika mühəndisləri tərəfindən bəzən istifadə olunur.

Assembly dili (aşağı səviyyə)

Kompüterdən fərqli olaraq, siz və mən məlumatları rəqəmsal formada deyil, mətn/semantik formada daha yaxşı qəbul edirik. Siz smartfonunuzda asanlıqla əlli əlaqə adını qeyd edə bilərsiniz, lakin onların müvafiq telefon nömrələrini əzbər yaza bilməyəcəksiniz. Proqramlaşdırma ilə də eynidir. Üç əsas addım ataraq tip nərdivanını yuxarı qaldırırıq:
  • Gəlin bir simvolik təlimatı müvafiq hərəkətləri yerinə yetirən rəqəmsal prosessor təlimatları qrupları ilə əlaqələndirək.
  • Prosessor təlimatlarının arqumentlərini ayrıca vurğulayaq.
  • Yaddaş sahələrini, dəyişənləri və fərdi əmrlərin yerini adlandırmaq qabiliyyətini təqdim edək.
Əvvəlki proqramın maşın kodunda (mərkəzdə) və montaj dilində (sağda) fraqmentlərini müqayisə edək:
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
Gördüyünüz kimi, proqramın yazılması prosesi sadələşdirilib: rəqəmsal komanda qiymətlərinin yaradılması, keçid uzunluqlarının hesablanması, yaddaşda məlumatların onun hüceyrələri arasında yayılması və digər prosessor xüsusiyyətləri üçün istinad kitablarından istifadə etməyə ehtiyac yoxdur. Tələb olunan hərəkəti simvolik əmrlər toplusundan və icra məntiqi üçün zəruri olan arqumentlərdən təsvir edirik, sonra tərcüməçi proqramı mətn faylını prosessor üçün başa düşülən sıfırlar və birlər dəstinə çevirir. Müsbət cəhətləri:
  • Kodun yazılması və dəyişdirilməsi prosesi sadələşdirilib.
  • Bütün aparat resurslarına nəzarət təmin edildi.
  • Proqramı digər platformalara daşımaq nisbətən asandır, lakin onlar aparat uyğunluğundan asılı olaraq modifikasiya tələb edir.
Minuslar:
  • Assembly dili aşağı səviyyəli proqramlaşdırma dilidir. Hətta kiçik kod bölmələri yaratmaq çətindir. Bundan əlavə, avadanlığın xüsusi işini də nəzərə almaq lazımdır.
  • Platformadan asılılıq.
Ən məşhur Java demo nümunəsi:
public static void main(String[] args) {
    System.out.println("Hello World!");
}
(NASM sintaksisi, Windows API və kernel32.lib istifadə edərək) aşağıdakı kimi görünəcək:
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:
Maşın kodları kimi, montaj dili daha çox mühəndislər və sistem proqramçıları tərəfindən istifadə olunur. O, müxtəlif periferik qurğular üçün drayverlərin icra xüsusiyyətləri üçün vaxt baxımından kritik və ya kritik olan əməliyyat sistemi nüvəsinin aparatdan asılı hissələrini yazmaq üçün istifadə olunur. Lakin son vaxtlar ona getdikcə daha az müraciət edirlər, çünki onun istifadəsi proqramların digər platformalara daşınmasını xeyli azaldır. Bəzən onlar sökülmə prosesindən istifadə edirlər - kiçik fraqmentlərin icrasının məntiqini təhlil etmək üçün rəqəmsal kodlardan proqramın montaj siyahısını yaradırlar. Nadir hallarda, orijinal yüksək səviyyəli kod mövcud olmadıqda: onlarla mübarizə aparmaq üçün virusların təhlili və ya mənbə kodunun itirilməsi. Assembly dili birinci/ikinci nəsil hesab olunur (biz assemblerin yaranmasından əvvəl psevdokodları və onların simvolik əmrlərdən fərqini ayrıca nəzərdən keçirməyəcəyik). Demo Scene-də assemblerdən istifadəni vurğulamaq istərdim: resurs məhdudiyyətləri ilə video kliplər yaradan proqramlar şəklində yaradıcılarının bədii ideyalarını təcəssüm etdirən incəsənət, riyaziyyat və aşağı səviyyəli kodlaşdırmanın birləşməsidir. Çox vaxt proqramın və məlumat faylının ümumi ölçüsü 256 baytdan çox olmamalıdır (4/64 kilobayt formatı da məşhurdur). Budur 4 KB proqram nümunəsi:

C qrupu/Fortran dilləri (orta/yüksək səviyyə)

Kompüter texnologiyasının imkanlarının inkişafı ilə, funksionallığın həcmi və assemblerdə kodun həyata keçirilməsi vaxtı artıq qənaətbəxş deyildi. Proqramların yazılması, sınaqdan keçirilməsi və saxlanması xərcləri onların imkanlarından daha sürətlə artdı. Proqramçıdan avadanlıqların işləməsi ilə bağlı tələbləri azaltmaq, ona insan məntiqinə yaxın dillərdə yazmağa imkan verən bir vasitə vermək lazım idi. Proqramlaşdırma dili növlərinin yeni səviyyəsinə keçin. Sonrakı ardıcıl çağırışlar (prosedur proqramlaşdırma paradiqması) ilə müxtəlif modullara bölünmə qabiliyyətini təmin etmək, onları qurmaq imkanı ilə müxtəlif növ məlumatları təmin etmək və s. komanda işi. Yuxarıda göstərilənlərin hamısını dəstəkləyən ilk dillərdən biri keçən əsrin 50-ci illərində hazırlanmış Fortran idi . Döngülərdən, budaqlardan, alt proqramlardan istifadə edərək və massivlərlə işləmək və verilənləri həqiqi, tam və mürəkkəb ədədlər şəklində təqdim etməklə icra məntiqinin təsviri ilə mətn şəklində yaratmaq bacarığı mühəndisləri və alimləri sevindirdi. Qısa müddətdə elmi “çərçivələr” və kitabxanalar yaradıldı. Bütün bunlar, Fortranın dar elmi mühitdə olsa da, bu gün də aktual olmasının və inkişaf etməsinin nəticəsi idi, çünki inkişafların baqajı çox böyükdür, tək IMSL kitabxanası 1970-ci ildən (!) fəal şəkildə inkişaf edir, necə bir çox oxşar müvafiq proqramları xatırlaya bilərsiniz? - köhnə taymerlər? Bu səviyyədə dillərin inkişafının başqa bir qolu C. Əgər Fortran alimlər üçün alətə çevrildisə, o zaman C proqramçılara tətbiqi proqram təminatı yaratmağa kömək etmək üçün yaradılmışdır: əməliyyat sistemləri, drayverlər və s. Dil yaddaşın ayrılmasını əl ilə idarə etməyə imkan verir və aparat resurslarına birbaşa çıxış imkanı verir. C proqramçıları aşağı səviyyəli obyektlərə nəzarət etməlidirlər, buna görə də bir çoxları C-nin qabaqcıl assembler dili olduğuna və çox vaxt “orta səviyyəli” dil adlandırıldığına inanırlar. Assemblerə verilənlərin yazılmasını, prosedur və modul proqramlaşdırma elementlərini təqdim edərək, C dili hələ də sistem proqramlaşdırması üçün əsas dillərdən biridir ki, bu da son dövrlərdə mikroelektronikanın sürətli inkişafı ilə asanlaşdırılır. Avadanlıqlarla qarşılıqlı əlaqəni həyata keçirmək üçün bütün növ qadcetlər, nəzarətçilər, şəbəkə və digər qurğular drayverlərə, əməkdaşlıq protokollarının həyata keçirilməsinə və digər nisbətən aşağı səviyyəli proqram təminatına ehtiyac duyur. Yuxarıda göstərilənlərin hamısı bu gün dilə olan tələbatın artmasına kömək edir. Obyekt yönümlü və funksional prinsiplər C sintaksisindən çox şey götürərək C++, C#, Java formasında daha da inkişaf etdirildi .
  • Kodun yaradılması prosesinin sadələşdirilməsi: növlərin tətbiqi, modullara bölünməsi, proqram siyahılarının azaldılması.
  • Прозрачная логика заложенного алгоритма вследствие ухода от машинных codeов к более понятным для человека командам в семантически описательном стиле.
  • Переносимость. Стало достаточно перекомпorровать текст программы для выполнения на другой платформе (возможно, с небольшой модификацией).
  • Скорость откомпorрованных программ.
Минусы:
  • Отсутствие автоматического управления памятью и необходимость постоянного её контроля.
  • Отсутствие реализации концепций an objectно-ориентированного и функционального программирования.

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

Yüksək səviyyəli proqramlaşdırma dilləri proqram təminatının yaradılması baxımından getdikcə maşın kodlarından uzaqlaşmağa və prosedurlarla yanaşı müxtəlif proqramlaşdırma paradiqmalarını həyata keçirməyə başladılar. Bunlara obyekt yönümlü prinsiplərin həyata keçirilməsi də daxildir. C++, Java, Python, JavaScript, Ruby... - bu tip dillərin çeşidi bu gün ən populyar və tələbatlıdır. Onlar müxtəlif proqram təminatının tətbiqi üçün daha çox imkan yaradır və onların hər birinin “ixtisaslaşmasını” dəqiq müəyyən etmək mümkün deyil. Lakin müvafiq sahələrdə tətbiqin populyarlığı onlarla işləmək üçün kitabxanalar/çərçivələrlə bağlıdır, məsələn: JavaScript - Frontend. Dil müştəri veb brauzeri ilə istifadəçi və uzaq server arasında qarşılıqlı əlaqə üçün nəzərdə tutulmuşdur. Ən məşhur kitabxanalar Angular, React və VUE-dir. Hal-hazırda internetdə və digər serverlərdə (backend) nisbətən aktiv şəkildə istifadə olunur, Node.js xüsusilə populyardır. Ruby - Backend. Skriptlər (xidmət faylları) yaratmaq üçün və veb serverlərdə istifadə olunur. Əsas çərçivə Ruby On Rails-dir. Python elmi və mühəndislik sahəsidir (veb domenindən başqa). O, standart hesablama və riyazi paketlərə (Mathematica, Octave, MatLab...) alternativdir, lakin dilin adi semantikasına və çoxlu sayda kitabxanaya malikdir. Maşın öyrənmə sistemləri, statistika və süni intellekt sahəsində çoxlu pərəstişkarları var. Tez-tez istifadə olunan kitabxanalara django, numpy, pandas və tensorflow daxildir. C++ – C dilinin universal, təkamül yolu ilə inkişafı.Aşağı səviyyəli aparatlarla qarşılıqlı əlaqə qabiliyyətini itirmədən funksional və obyekt yönümlü proqramlaşdırma imkanlarını təmin edir. Bununla əlaqədar olaraq, proqram təminatının yaradılması zamanı məhsuldarlıq və çeviklik həyata keçirilir, lakin qiymət də uyğundur: dilin mürəkkəb spesifikasiyasına görə giriş üçün yüksək maneə, proqramın icrası zamanı resurslara müstəqil nəzarət ehtiyacı. Bundan istifadə etməklə bir çox tək istifadəçi və sistem proqram təminatı yazılır: əməliyyat sistemi modulları (Windows, Symbian...), oyunlar, redaktorlar (Adobe Photoshop, Autodesk Maya...), verilənlər bazaları (MSSQL, Oracle...), oyunçular ( WinAmp...) və s. Qeyd etmək lazımdır ki, müasir proqram təminatı mürəkkəb məhsuldur, onun hazırlanmasında eyni vaxtda bir neçə proqramlaşdırma dilindən istifadə olunur və onların hər birinin proqramlaşdırmada iştirak dərəcəsini müəyyən etmək çox çətin ola bilər. ümumi nəticə.

Daha da irəliləyiş

Son zamanlarda başqa bir proqramlaşdırma növü populyarlıq qazanır - funksional (dil səviyyəsinin daha da inkişafı) . Burada hesablamalar üçün başqa bir abstraksiya növü var - funksiyalar toplusunu arqument kimi qəbul edən və digərini qaytaran funksiyalar. Dəyişənlərin rolunu eyni funksiyalar oynayır (bizə tanış olan dəyişənlər Java-da tip bəyannaməsindən əvvəl finala bənzər sadəcə sabit ifadələrdir). Funksiya özü əhatə dairəsinə görə bağlıdır, onun işinin nəticəsi yalnız ötürülən arqumentlərdən asılıdır. Bundan iki əlamətdar xüsusiyyət gəlir:
  • Test üçün bizə yalnız funksiya arqumentləri lazımdır (işin nəticəsi xarici dəyişənlərdən asılı deyil və s.).
  • Funksional üslublu proqram möcüzəvi şəkildə paralellik üçün hazırdır: ardıcıl funksiya çağırışları qonşu iplərdə verilə bilər (çünki onlara xarici amillər təsir etmir) və kilidləmə tələb etmir (yəni sinxronizasiya problemləri yoxdur). Çox nüvəli prosessorların geniş yayılmasını nəzərə alaraq, bu mövzuya vaxt ayırmaq üçün yaxşı bir stimul.
Bununla belə, giriş həddi OOP ilə müqayisədə daha yüksəkdir: effektiv kod üçün icra alqoritmini funksiyalar şəklində təsvir edən proqram qurmaq lazımdır. Həm də təmiz funksional üslub üçün məntiq və kateqoriya nəzəriyyəsinin əsaslarını bilmək yaxşı olardı. Ən məşhurları Haskell, Scala, F#-dır. Ancaq qorxmayın, funksional proqramlaşdırma elementləri Java-da (eləcə də digər müasir üçüncü nəsil dillərdə) meydana çıxdı və onlar OOP ilə birləşdirilə bilər. JavaRush onlayn təcrübəsində bütün bu təfərrüatlarla daha ətraflı tanış olacaqsınız. Məntiq proqramlaşdırma sahəsi (dillərin növbəti səviyyəsi) tələbatın az olması səbəbindən hələ də geniş praktik tətbiq tapmamışdır. Proqramların qurulması diskret riyaziyyatın əsasları, predikat məntiqi, məhdudiyyət alətləri və riyazi məntiqin digər sahələri haqqında bilik tələb edir. Ən populyar aktiv dil Proloqdur.

Nəticə

Hal-hazırda ən çox yayılmış dillər OOP-dir. Java, yarandığı gündən bəri həmişə ən yaxşı, adətən ilk üç populyar dildə olub. OOP ilə yanaşı, funksional proqramlaşdırma elementlərini ehtiva edir və siz proqramlarınızı yazmağın müxtəlif üslublarını birləşdirə bilərsiniz. Java-nın tətbiq dairəsi çox genişdir - bunlar biznes tapşırıqları, veb serverlərin həyata keçirilməsi (backend), Android proqramlarının yaradılması üçün əsas dil, çarpaz platforma proqramlaşdırma mühitləri və iş yerləri (IDE/AWM) və modelləşdirmə və s. . Java-nın mövqeyi Müəssisə sektorunda xüsusilə güclüdür - yüksək keyfiyyətli və uzunmüddətli kod və ən mürəkkəb biznes məntiqinin həyata keçirilməsini tələb edən korporativ proqram təminatı sahəsi.
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION