JavaRush /Java Blog /Random-TL /Mga antas ng programming language

Mga antas ng programming language

Nai-publish sa grupo

Panimula

Ano ang iba't ibang programming language? Anong uri ng mga konsepto ang nakapaloob sa kanila? Paano sila nabuo? Sa artikulong ito, titingnan natin ang mga uri ng mga programming language batay sa tinatawag na mga antas - mula sa mga code ng makina (mababang antas, malapit sa hardware ng computer) hanggang sa mga wika tulad ng Java o C# (mataas na antas). Ang mas kaunting mga pagbabagong nararanasan ng listahan ng teksto ng programa habang nagiging isang hanay ng mga zero at isa, mas mababa ang antas.
Mga antas ng programming language - 1
Susunod na titingnan natin ang:
  1. Mga wikang mababa ang antas (mga machine code at pagpupulong)
  2. Intermediate level (C, Fortran….)
  3. Mataas na antas (C++, Java, Python, Ruby, JavaScript...)
Inilalarawan din ng antas kung gaano karaming detalye ang kailangang detalyado ng listahan ng programa sa hinaharap upang maipatupad ang pagpapatupad. Gaano kadali ang prosesong ito para sa mga tao? Ang antas ng isang wika ay hindi dapat ituring na isang hindi malabo na tagapagpahiwatig ng mga kakayahan nito. Ang isang programming language ay isang tool na epektibo sa isang lugar at hindi gaanong kapaki-pakinabang sa iba. Parehong nagtatrabaho sa kahoy ang kabit at ang karpintero. Ang una ay may pangunahing tool - isang hanay ng mga pait, ang pangalawa - isang palakol. Gayunpaman, ang isang karpintero ay gagawing mas elegante ang isang inukit na kabinet, at ang isang karpintero ay magtatayo ng isang bahay nang mas mabilis. Bagama't ang bawat isa ay may kakayahang gawin ang gawain ng iba, gagawin nila ito nang hindi gaanong mahusay. Ang iba't ibang data sa isang computer ay kinakatawan bilang mga hanay ng mga zero at isa. Ang mga control command para sa pagproseso nito ay ang parehong data na naglalaman ng mga tagubilin na tumutukoy sa lokasyon ng kinakailangang impormasyon at ang paraan ng pagbabago.

Mga wika ng makina (pinakamababang antas)

Kakailanganin nating gumawa ng maikling pagbisita mula sa lugar ng Software hanggang sa lugar ng Hardware. Tingnan natin ito sa isang pinasimpleng anyo. Ang processor ay ang pangunahing "utak" ng computer. Ang motherboard kung saan ito naka-install ay naglalaman ng mga controllers na ginagamit upang makipag-ugnayan sa iba pang mga device sa pamamagitan ng mga bus (mga channel ng data para sa komunikasyon).
Mga antas ng programming language - 2
Gumagana ang ilan sa mataas na bilis (mga pulang arrow): kumukuha ang processor ng mga utos mula sa memorya at minamanipula ang data, ang video card, lalo na sa mga larong 3D, ay kumokonsumo ng napakaraming texture, hugis, pixel coordinates at iba pang mga bagay upang makabuo ng imahe sa screen ng monitor . Ang iba (dahil sa mga limitasyon sa bilis ng pagpapalitan ng impormasyon) ay hindi nangangailangan ng ganoong mataas na mga tagapagpahiwatig. Ang iba't ibang panloob at panlabas na aparato ay konektado sa diagram na may berdeng mga arrow.

Ang panloob na mundo ng processor

Ang lahat ng mga utos ng processor ay nagmumula sa memorya para sa pagpapatupad sa binary form. Ang format, numero, subset ng mga tagubilin ay nakasalalay sa arkitektura nito. Karamihan sa kanila ay hindi tugma sa isa't isa at sumusunod sa iba't ibang ideolohiya. At din ang uri ng command ay lubos na nakasalalay sa mode (8/16/32... bit depth) at ang data source (memorya, register, stack...) kung saan gumagana ang processor. Ang parehong aksyon ay maaaring kinakatawan ng iba't ibang mga tagubilin. Ang processor ay may mga tagubilin para sa pagdaragdag ng dalawang operand (ADD X,Y) at pagdaragdag ng isa sa tinukoy (INC X). Ang pagdaragdag ng triple sa isang operand ay maaaring gawin bilang ADD X,3 o sa pamamagitan ng pagtawag sa INC X nang tatlong beses. At, para sa iba't ibang mga processor, imposibleng mahulaan kung alin sa mga pamamaraang ito ang magiging pinakamainam sa mga tuntunin ng bilis o memory footprint. Para sa kaginhawahan, ang binary na impormasyon ay nakasulat sa hexadecimal form. Isaalang-alang natin ang bahagi ng isang pamilyar na programa (C language, ang syntax nito ay katulad ng Java)
int func() {
    int i = getData("7") ;
    return ++i;
   ...
}
Code na nagpapatupad ng parehong mga aksyon sa anyo ng isang pagkakasunud-sunod ng mga tagubilin para sa processor: ... 48 83 ec 08 bf bc 05 20 00 31 c0 e8 e8 fe ff ff 48 83 c4 08 83 c0 01 ... Ito ang hitsura ng mababang antas ng programming language para sa Intel processor. Isang fragment na tumatawag sa isang paraan na may argumento at ibinabalik ang resulta na dinagdagan ng isa. Ito ay wika ng makina (code), na direktang inilipat, nang walang pagbabago, sa processor para sa pagpapatupad. Mga kalamangan:
  • Kami ay ganap na masters ng sitwasyon, mayroon kaming pinakamalawak na posibilidad para sa paggamit ng processor at computer hardware.
  • Ang lahat ng mga opsyon para sa pag-aayos at pag-optimize ng code ay magagamit sa amin.
Minuse:
  • Kinakailangan na magkaroon ng malawak na kaalaman sa paggana ng mga processor at isaalang-alang ang isang malaking bilang ng mga kadahilanan ng hardware kapag nagsasagawa ng code.
  • Ang paggawa ng mga program na bahagyang mas kumplikado kaysa sa halimbawang ibinigay ay humahantong sa isang matalim na pagtaas sa oras na ginugol sa pagsulat ng code at pag-debug nito.
  • Platform dependence: ang isang program na nilikha para sa isang processor ay karaniwang hindi gagana sa iba. Posible na para sa processor na ito, sa iba pang mga mode ng pagpapatakbo nito, kakailanganin ang pag-edit ng code.
Ang mga machine code ay malawakang ginagamit sa simula ng mga computer; walang iba pang mga pamamaraan ng programming sa panahon ng mga computer pioneer. Sa kasalukuyan, paminsan-minsan ang mga ito ay ginagamit ng mga inhinyero ng microelectronics kapag bumubuo o mababang antas ng pagsubok ng mga processor.

Wika ng assembly (mababang antas)

Hindi tulad ng isang computer, ikaw at ako ay mas nakikita ang impormasyon sa text/semantic form kaysa sa digital form. Madali mong mapapangalanan ang limampung pangalan ng contact sa iyong smartphone, ngunit malamang na hindi mo maisulat ang kanilang mga kaukulang numero ng telepono sa puso. Ganun din sa programming. Umakyat kami sa uri ng hagdan sa pamamagitan ng pagsasagawa ng tatlong pangunahing hakbang:
  • Iugnay natin ang isang simbolikong pagtuturo sa mga pangkat ng mga tagubilin sa digital processor na nagsasagawa ng mga kaukulang aksyon.
  • I-highlight natin ang mga argumento ng mga tagubilin ng processor nang hiwalay.
  • Ipakilala natin ang kakayahang pangalanan ang mga lugar ng memorya, mga variable, at ang lokasyon ng mga indibidwal na utos.
Ihambing natin ang mga fragment ng nakaraang programa sa machine code (gitna) at sa assembly language (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
Tulad ng nakikita mo, ang proseso ng pagsulat ng isang programa ay pinasimple: hindi na kailangang gumamit ng mga reference na libro para sa pagbuo ng mga digital na halaga ng command, pagkalkula ng mga haba ng paglipat, pamamahagi ng data sa memorya sa mga cell nito, at iba pang mga tampok ng processor. Inilalarawan namin ang kinakailangang pagkilos mula sa isang hanay ng mga simbolikong utos at ang mga argumentong kinakailangan para sa lohika ng pagpapatupad, at pagkatapos ay isinasalin ng programa ng tagapagsalin ang text file sa isang hanay ng mga zero at mga naiintindihan ng processor. Mga kalamangan:
  • Ang proseso ng pagsulat at pagbabago ng code ay pinasimple.
  • Ang kontrol sa lahat ng mapagkukunan ng hardware ay pinananatili.
  • Ito ay medyo mas madaling i-port ang program sa iba pang mga platform, ngunit nangangailangan sila ng pagbabago depende sa compatibility ng hardware.
Minuse:
  • Ang Assembly language ay isang mababang antas ng programming language. Ang paglikha ng kahit na maliliit na seksyon ng code ay mahirap. Bilang karagdagan, kinakailangan ding isaalang-alang ang tiyak na operasyon ng kagamitan.
  • Pagdepende sa platform.
Ang pinakasikat na halimbawa ng Java demo:
public static void main(String[] args) {
    System.out.println("Hello World!");
}
ang magiging hitsura (NASM syntax, gamit ang Windows API at kernel32.lib) tulad ng sumusunod:
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:
Tulad ng mga machine code, ang assembly language ay mas madalas na ginagamit ng mga engineer at system programmer. Ginagamit ito upang magsulat ng mga bahagi ng operating system na nakadepende sa hardware na kritikal sa oras o kritikal sa mga feature ng pagpapatupad ng mga driver para sa iba't ibang peripheral na device. Ngunit kamakailan lamang ay unti-unti na nilang ginagamit ito, dahil ang paggamit nito ay lubos na binabawasan ang portability ng mga programa sa iba pang mga platform. Minsan ginagamit nila ang proseso ng disassembly - lumikha sila ng isang listahan ng assembler ng isang programa mula sa mga digital code upang i-parse ang lohika para sa pagpapatupad ng maliliit na fragment. Sa mga bihirang kaso, kung ang orihinal na mataas na antas na code ay hindi magagamit: pagsusuri ng mga virus upang labanan ang mga ito o pagkawala ng source code. Ang wika ng pagpupulong ay itinuturing na una/ikalawang henerasyon (hindi namin isasaalang-alang nang hiwalay ang mga pseudocode bago ang paglitaw ng assembler at ang kanilang pagkakaiba mula sa mga simbolikong utos). Gusto kong i-highlight ang paggamit ng assembler sa Demo Scene: isang pagsasanib ng sining, matematika at mababang antas na coding, na naglalaman ng mga masining na ideya ng kanilang mga tagalikha sa anyo ng mga programa na bumubuo ng mga video clip na may mga limitasyon sa mapagkukunan. Kadalasan ang kabuuang sukat ng program at data file ay hindi dapat lumampas sa 256 bytes (4/64 kilobyte na format ay sikat din). Narito ang isang halimbawa ng isang 4 KB na programa:

Mga wika ng Group C/Fortran (intermediate/high level)

Sa pag-unlad ng mga kakayahan ng teknolohiya ng computer, ang dami ng functionality at timing ng pagpapatupad ng code sa assembler ay hindi na kasiya-siya. Ang mga gastos sa pagsulat, pagsubok at pagpapanatili ng mga programa ay lumago nang mas mabilis kaysa sa kanilang mga kakayahan. Kinakailangan na bawasan ang mga kinakailangan mula sa programmer sa mga tuntunin ng kaalaman sa paggana ng kagamitan, upang bigyan siya ng isang tool na magpapahintulot sa kanya na magsulat sa mga wika na malapit sa lohika ng tao. Lumipat sa isang bagong antas ng mga uri ng programming language. Magbigay ng kakayahang hatiin sa iba't ibang mga module na may karagdagang sequential calling (procedural programming paradigm), magbigay ng iba't ibang uri ng data na may kakayahang buuin ang mga ito, atbp. Bukod pa rito, ang mga hakbang na ito ay nagdala ng pinabuting portability ng code sa ibang mga platform, mas komportableng organisasyon ng pangkatang gawain. Ang isa sa mga unang wika na sumuporta sa lahat ng nasa itaas ay ang Fortran, na binuo noong 50s ng huling siglo . Ang kakayahang lumikha sa anyo ng teksto na may paglalarawan ng lohika ng pagpapatupad gamit ang mga loop, sanga, subroutine at pagpapatakbo gamit ang mga arrays at pagpapakita ng data sa anyo ng tunay, integer at kumplikadong mga numero na ikinatuwa ng mga inhinyero at siyentipiko. Sa maikling panahon, nalikha ang siyentipikong "mga balangkas" at mga aklatan. Ang lahat ng ito ay bunga ng katotohanan na ang Fortran ay may kaugnayan pa rin ngayon, kahit na sa isang makitid na kapaligirang pang-agham, at umuunlad, dahil ang mga bagahe ng mga pag-unlad ay napakalaki, ang IMSL library lamang ay aktibong umuunlad mula noong 1970 (!), kung paano maraming katulad na nauugnay na software ang naaalala mo? - mga lumang-timer? Ang isa pang sangay ng pag-unlad ng mga wika sa antas na ito ay C. Kung naging kasangkapan ang Fortran para sa mga siyentipiko, nilikha ang C upang tulungan ang mga programmer na lumikha ng software ng application: mga operating system, driver, atbp. Nagbibigay-daan sa iyo ang wika na manu-manong kontrolin ang paglalaan ng memorya at nagbibigay ng direktang access sa mga mapagkukunan ng hardware. Kailangang kontrolin ng mga programmer ng C ang mga entity na mababa ang antas, kaya marami ang nag-iisip na ang C ay isang advanced na wika ng pagpupulong at kadalasang tinatawag na "mid-level" na wika. Ang pagkakaroon ng ipinakilala ang pag-type ng data sa assembler, mga elemento ng procedural at modular programming, ang C language ay isa pa rin sa mga pangunahing wika para sa system programming, na pinadali din ng mabilis na pag-unlad ng microelectronics sa mga nagdaang panahon. Ang lahat ng uri ng mga gadget, controller, network at iba pang mga device ay nangangailangan ng mga driver, pagpapatupad ng mga protocol para sa pakikipagtulungan at iba pang medyo mababang antas ng software upang ipatupad ang pakikipag-ugnayan sa kagamitan. Ang lahat ng nabanggit ay nakakatulong sa pangangailangan para sa wika ngayon. Ang Object-oriented at functional na mga prinsipyo ay higit na binuo sa anyo ng C++, C#, Java, na kumukuha ng marami mula sa C syntax. Mga kalamangan:
  • Pagpapasimple ng proseso ng paglikha ng code: pagpapakilala ng mga uri, paghahati sa mga module, pagbabawas ng mga listahan ng programa.
  • Прозрачная логика заложенного алгоритма вследствие ухода от машинных codeов к более понятным для человека командам в семантически описательном стиле.
  • Переносимость. Стало достаточно перекомпorровать текст программы для выполнения на другой платформе (возможно, с небольшой модификацией).
  • Скорость откомпorрованных программ.
Минусы:
  • Отсутствие автоматического управления памятью и необходимость постоянного её контроля.
  • Отсутствие реализации концепций an objectно-ориентированного и функционального программирования.

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

Ang mga high-level na programming language, sa mga tuntunin ng paglikha ng software, ay lalong nagsimulang lumayo sa mga machine code at magpatupad ng iba't ibang paradigm sa programming bilang karagdagan sa mga pamamaraan. Kasama rin dito ang pagpapatupad ng mga prinsipyong nakatuon sa object. C++, Java, Python, JavaScript, Ruby... - ang hanay ng mga wika ng ganitong uri ay ang pinakasikat at hinihiling ngayon. Nagbibigay sila ng mas maraming pagkakataon para sa pagpapatupad ng iba't ibang software at imposibleng malinaw na matukoy ang "espesyalisasyon" ng bawat isa sa kanila. Ngunit ang katanyagan ng aplikasyon sa mga nauugnay na lugar ay dahil sa mga library/framework para sa pagtatrabaho sa kanila, halimbawa: JavaScript - Frontend. Ang wika ay idinisenyo para sa pakikipag-ugnayan sa pagitan ng isang client web browser at isang user at isang malayuang server. Ang pinakasikat na mga aklatan ay Angular, React at VUE. Sa kasalukuyan, ito ay medyo aktibong ginagamit sa web at iba pang mga server (backend), lalo na sikat ang Node.js. Ruby - Backend. Ginagamit ito upang lumikha ng mga script (mga file ng serbisyo) at sa mga web server. Ang pangunahing balangkas ay Ruby On Rails. Ang Python ay isang larangang pang-agham at inhinyero (bukod sa larangan ng web). Ito ay isang alternatibo sa karaniwang computing at mathematical na mga pakete (Mathematica, Octave, MatLab...), ngunit may karaniwang semantika ng wika at isang malaking bilang ng mga aklatan. Mayroong maraming tagahanga sa larangan ng machine learning system, istatistika at artificial intelligence. Kasama sa mga madalas gamitin na library ang django, numpy, pandas, at tensorflow. C++ – Universal, evolutionary development ng C language. Nagbibigay ng functional at object-oriented na mga kakayahan sa programming nang hindi nawawala ang kakayahang makipag-ugnayan sa mababang antas ng hardware. Dahil dito, ang pagiging produktibo at kakayahang umangkop ay natanto kapag lumilikha ng software, ngunit ang presyo ay tumutugma din: isang mataas na hadlang sa pagpasok dahil sa kumplikadong detalye ng wika, ang pangangailangan para sa independiyenteng kontrol sa mga mapagkukunan kapag isinasagawa ang programa. Maraming single-user at system software ang nakasulat gamit ito: operating system modules (Windows, Symbian...), mga laro, editor (Adobe Photoshop, Autodesk Maya...), database (MSSQL, Oracle...), mga manlalaro ( WinAmp...), atbp. Dapat pansinin na ang modernong software ay isang kumplikadong produkto, ang pag-unlad nito ay gumagamit ng ilang mga programming language nang sabay-sabay, at maaaring napakahirap matukoy ang antas ng pakikilahok ng bawat isa sa kanila sa ang kabuuang resulta.

Karagdagang pag-unlad

Kamakailan, isa pang uri ng programming ang nagiging popular - functional (karagdagang pag-unlad ng antas ng wika) . Narito ang isa pang uri ng abstraction para sa mga kalkulasyon - mga function na kumukuha ng isang hanay ng mga function bilang mga argumento at nagbabalik ng isa pa. Ang papel na ginagampanan ng mga variable ay ginagampanan ng parehong mga pag-andar (ang mga variable na pamilyar sa amin ay pare-pareho lamang na mga expression, katulad ng pangwakas bago ang isang uri ng deklarasyon sa Java). Ang function mismo ay sarado sa saklaw nito, ang resulta ng operasyon nito ay nakasalalay lamang sa mga argumentong naipasa. Dalawang kahanga-hangang katangian ang sumusunod dito:
  • Para sa pagsubok, kailangan lang namin ng mga argumento ng pag-andar (ang resulta ng trabaho ay hindi nakasalalay sa mga panlabas na variable, atbp.).
  • Ang isang functional-style na programa ay mahimalang concurrency-ready: ang mga sequential function na tawag ay maaaring ibigay sa mga kalapit na thread (dahil hindi sila apektado ng mga panlabas na salik) at hindi nangangailangan ng mga lock (iyon ay, walang mga problema sa pag-synchronize). Isang magandang insentibo na maglaan ng oras sa paksang ito, dahil sa malawakang paggamit ng mga multi-core na processor.
Gayunpaman, ang entry threshold ay mas mataas kaysa para sa OOP: para sa epektibong code kinakailangan na bumuo ng isang programa, na naglalarawan sa execution algorithm sa anyo ng mga function. Ngunit para din sa isang purong functional na istilo, mainam na malaman ang mga pangunahing kaalaman ng lohika at teorya ng kategorya. Ang pinakasikat ay Haskell, Scala, F#. Ngunit huwag matakot, ang mga elemento ng functional programming ay lumitaw sa Java (pati na rin sa iba pang modernong ikatlong henerasyong mga wika) at maaari silang isama sa OOP. Malalaman mo ang lahat ng mga detalyeng ito nang mas detalyado sa JavaRush online internship. Ang larangan ng logic programming (ang susunod na antas ng mga wika) ay hindi pa nakakahanap ng malawak na praktikal na aplikasyon dahil sa mababang pangangailangan nito. Ang pagbuo ng mga programa ay nangangailangan ng kaalaman sa mga batayan ng discrete mathematics, predicate logic, constraint tools at iba pang sangay ng mathematical logic. Ang pinakasikat na aktibong wika ay Prolog.

Konklusyon

Sa kasalukuyan, ang pinakakaraniwang mga wika ay OOP. Ang Java, mula nang mabuo ito, ay palaging nasa tuktok, kadalasan sa tatlong nangungunang, mga sikat na wika. Bilang karagdagan sa OOP, naglalaman ito ng mga elemento ng functional programming, at maaari mong pagsamahin ang iba't ibang estilo ng pagsulat ng iyong mga programa. Ang hanay ng mga application ng Java ay napakalawak - ito ay mga gawain sa negosyo, ang pagpapatupad ng mga web server (backend), ang pangunahing wika para sa paglikha ng mga Android application, cross-platform programming environment at mga lugar ng trabaho (IDE/AWM) at pagmomodelo, at marami pang iba . Ang posisyon ng Java ay lalong malakas sa sektor ng Enterprise - isang lugar ng corporate software na nangangailangan ng mataas na kalidad at mahabang buhay na code at ang pagpapatupad ng pinaka kumplikadong lohika ng negosyo.
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION