Računala Windows Internet

Razni programski jezici. Programski jezik

Sve do sredine šezdesetih osobno je računalo bilo preskup stroj koji se koristio isključivo za posebne zadatke i koji je obavljao samo jedan po jedan zadatak.

Programski jezici u to vrijeme, kao i računalni uređaji na kojima su korišteni, razvijeni su samo za izvršavanje zadataka određenog plana, na primjer, za znanstveno računanje, a ne. Iz razloga što su strojevi, kao što smo gore rekli, bili vrlo skupo zadovoljstvo, a istovremeno se obavljao samo jedan zadatak, tada se vrijeme smatralo skupim - stoga je brzina izvođenja programa bila u prvom planu.

Međutim, cijena je počela opadati tijekom šezdesetih godina, a došlo je vrijeme kada su si i male tvrtke mogle priuštiti ovo zadovoljstvo. Osim toga, brzina se povećala, a strojevi su dugo stajali u mirovanju bez obavljanja ikakvih zadataka. A kako bi se to zaustavilo, uvedeni su sustavi dijeljenja vremena.

Procesorsko vrijeme u tim sustavima, kako to reći, "rezati", a korisnici su mogli naizmjenično primati kratke segmente upravo tog vremena. Računalni uređaj počeo je raditi puno brže, što je korisniku omogućilo da se na terminalu osjeća kao da sam radi svoj posao sa sustavom. Aparat je, pak, bio manje u stanju mirovanja, jer je izvršavao ne jedan, već nekoliko zadataka odjednom. Dijeljenje vremena značajno je smanjilo trošak hardverskog vremena, a sve zbog činjenice da je jedan uređaj moglo dijeliti više od jednog korisnika, a ne čak dva, već stotine.

Dakle, kada je energija postala jeftinija i dostupnija, oni koji su stvarali programske jezike počeli su sve više razmišljati o praktičnijem pisanju softvera, a ne o brzini njihovog izvršavanja. "Male" operacije, odnosno operacije atomskog tipa koje su izravno izvodili uređaji, kombinirani su u "obimnije" operacije visoka razina i jednoobraznih dizajna, s kojima je korisnicima bilo mnogo praktičnije i lakše obavljati svoje aktivnosti.

Što su programski jezici?

Sada ćemo dati jasan odgovor na ovo pitanje. Programski jezik je formalni znakovni sustav koji je namijenjen za opisivanje algoritama u prikladnijem obliku za izvođača, na primjer, osobno računalo... Programski jezik uključuje paket semantičkih, sintaktičkih i leksičkih pravila koja se koriste za izradu računalnog programa. Uz pomoć takvog jezika, programer će moći točno odrediti na koje će događaje PC reagirati, kako će se informacije pohranjivati ​​i prenositi, kao i koje radnje moraju biti izvedene u tim različitim vrstama okolnosti.

Gotovo tri tisuće programskih jezika izumljeno je tijekom stvaranja prvih programabilnih uređaja. Njihov se broj svake godine povećava, a popis se nadopunjuje novima. Postoje neki jezici koje samo mali broj kreatora koji su ih razvili zna koristiti, drugi postaju poznati velikom broju korisnika. U svom radu programeri koriste više od deset različiti jezici programiranje.

Čemu služe programski jezici?

Proces PC-a je izvođenje programa. Da se izrazim više jednostavan jezik, odnosno skup naredbi koje slijede određenim redoslijedom. Vrsta instrukcije tipa stroja, koja se sastoji od nula i jedinica, pokazuje koje radnje središnji procesor treba izvesti. Iz ovoga slijedi: da bi se postavio PC slijed radnji koje će se izvršiti, postavlja se slijed kodova binarnog tipa odgovarajućih naredbi. U strojnim kodovima softver se sastoji od mnogih uputa. Pisanje takvog softvera je dugotrajno, glomazno i ​​zamorno. Programer mora znati kombinaciju jedinica i nula koda binarnog tipa svakog programa, osim toga, mora zapamtiti kodove binarnog tipa adresa podataka koji se koriste u njegovom izvršavanju. Mnogo je lakše napisati softver na jeziku koji je bliži ljudskom prirodnom jeziku i uputiti PC da prevede ovaj program u kodove strojnog tipa. Tako su se pojavili programski jezici, koji su posebno namijenjeni za pisanje softvera.

Sada postoji veliki broj različitih programskih jezika. Da biste riješili mnoge probleme, možete primijeniti svaki od njih. Stručnjaci u svom području znaju koji programski jezik koristiti za rješavanje bilo kakvih problema, budući da svaki od jezika ima svoje mogućnosti, orijentaciju na određene vrste zadataka, a također ima svoj način opisivanja objekata i koncepata koji se koriste kako bi se riješio veliki broj problema.

Programski jezici su podijeljeni u 2 grupe

Postoje jezici koji su na niskoj razini i jezici koji su na visokoj razini.

Prva skupina uključuje asemblerske jezike, gdje se simboli instrukcija koriste u obliku simbola koji se brzo i jasno pamte. Simboli zapisuju se umjesto niza naredbi binarnog tipa, a umjesto adresa podataka binarnog tipa koje se koriste prilikom izvršavanja naredbe, nazivi tih podataka koje su programeri odabrali uzimaju se u obliku simbola. Takav programski jezik ima drugo ime - autocode ili mnemonic code.

No, programski jezici visoke razine najčešće se koriste za programe od strane onih koji ih stvaraju. Takav jezik, u principu, kao i ljudski jezik, ima svoju abecedu, naime, veliki broj simbola koji se koriste u jezicima. Ovi znakovi su potrebni za sastavljanje ključnih riječi jezika. Svaka ključna riječ ima svoju funkciju, baš kao i u nama uobičajenom jeziku riječi koje se sastoje od abecednih slova. Ključne riječi se međusobno kombiniraju u rečenice koristeći sintaktička pravila jezika. Svaki od svih prijedloga odgovoran je za slijed radnji koje će PC izvršiti.

Programski jezik, koji ima visoku razinu, poveznica je između osobnog računala i korisnika, nudeći mu komunikaciju s računalom na način koji je najprikladniji za osobu. Često vam ovaj jezik pomaže odabrati pravu metodu za rješavanje problema.

Prije nego što počne pisati softver na programskom jeziku koji ima visoku razinu, stručnjak izrađuje algoritam za rješavanje problema, naime, izrađuje akcijski plan korak po korak koji se mora izvršiti za rješavanje ovog problema. Stoga se programski jezici koji zahtijevaju preliminarnu kompilaciju algoritma nazivaju jezicima algoritamskog tipa.

Eto, dolazimo, možemo reći glavnom. Sada ćemo vam reći koji su programski jezici.

Koji programski jezici postoje

Fortran

Sredinom pedesetih znanstvenici su počeli stvarati programske jezike. I prvi jezik ovog tipa nazvan je Fortran, a razvijen je 1957. godine. Koristi se za opisivanje algoritma za rješavanje problema znanstveno-tehničkog tipa pomoću digitalnog računala. Osim toga, kao i prve računske jedinice, ova vrsta jezika korištena je za izvođenje prirodno-znanstvenih i matematičkih izračuna. Taj je jezik u poboljšanom tipu preživio do našeg vremena, a među modernim jezicima koji imaju visoku razinu najviše se koristi u znanstvenim istraživanjima. Najčešće opcije danas su Fortran-I2, Fortran-I4, EASIC Fortran i njihove generalizacije.

ALGOL

Nastavljamo našu temu programskih jezika. Kao što ste već razumjeli, sada ćemo govoriti o takvom programskom jeziku kao što je Algol, koji se pojavio 1958-1960. 1964-1968 je poboljšan, pa se pojavio Algol - 68. Jezik ove vrste razvio je odbor, u koji su bili znanstvenici iz Amerike i Europe, i svrstao ga među jezike koji imaju visoku razinu. Koristeći jezik ovog tipa, algebarske formule mogle bi se lako prevesti u programske naredbe. Algol je bio popularan ne samo u Europi, već iu Rusiji. Za sve programske jezike stvorene nakon nekog vremena, ova vrsta jezika imala je primjetan utjecaj, a posebno je utjecala na jezik Pascal. Ova vrsta jezika, u principu, baš kao i jezik FORTRAN, stvorena je za rješavanje problema znanstvenog i tehničkog tipa. Osim toga, jezik se koristio kao sredstvo za podučavanje osnova programiranja, odnosno umijeća sastavljanja softvera.

Cobol

Programski jezik Cobol nastao je 1959.-1960., a ovaj jezik pripada trećoj generaciji. Prije svega, namijenjen je razvoju aplikacija za poslovanje i rješavanju problema ekonomskog tipa, za obradu bankovnih podataka, za osiguravajuća društva i druge institucije. Cobolova "izumiteljica" je Grace Hopper. Obično se COBOL kritizira zbog svoje glomaznosti i opširnosti, jer je jedan od ciljeva tvoraca ovog jezika bio maksimalno približavanje Engleski jezik... Istovremeno, programski jezik je za svoje vrijeme imao izvrsne alate za obavljanje aktivnosti sa strukturama podataka i datotekama, što mu je, inače, omogućilo dug život u poslovnim aplikacijama. Barem u Sjedinjenim Državama, sigurno.

Lisp

Sljedeći na redu je programski jezik Lisp. Programski jezik Lisp razvijen je gotovo u isto vrijeme kad i programski jezik Cobol. Ovaj jezik se temelji na programskom prikazu sistemskih linearnih popisa znakova, koji su glavna struktura podataka jezika. To je drugi najstariji programski jezik nakon Fortrana. Opsežno se koristi za obradu informacija u obliku simbola i koristi se za stvaranje softvera koji oponaša aktivnost ljudskog mozga.

Lisp program se sastoji od nizova izraza, odnosno oblika. Rezultat programa je izračun ovih izraza, napisanih u obliku popisa - jedne od glavnih struktura ove vrste jezika. Glavno značenje Lisp programa je "život" u simboličkom prostoru.

OSNOVNI, TEMELJNI

BASIC programski jezik razvili su programeri na Dartmouth Collegeu u Sjedinjenim Državama sredinom šezdesetih. Jezik se temeljio dijelom na Fortranu 2, a dijelom na Algolu - 60; dodani su i dodaci koji su ga učinili praktičnijim za rad u režimu dijeljenja vremena, a nakon nekoliko godina postao je pogodan i za obradu teksta i matričnu aritmetiku. Ova vrsta programskog jezika izvorno je implementirana na glavnom računalu GE-265, koje podržava veliki broj terminala. U vrijeme nastanka, suprotno uvriježenom mišljenju, bio je to kompilirani jezik.

Ova vrsta programskog jezika osmišljena je tako da studenti mogu pisati programe koristeći terminale za dijeljenje vremena. Nastao je ne samo kako bi se riješio problem koji je povezan s problematičnim, starijim jezicima, već je bio i zamišljen kako bi ga mogli koristiti "jednostavni" korisnici koje ne zanima brzina programa, ali ih zanima u mogućnosti korištenja PC-a za rješavanje svojih zadataka. Većina programera početnika, zbog jednostavnosti ove vrste jezika, njime započinje svoj programski put.

utvrda

Programski jezik Fort pojavio se kasnih šezdesetih i ranih sedamdesetih. Ova vrsta jezika korištena je u problemima upravljanja raznim vrstama sustava nakon što je njegov tvorac Moore Charles na njemu napisao softver koji je trebao kontrolirati radioteleskope Opservatorija u Arizoni.

Mnoga svojstva, kao što su fleksibilnost, interaktivnost i jednostavnost "izuma", učinili su Forth učinkovitim i privlačnim jezikom u primijenjenom istraživanju i stvaranju alata. Očigledna područja primjene ove vrste programskog jezika su ugrađeni kontrolni sustavi. Uz sve rečeno, primjenu je našao i u programiranju računala pod kontrolom raznih vrsta operacijskih sustava.

Pascal

Nastavljajući temu, ne može se ne primijetiti takav programski jezik kao što je Pascal. Pascal je nastao 1972. i dobio ime po Blaiseu Pascalu, koji je svojedobno bio veliki matematičar i izumitelj prve aritmetičke jedinice na svijetu. Švicarski znanstvenik i informatičar Nikolaus Wirth s pravom se smatra tvorcem jezika. Inovacija je korištena za poučavanje metodama programiranja. Pascal je programski jezik Opća namjena.

Od svih njegovih značajki, glavne se mogu nazvati - to su najstrože tipkanje i dostupnost programskih alata strukturiranog tipa. Pascal je bio jedan od prvih takvih jezika. Programski jezik Pascal podučava ispravnost pisanja programa i ispravan razvoj metoda rješavanja problema, a također pomaže u učenju odabira pravih opcija za prezentiranje i organiziranje podataka koji se koriste u zadatku. Pascal jezik uveden je od 1983 tečajevi obuke informatike u američkim srednjim školama.

Nastavljajući temu programskih jezika, odlučili smo razgovarati o drugoj vrsti jezika - ovo je jezik Ada. Programski jezik Ada inspiriran je Pascalom kasnih sedamdesetih i nazvan po Adi Lovelace, nadarenoj matematičarki. Upravo je ta talentirana žena 1843. godine svijetu objasnila mogućnosti analitičke jedinice Charlesa Babbagea. Ova vrsta jezika razvijena je po narudžbi koju je izradilo Ministarstvo obrane SAD-a, a izvorno je korišten za rješavanje problema kontrole svemirskih letova.

Programski jezik Ada je modularni, strukturirani i objektno orijentirani programski jezik koji sadrži programske alate visoke razine za paralelne procese. Sintaksa programski jezik ovog tipa je preuzet iz Pascala i Algola, proširen je i izveden u logičnom i strogom stilu. Ada je programski jezik koji ima jako tipkanje, a potpuno isključuje rad s objektima koji nemaju tipove, a također svodi automatske konverzije na apsolutni minimum.

Programski jezik C daleko je najpopularniji i najkorišteniji među programerima. Ova vrsta programskog jezika potječe iz 2 jezika, a to su BCPL i B. Martin Richards je 1967. godine stvorio BCPL kao jezik koji je bio namijenjen za pisanje sistemskog softvera i kompilatora. U nastavku ćemo vam reći što je to. Ken Thompson je 1970. godine koristio DEC PDP-7 na svom računalu za stvaranje ranijih verzija UNIX-a. I u prvom i u drugom jeziku varijable nisu bile razdvojene na tipove - svaka je vrijednost podataka imala jednu riječ u memoriji.

Programski jezik C prvi je put implementiran 1972. na DEC PDP-11 PC. No uspio je steći svoju popularnost i slavu kao UNIX operativni sustav. Svi glavni operativni sustavi danas su napisani na C ili C ++. Programski jezik C bio je dostupan na velikom broju računala nakon nekoliko desetljeća. I usput, vrijedi napomenuti, potpuno je neovisan o hardveru.

Jezik C postao je tradicionalni programski jezik kasnih sedamdesetih. Ova vrsta jezika opremljena je bogatim alatima koji omogućuju pisanje fleksibilnog softvera koji se koristi u svim vrstama modernih računala.

Prolog

Eto, dolazimo do kraja. Našu temu programskih jezika završit ćemo pričom o najnovijem jeziku na ovim prostorima - a zove se Prolog. Ovaj tip jezika smatra se programskim jezikom budućnosti, a nastao je početkom sedamdesetih. U razvoju su sudjelovali stručnjaci sa Sveučilišta u Marseilleu. Ime je dobio po riječima "PROGRAMIRANJE NA JEZIKU LOGIKE". Programski jezik je stvoren na temelju zakona matematičke logike. Ovaj tip jezika, za razliku od gore opisanih programskih jezika, nije algoritamski i pripada takozvanim deskriptivnim, odnosno deskriptivnim jezicima.

Razgovarajmo sada o tome što su prevodilac i interpreter?

Prevodilac i tumač

Nije dovoljno razviti jezik koji je prikladan za pisanje programa. Svaki jezik mora imati prevoditelja, a to je poseban program – prevoditelja.

Dakle, prevoditelj je program koji je dizajniran za prevođenje softvera koji je napisan u jednom programskom jeziku u softver u drugi programski jezik. Ovaj proces prevođenja naziva se prijevod. Primjer prevoditelja je kompajler, koji je također program. Namijenjen je prevođenju softvera, koji je napisan na bilo kojem jeziku, u softver u strojnim kodovima. Taj se proces naziva kompilacija.

Postoji još jedan način koji može kombinirati procese prevođenja i izvršavanja programa, a zove se interpretacija. Bit procesa je sljedeća: prvo se prevodi u kodove strojnog tipa, a zatim se izvršava prvi redak softvera. Kada je prvi redak gotov, počinje prijevod drugog retka i tako dalje.

Dakle, iz ovoga možemo zaključiti da je interpretacija program koji je namijenjen za prijevode redak po red i izvorni program.

Eto, čini se da je to sve za danas, sad znate što su programski jezici i što su.

Poznato je da je informacijska tehnologija jedno od najbrže rastućih područja suvremenog života. Nove tehnologije, projekti, nazivi i kratice pojavljuju se gotovo svaki dan. A u potrazi za napretkom, u nastojanju da ga pratimo, ponekad je korisno zastati na minutu, stati na prste i pogledati oko sebe. Pogledati preko horizonta, prisjetiti se povijesti i razmišljati o budućnosti... Kako bi se svježom energijom zaronili u posao, svladali nove tehnologije, povećali vlastitu učinkovitost i dobrobit. Sve dok se opet ne poželiš ustati na prste...

Na pisanje ovog članka potaknula me rasprava koja se rasplamsala na jednom od foruma dotSITE nakon što se tamo pojavio post, oštro kritizirajući C # - jednu od glavnih komponenti nove .NET platforme iz Microsofta. Poruka je sadržavala već uvriježenu kritiku na račun Microsofta općenito i posebno (ovdje ne tvrdim da se Microsoftu nema za što kritizirati, samo je ta kritika već nagrizla zube), kao i neke izjave konkretno o C #. Tijekom rasprave koja je uslijedila izneseno je nekoliko zanimljivih primjedbi, ali su neka pitanja ostala nepromijenjena. Sve me to potaknulo da napišem članak u kojem se pokušava na neki način "pomiriti" nositelje mišljenja o isključivosti ovog ili onog programskog jezika. Pokušat ću dati neke povijesne skice razvoja raznih jezika i primjerima objasniti neke opće tendencije. Možda mogu nekoga uvjeriti u beskorisnost vođenja rasprava poput gore navedenih. Ne pretvaram se da sam objektivan (iako ću se truditi biti takav) niti da sam potpun. Ovo je samo pokušaj "stajati na prstima i gledati oko sebe"...

1. Prvi univerzalni jezici

Dakle, počnimo. Okrenimo se podrijetlu razvoja računalne tehnologije. Sjetimo se prvih računala i programa za njih. Ovo je bila era programiranja izravno u strojnim kodovima, a glavni mediji za pohranu su bile bušene kartice i bušena traka. Programeri su morali temeljito poznavati arhitekturu stroja. Programi su bili prilično jednostavni, što je bilo uzrokovano, prvo, vrlo ograničenim mogućnostima ovih strojeva, i, drugo, velikom složenošću razvoja i, što je najvažnije, otklanjanja pogrešaka programa izravno u strojnom jeziku. Istovremeno, ova metoda razvoja dala je programeru nevjerojatnu moć nad sustavom. Postajalo je moguća upotreba tako genijalni algoritmi i načini organiziranja programa o kojima moderni programeri nisu ni sanjali. Na primjer, takva mogućnost kao što je samo-modificirajući kod mogla bi se koristiti (i korištena je!). Poznavanje binarnog prikaza naredbi ponekad je omogućilo da se neki podaci ne pohranjuju zasebno, već da se ugrade u kod kao naredbe. I ovo nije potpuni popis tehnika, posjedovanje barem jedne od kojih vas sada odmah napreduje do razine "gurua" ekstra klase.

2. Sastavljač

Čini se da je prvi značajan korak prijelaz na asemblerski jezik (dopustimo si malu lirsku digresiju: englesko ime asemblerski jezik, ili asembler, preveden je na ruski točno terminom koji je korišten gore. Istodobno, početnik stječe dojam da je jezik nazvan po određenoj osobi po imenu asembler. Prilično smiješna situacija, zar ne?). Naizgled ne baš zamjetan korak - prijelaz na simboličko kodiranje strojnih instrukcija - zapravo je bio od velike važnosti. Programer više nije morao ulaziti u pametne načine kodiranja instrukcija na razini hardvera. Štoviše, često su suštinski identične instrukcije kodirane na potpuno različite načine ovisno o svojim parametrima (poznati primjer iz svijeta modernih računala je kodiranje instrukcije mov u Intelovim procesorima: postoji nekoliko potpuno različito kodiranih varijanti instrukcija; izbor jedne ili druge opcije ovisi o operandama, iako je bit izvršene operacije nepromijenjena: stavite sadržaj (ili vrijednost) drugog operanda u prvi). Pojavila se i mogućnost korištenja makronaredbi i oznaka, što je također pojednostavilo izradu, modificiranje i otklanjanje pogrešaka u programima. Postojao je čak i neki privid prenosivosti - bilo je moguće razviti cijelu obitelj strojeva sa sličnim skupom instrukcija i nekim zajedničkim asemblerom za njih, dok nije bilo potrebe za osiguravanjem binarne kompatibilnosti.

Istodobno, prijelaz na novi jezik bio je pun negativnih (barem na prvi pogled) strana. Postalo je gotovo nemoguće koristiti sve vrste pametnih trikova sličnih gore spomenutim. Osim toga, ovdje su se prvi put u povijesti razvoja programiranja pojavila dva prikaza programa: u izvornom kodu i u prevedenom obliku. Isprva, dok su asembleri samo prevodili mnemoniku u strojne kodove, jedan se lako mogao prevesti u drugi i natrag, ali onda, kako su se pojavljivale mogućnosti poput oznaka i makronaredbi, rastavljanje je postajalo sve teže. Do kraja ere asemblera, mogućnost automatskog prevođenja u oba smjera potpuno je izgubljena. U tom smislu razvijen je veliki broj posebnih programa za rastavljanje koji izvode inverzne transformacije, ali u većini slučajeva teško mogu odvojiti kod i podatke. Osim toga, sve logičke informacije (nazivi varijabli, oznake itd.) su nepovratno izgubljene. U slučaju problema dekompilacije jezika visoke razine, primjeri zadovoljavajućeg rješenja problema su rijetki.

3. Fortran

Godine 1954., u utrobi IBM-ove korporacije, grupa programera na čelu s Johnom Backusom stvorila je programski jezik Fortran.

Značaj ovog događaja teško se može precijeniti. To je prvi programski jezik visoke razine. Po prvi put, programer je mogao uistinu apstrahirati od specifičnosti arhitekture stroja. Ključna ideja koja razlikuje novi jezik od asemblera, postojao je koncept potprograma. Podsjetimo da je ovo moderna računala podržavaju podprograme na razini hardvera, dajući odgovarajuće upute i strukture podataka (stog) izravno na razini asemblera, 1954. godine to je bilo potpuno pogrešno. Stoga sastavljanje Fortrana nipošto nije bio trivijalan proces. Osim toga, sintaktička struktura jezika bila je prilično složena za strojnu obradu, prvenstveno zbog činjenice da se prostori kao sintaktičke jedinice uopće nisu koristili. To je stvorilo mnogo prilika za skrivene pogreške, kao što su:

U Fortranu sljedeća konstrukcija opisuje "for petlju do oznake 10 kada se indeks promijeni od 1 do 100": DO 10 I = 1.100 Ako ovdje zamijenite zarez točkom, dobit ćete operator dodjeljivanja: DO10I = 1.100 It kaže se da je takva pogreška dovela do eksplozije rakete tijekom startnog vremena!

Jezik Fortran bio je (i danas se koristi) za znanstveno računanje. On pati od nedostatka mnogih poznatih jezičnih konstrukcija i atributa; prevodilac praktički ne provjerava sintaktički ispravan program na bilo koji način sa stajališta semantičke ispravnosti (podudarnost tipa itd.). Nedostaje podrška za moderne načine strukturiranja koda i podataka. Toga su bili svjesni i sami programeri. Prema samom Backusu, bili su suočeni sa zadatkom da razviju prevodilac, a ne jezik. Razumijevanje neovisnog značenja programskih jezika došlo je kasnije.

Pojava Fortrana naišla je na još žešće kritike od uvođenja asemblera. Programeri su bili uplašeni smanjenjem učinkovitosti programa zbog korištenja posredne veze u obliku kompajlera. I ovi strahovi su bili utemeljeni: doista, dobar programer će, najvjerojatnije, kada rješava neki mali zadatak, ručno napisati kod koji radi brže od koda dobivenog kao rezultat kompilacije. Nakon nekog vremena došlo se do razumijevanja da je provedba velikih projekata nemoguća bez korištenja jezika visoke razine. Snaga računala je rasla i postalo je moguće pomiriti se s padom učinkovitosti, koji se prije smatrao prijetećim. Prednosti jezika visoke razine postale su toliko očite da su potaknule programere da stvaraju nove jezike, sve savršenije.

4. Cobol

1960. godine stvoren je programski jezik Cobol. Zamišljen je kao jezik za izgradnju komercijalnih aplikacija, a to je i postao. Tisuće komercijalnih aplikacija napisane su na Cobolu. Posebnost jezika je sposobnost učinkovitog rada s velikim količinama podataka, što je tipično za komercijalne aplikacije. Popularnost Kobola je tolika da se i sada, sa svim svojim nedostacima (kobol u pogledu strukture i dizajna po mnogočemu podsjeća na Fortran), pojavljuju njegovi novi dijalekti i implementacije. Tako se nedavno pojavila implementacija Cobola, kompatibilna s Microsoft .NET-om, što je vjerojatno zahtijevalo uvođenje nekih značajki objektno orijentiranog jezika u jezik.

Godine 1964. ista IBM korporacija stvorila je jezik PL/1, koji je trebao zamijeniti Cobol i Fortran u većini aplikacija. Jezik je posjedovao iznimno bogatstvo sintaktičkih konstrukcija. Po prvi put je uveo rukovanje iznimkama i podršku za istodobnost. Valja napomenuti da je sintaktička struktura jezika bila izrazito složena. Razmaci su već korišteni kao separatori sintakse, ali ključne riječi nisu rezervirani. Konkretno, sljedeći redak je savršeno normalan PL / 1 operator: IF ELSE = THEN THEN THEN; DRUGO DRUGO

Zbog ovih značajki razvoj kompajlera za PL / 1 bio je iznimno težak. Jezik nikada nije postao popularan izvan svijeta IBM-a.

6. OSNOVNI

Godine 1963. na Dartmouth Collegeu stvoren je programski jezik BASIC (Beginners' All-Purpose Symbolic Instruction Code). Jezik je zamišljen prvenstveno kao alat za učenje i kao prvi programski jezik za učenje. Pretpostavljalo se da je lako interpretirati i sastaviti. Moram reći da je BASIC doista postao jezik na kojem ljudi uče programirati (barem je to bilo prije nekoliko godina; sada tu ulogu igra Pascal). Stvoreno je nekoliko moćnih BASIC implementacija koje podržavaju najmodernije koncepte programiranja (najistaknutiji primjer je Microsoft Visual Basic).

7. Algol

Godine 1960. programski jezik Algol stvorio je tim pod vodstvom Petera Naura. Ovaj jezik je potaknuo cijelu obitelj jezika sličnih Algolu (najvažniji predstavnik je Pascal). Pojavio se 1968 nova verzija Jezik. Nije našla tako široku praktičnu primjenu kao prva verzija, ali je bila vrlo popularna u krugovima teoretičara. Jezik je bio prilično zanimljiv, jer je u to vrijeme imao mnoge jedinstvene karakteristike.

8. Daljnji razvoj programski jezici

Ovdje bih radije stao i dao neke komentare. Stvaranje svakog od gore navedenih jezika (s mogućim izuzetkom Algola) bilo je diktirano nekim praktičnim zahtjevima. Ovi jezici poslužili su kao temelj za kasniji razvoj. Svi oni predstavljaju istu programsku paradigmu. Sljedeći jezici su otišli znatno dalje u svom razvoju, prema dubljoj apstrakciji.

Dat ću informacije o kasnijim jezicima u obliku opisa jezičnih obitelji. To će vam omogućiti bolje praćenje odnosa između pojedinih jezika.

9. Jezici slični Pascalu

Godine 1970. Niklaus Wirth je stvorio programski jezik Pascal. Jezik je izvanredan po tome što je prvi rašireni jezik za strukturirano programiranje (prvi je, strogo govoreći, bio Algol, ali nije bio toliko raširen). Po prvi put, bezuvjetni jump operator prestao je igrati temeljnu ulogu u kontroli redoslijeda izvršavanja naredbi. Ovaj jezik također uvodi snažnu provjeru tipa, što vam omogućuje da identificirate mnoge pogreške u vrijeme kompajliranja.

Negativna značajka jezika bio je nedostatak sredstava za podjelu programa na module. Wirth je bio svjestan toga i razvio je jezik Modula-2 (1978.), u kojem je ideja modula postala jedan od ključnih koncepata jezika. 1988. uvedena je Modula-3 s dodatkom objektno orijentiranih značajki. Oberon i Oberon-2 logičan su nastavak Pascala i Module. Karakterizira ih kretanje prema objektnoj i komponentnoj orijentaciji.

10. C-slični jezici

Kernighan i Ritchie su 1972. godine stvorili programski jezik C. Nastao je kao jezik za razvoj UNIX operativnog sustava. C se često naziva "prijenosnim asemblerom", što znači da vam omogućuje da manipulirate podacima gotovo jednako učinkovito kao što možete u asemblerskom jeziku, dok pruža strukturirane kontrolne konstrukcije i apstrakcije visoke razine (strukture i nizovi). Upravo je s tim povezana njegova ogromna popularnost do danas. A to je upravo njegova Ahilova peta. C prevodilac je vrlo slab u kontroli tipa, tako da je vrlo lako napisati izvana savršeno ispravan, ali logički pogrešan program.

Godine 1986. Bjarne Stroustrup stvorio je prvu verziju jezika C ++, dodajući objektno orijentirane značajke preuzete iz Simule (vidi dolje) u jezik C, te popravljajući neke greške i loše odluke jezika. C ++ se nastavlja poboljšavati u današnje vrijeme, tako da je 1998. objavljena nova (treća) verzija standarda, koja je sadržavala neke prilično značajne promjene. Jezik je postao temelj za razvoj modernih velikih i složenih projekata. Ima, međutim, i slabe strane koji proizlaze iz zahtjeva učinkovitosti.

Godine 1995. u Sun Microsystemsu stvaraju Ken Arnold i James Gosling Java jezik... Naslijedio je sintaksu C i C ++ i riješio se nekih dosadnih značajki potonjeg. Posebnost jezika je kompilacija u kodu nekog apstraktnog stroja, za koji se zatim piše emulator (Java Virtual Machine) za stvarne sustave. Osim toga, Java nema pokazivače i višestruko nasljeđivanje, što uvelike poboljšava pouzdanost programiranja.

1999.-2000. Microsoft je stvorio jezik C #. Prilično je slična Javi (i zamišljena je kao alternativa potonjoj), ali također ima karakteristične značajke. Uglavnom je usmjerena na razvoj višekomponentnih internetskih aplikacija.

11. Jezici Ada i Ada 95

Godine 1983. nastao je jezik Ada pod pokroviteljstvom američkog Ministarstva obrane. Jezik je izvanredan po tome što se mnogo pogrešaka može otkriti u fazi kompilacije. Osim toga, podržava mnoge aspekte programiranja koji su često prepušteni na milost i nemilost operacijskom sustavu (istodobnost, rukovanje iznimkama). Godine 1995. usvojen je jezični standard Ada 95 koji se razvija prethodna verzija, dodajući mu objektnu orijentaciju i ispravljajući neke netočnosti. Oba ova jezika nisu široko korištena izvan vojnih i drugih velikih projekata (avijacija, željeznički promet). Glavni razlog je teškoća učenja jezika i prilično glomazna sintaksa (mnogo glomaznija od Pascala).

12. Jezici obrade podataka

Svi gore navedeni jezici su jezici opće namjene u smislu da nisu ciljani ili optimizirani za upotrebu bilo kakvih specifičnih struktura podataka ili za korištenje u bilo kojim specifičnim područjima. Razvijen je veliki broj jezika koji ciljaju na prilično specifične aplikacije. Ispod je kratki pregled takvim jezicima.

Godine 1957. pokušano je stvoriti jezik za opisivanje matematičke obrade podataka. Jezik je nazvan APL (Application Programming Language). Njegova prepoznatljiva značajka bila je upotreba matematički simboli(što je otežavalo korištenje na tekstualnim terminalima; pojava grafičkih sučelja uklonila je ovaj problem) i vrlo moćnu sintaksu koja je omogućila izvođenje mnogih netrivijalnih operacija izravno na složenim objektima, bez pribjegavanja njihovom razbijanju na komponente. Široka upotreba spriječena je, kao što je već navedeno, korištenjem nestandardnih simbola kao elemenata sintakse.

14. Snobol i ikona

Godine 1962. pojavio se jezik Snobol (a 1974. njegov nasljednik Icon), namijenjen za obradu žica. Sintaksa ikone podsjeća na C i Pascal u isto vrijeme. Razlika leži u prisutnosti moćnih ugrađenih funkcija za rad sa nizovima i posebne semantike povezane s tim funkcijama. Moderni pandan Icon i Snobolu je Perl, jezik za obradu stringova i teksta koji je dodao neke objektno orijentirane značajke. Smatra se vrlo praktičnim jezikom, ali mu nedostaje elegancija.

15. SETL

1969. godine nastao je SETL jezik – jezik za opisivanje operacija nad skupovima. Glavna struktura podataka u jeziku je skup, a operacije su slične matematičkim operacijama nad skupovima. Korisno pri pisanju programa koji se bave složenim apstraktnim objektima.

16. Lisp i slični jezici

Godine 1958. pojavio se jezik Lisp – jezik za obradu lista. Prilično je raširena u sustavima umjetne inteligencije. Ima nekoliko potomaka: Planner (1967), Scheme (1975), Common Lisp (1984). Mnoge njegove osobine su naslijeđene. moderni jezici funkcionalno programiranje.

17. Skriptni jezici

U posljednje vrijeme, zbog razvoja internetskih tehnologija, raširene upotrebe računala visokih performansi i niza drugih čimbenika, takozvani skriptni jezici postali su rašireni. Ovi jezici su izvorno trebali biti korišteni kao interni kontrolni jezici u svim vrstama složenih sustava. Mnogi od njih, međutim, izašli su iz okvira svoje izvorne primjene i sada se koriste u potpuno drugim područjima. Karakteristične značajke ovih jezika su, prvo, njihova interpretabilnost (kompilacija je ili nemoguća ili nepoželjna), drugo, jednostavnost sintakse, i treće, laka proširivost. Stoga su idealni za čestu upotrebu. programi koji se mogu mijenjati, vrlo mali programi ili u slučajevima kada je za izvršavanje jezičnih naredbi potrebno vrijeme koje je neusporedivo s vremenom njihova raščlanjivanja. Stvoren je prilično velik broj takvih jezika, navodimo samo glavne i najčešće korištene.

18. JavaScript

Jezik je kreirao Netscape Communications kao jezik za opisivanje složenog ponašanja web stranica. Izvorno nazvan LiveScript, naziv je promijenjen iz marketinških razloga. Interpretira ga preglednik kada se web stranica prikaže. Sintaksa je slična Javi i (na daljinu) C / C ++. Ima mogućnost korištenja funkcionalnosti objekata ugrađenih u preglednik, ali nije stvarno objektno orijentirani jezik.

19. VBScript

Jezik je stvorio Microsoft na mnogo načina kao alternativu JavaScriptu. Ima slično područje primjene. Sintaktički sličan Visual Basicu (i smanjena je verzija potonjeg). Baš kao i JacaScript, izvršava ga preglednik prilikom renderiranja web stranica i ima isti stupanj objektne orijentacije.

20. Perl

Jezik je stvoren kako bi pomogao administratoru sustava Unix operativnog sustava da obrađuje različite vrste tekstova i ističe potrebne informacije. Razvijen da bude moćan alat za obradu teksta. To je interpretirani jezik i implementiran je na gotovo svim postojećim platformama. Koristi se za obradu teksta, kao i za dinamičko generiranje web stranica na web poslužiteljima.

21. Python

Interpretirani objektno orijentirani programski jezik. Po strukturi i opsegu je sličan Perlu, ali manje raširen i rigorozniji i logičniji. Postoje implementacije za većinu postojećih platformi.

22. Objektno orijentirani jezici

Objektno orijentirani pristup, koji je zamijenio strukturirani, nije se prvi put pojavio u C ++, kako neki vjeruju. Postoji čitav niz čistih objektno orijentiranih jezika bez kojih bi naše istraživanje bilo nepotpuno.

23. Simula

Prvi objektno orijentirani jezik bio je Simula (1967). Taj je jezik bio namijenjen modeliranju raznih objekata i procesa, a u njemu su se pojavile objektno orijentirane značajke upravo za opisivanje svojstava objekata modela.

24. Smalltalk

Popularnost objektno orijentiranog programiranja donio je jezik Smalltalk, nastao 1972. godine. Jezik je bio namijenjen dizajnu složenih grafičkih sučelja i bio je prvi istinski objektno orijentirani jezik. U njemu su klase i objekti jedine programske konstrukcije. Veliki nedostaci Smalltalka su veliki zahtjevi za memorijom i loša izvedba rezultirajućih programa. To je zbog loše implementacije objektno orijentiranih značajki. Popularnost jezika C ++ i Ada 95 posljedica je upravo činjenice da se objektna orijentacija implementira bez značajne degradacije performansi.

25. Eiffel

Postoji jezik s vrlo dobrom implementacijom objektne orijentacije koji nije izgrađen na vrhu bilo kojeg drugog jezika. Ovo je jezik Eiffela (1986). Kao čisti objektno orijentirani programski jezik, on također poboljšava pouzdanost programa korištenjem "kontrolnih tvrdnji".

26. Paralelni programski jezici

Većina računalnih arhitektura i programskih jezika usmjerena je na sekvencijalno izvršavanje programskih izraza. U današnje vrijeme, međutim, postoje softverski i hardverski sustavi koji omogućuju organiziranje paralelnog izvođenja različitih dijelova istog računskog procesa. Programiranje takvih sustava zahtijeva posebnu podršku programskih alata, posebice programskih jezika. Neki jezici opće namjene sadrže elemente podrške za paralelizam, ali programiranje istinski paralelnih sustava ponekad zahtijeva posebne tehnike.

27. Occam jezik

Jezik Occam nastao je 1982. godine i namijenjen je za programiranje transputera – višeprocesorskih sustava za distribuiranu obradu podataka. Opisuje interakciju paralelnih procesa u obliku kanala – načina prijenosa informacija s jednog procesa na drugi. Obratite pažnju na posebnost sintakse jezika Šccam - u njemu su sekvencijalni i paralelni redoslijed izvršavanja operatora jednaki, a moraju biti eksplicitno naznačeni ključnim riječima PAR i SEQ.

28. Linda model paralelnog računanja

Godine 1985. predložen je model paralelnog računanja Linda. Njegov glavni zadatak je organizirati interakciju između paralelno pokrenutih procesa. To se postiže korištenjem globalnog prostora tuple. Proces može tamo staviti tuple s podacima (tj. zbirku nekoliko, moguće heterogenih podataka), a drugi proces može čekati da se tuple pojavi u području torke i nakon njegovog pojavljivanja pročitati tuple s mogućim naknadnim brisanje. Imajte na umu da proces može, na primjer, smjestiti tuple u opseg i izaći, a drugi proces može koristiti ovu torku nakon nekog vremena. To omogućuje asinkronu komunikaciju. Očito se uz pomoć takvog modela može oponašati i sinkrona interakcija. Linda je model paralelnog računanja i može se dodati bilo kojem programskom jeziku. Postoje prilično učinkovite implementacije Linde koje zaobilaze problem globalne regije tuple s potencijalno neograničenom memorijom.

29. Neimperativni jezici

Svi jezici o kojima smo ranije govorili imaju jednu zajedničku stvar: oni su imperativ. To znači da programi na njima, u konačnici, predstavljaju korak po korak opis rješenja određenog problema. Možete pokušati opisati samo formulaciju problema, a problem povjeriti prevodiocu. Postoje dva glavna pristupa razvoju ove ideje: funkcionalno i logičko programiranje.

30. Funkcionalni jezici

Glavna ideja koja stoji iza funkcionalnog programiranja je predstavljanje programa u obliku matematičkih funkcija (odnosno funkcija čija je vrijednost određena samo njihovim argumentima, a ne kontekstom izvršavanja). Operator dodjele se ne koristi u takvim jezicima (ili se barem ne preporučuje njegova upotreba). Obvezne mogućnosti su u pravilu dostupne, ali njihovo korištenje je okruženo ozbiljnim ograničenjima. Postoje jezici s lijenom i energičnom semantikom. Razlika je, grubo rečeno, u tome što se u jezicima s energetskom semantikom računanja izvode na istom mjestu gdje su i opisana, a u slučaju lijene semantike, računanje se izvodi samo kada je to stvarno potrebno. Prvi jezici imaju učinkovitiju implementaciju, dok drugi imaju bolju semantiku.

Među jezicima s energetskom semantikom spominjemo ML i dva njegova moderna dijalekta - Standard ML (SML) i CaML. Potonji ima objektno orijentiran potomak - Objective CaML (O'CaML).

Među jezicima s lijenom semantikom, dva su najčešća: Haskell i njegov jednostavniji dijalekt Clean.

Za više informacija o funkcionalnim jezicima pogledajte OVDJE:

31. Logički programski jezici

Programi u logičkim programskim jezicima izraženi su kao formule matematičke logike, a prevodilac nastoji iz njih izvesti posljedice.

Predak većine logičkih programskih jezika je jezik Prolog (1971). Ima niz potomaka - Parlog (1983., fokusiran na paralelno računanje), Delta Prolog, itd. Logičko programiranje, kao i funkcionalno programiranje, zasebno je područje programiranja, a za više detaljimačitatelja upućujemo na specijaliziranu literaturu.

32. Umjesto zaključka

Dopustit ću si istaknuti neki opći trend u razvoju programskih jezika. Pronicljivi čitatelj vjerojatno je već odavno pogodio što ću reći. Jezici se razvijaju prema sve većoj apstrakciji. A to je popraćeno padom učinkovitosti. Pitanje je: isplati li se apstrakcija? Odgovor: isplati se. Isplati se, jer povećanje razine apstrakcije podrazumijeva povećanje razine pouzdanosti programiranja. Niska učinkovitost može se suzbiti stvaranjem više brza računala... Ako su zahtjevi za memorijom previsoki, možete povećati količinu. To, naravno, zahtijeva vrijeme i novac, ali se može riješiti. Ali postoji samo jedan način rješavanja grešaka u programima: potrebno ih je ispraviti. Još bolje, nemojte se obvezati. Još bolje, otežajte ih što je više moguće. A upravo tome su usmjerena sva istraživanja u području programskih jezika. I morate se pomiriti s gubitkom učinkovitosti.

Svrha ove recenzije bila je pokušaj da čitatelju damo uvid u svu raznolikost postojećim jezicima programiranje. Među programerima često postoji mišljenje o "općoj primjenjivosti" određenog jezika (C, C ++, Pascal itd.). Ovo mišljenje proizlazi iz nekoliko razloga: nedostatak informacija, navika, inertnost razmišljanja. Pokušao sam malo kompenzirati prvi faktor. Što se ostalog tiče, mogu samo reći da pravi profesionalac treba stalno težiti usavršavanju svoje stručne kvalifikacije. A za to se ne morate bojati eksperimentirati. Pa što ako svi oko njih pišu u C / C ++ / VB / Pascal / Perl / Java / ... (podcrtajte potrebno)? Zašto ne probati nešto novo? Što ako se pokaže učinkovitijim? Naravno, prije nego što se odlučite za korištenje novog jezika, morate pažljivo proučiti sve njegove značajke, uključujući prisutnost učinkovite implementacije, mogućnost interakcije s postojećim modulima itd., i tek tada donijeti odluku. Naravno, uvijek postoji rizik da se krene pogrešnim putem, ali ... Samo onaj tko ne radi ništa ne griješi.

I dalje. Čuo sam i ponekad sudjelovao u raspravama poput “jezik A je bolji od jezika B”. Nadam se da će se nakon čitanja ove recenzije mnogi uvjeriti u besmislenost takvih sporova. Maksimum o kojem se može raspravljati jesu prednosti jednog jezika u odnosu na drugi pri rješavanju određenog problema u određenim uvjetima. Ovdje se, doista, ponekad ima oko čega svađati. A odluka je ponekad daleko od očite. Međutim, raspravljati "općenito" očita je besmislica.

Ovaj članak je zamišljen kao odgovor onima koji viču "jezik X MORA UMRTI". Nadam se da je odgovor bio sasvim adekvatan i uvjerljiv. Također se nadam da članak ima, osim polemičke, i spoznajnu vrijednost.

Materijal s Wikipedije

Programski jezik- formalni znakovni sustav namijenjen za snimanje računalni programi... Programski jezik definira skup leksičke , sintaktičkim i semantičke pravila koja određuju izgled programa i radnje koje će izvršitelj (obično računalo) izvoditi pod svojom kontrolom.

U isto vrijeme, 1940-ih godina pojavila su se električna digitalna računala i razvijen je jezik koji se može smatrati prvim računalnim programskim jezikom visoke razine - “ Plankalkül„Izradio njemački inženjer K. Zuse od do 1945 godina.

Od sredine 1950-ih, jezici treće generacije, kao npr Fortran , Lisp i Cobol... Programski jezici ove vrste su apstraktniji (nazivaju se i "jezici visoke razine") i univerzalni, nemaju krutu ovisnost o određenom hardverska platforma i strojne upute koje se koriste na njemu. Program na jeziku visoke razine može se izvršiti (barem u teoriji, u praksi obično postoji niz specifičnih verzija ili dijalekata implementacije jezika) na bilo kojem računalu na kojem postoji prevoditelj za taj jezik (a alat koji prevodi program na jezik stroja, nakon čega to može učiniti procesor).

Ažurirane verzije navedenih jezika i danas su u upotrebi. softver, a svaki od njih imao je određen utjecaj na kasniji razvoj programskih jezika. Zatim se, krajem 1950-ih, pojavio ALGOL, što je također poslužilo kao osnova za niz daljnjih razvoja na ovom području. Treba napomenuti da su na format i korištenje ranih programskih jezika uvelike utjecali sučelje ograničenja .

Savršenstvo

Važno područje rada postaje vizualni (grafički) programski jezici, u kojem se proces "pisanja" programa kao teksta zamjenjuje postupkom "crtanja" (konstruiranja programa u obliku dijagrama) na ekranu računala. Vizualni jezici pružaju jasnoću i bolju ljudsku percepciju logike programa.

Standardizacija programskih jezika

Za mnoge raširene programske jezike, međunarodnim standardima... Određene organizacije redovito ažuriraju i objavljuju specifikacije i formalne definicije relevantnog jezika. U okviru takvih odbora nastavlja se razvoj i modernizacija programskih jezika te se rješavaju pitanja proširenja ili podržavanja postojećih i novih jezičnih konstrukcija.

Vrste podataka

Moderna digitalna računala su binarni a podaci se pohranjuju u binarnom (binarnom) kodu (iako su moguće implementacije i u drugim brojevnim sustavima). Ovi podaci obično odražavaju informacije iz stvarnog svijeta (imena, bankovni računi, mjerenja, itd.) koji predstavljaju koncepte visoke razine.

Poseban sustav kojim se podaci organiziraju u programu je tipski sustav programski jezik; razvoj i proučavanje tipskih sustava poznat je kao teorija tipova... Jezici se mogu podijeliti na posjedovanje statičko tipkanje i dinamičko tipkanje , i jezici bez tipa (na primjer, Dalje ).

Statički tipizirani jezici mogu se dalje podijeliti na jezike s obavezna deklaracija gdje svaka deklaracija varijable i funkcije ima obveznu deklaraciju tipa, a jezici s zaključeni tipovi... Ponekad se nazivaju dinamički upisani jezici latentno otkucana.

Strukture podataka

Sustavi tipova u jezicima visoke razine omogućuju definiranje složenih, složenih tipova, tzv strukture podataka... Tipično se strukturirani tipovi podataka formiraju kao kartezijanski proizvod osnovni (atomski) tipovi i prethodno definirani kompozitni tipovi.

Osnovne strukture podataka (popisi, redovi, hash tablice, binarna stabla i parovi) često su predstavljene posebnom sintaksom u jezicima visoke razine. Takvi su podaci strukturirani automatski.

Semantika programskih jezika

Postoji nekoliko pristupa definiranju semantike programskih jezika.

Najraširenije varijante od sljedeća tri su: operacionalna, derivacijska (aksiomatska) i denotacijska (matematička).

  • Prilikom opisivanja semantike unutar operativni pristupa, izvođenje konstrukcija programskog jezika obično se tumači uz pomoć nekog imaginarnog (apstraktnog) računala.
  • Aksiomatska semantika opisuje posljedice izvođenja jezičnih konstrukcija korištenjem jezika logike i specificiranja pred- i postuvjeta.
  • Stomatološki semantika operira pojmovima tipičnim za matematiku - skupovi, korespondencije, kao i sudovi, iskazi itd.

Paradigma programiranja

Programski jezik je izgrađen u skladu s jednom ili drugom osnovnom računski model i paradigma programiranje.

Unatoč činjenici da je većina jezika usmjerena na imperativni računski model koje daje von Neumannova arhitektura računala, postoje i drugi pristupi. Možemo spomenuti jezike sa složenim računskim modelom ( utvrda , Faktor , PostScript itd.), kao i funkcionalna (Lisp , Haskell , , , REFAL na temelju računskog modela koji je uveo sovjetski matematičar A.A. Markov mlađi) i logičko programiranje (Prolog).

Trenutno se također aktivno razvijaju deklarativno i vizualni programski jezici kao i razvojne metode i alate jezici specifični za problem(cm. Programiranje orijentirano na jezik).

Načini implementacije jezika

Programski jezici mogu se implementirati kao sastavio , tumačio i ugrađen.

Program na prevedenom jeziku koji koristi prevodilac(poseban program) se pretvara u ( sastavlja) u strojni kod (skup uputa) za zadanu vrstu procesora i zatim sklopiti u izvršni modul, koji se može pokrenuti kao zaseban program. Drugim riječima, prevodilac prevodi izvorni kod programa iz programskog jezika visoke razine u binarne kodove procesorskih instrukcija.

Ako je program napisan na interpretiranom jeziku, onda tumač izravno izvršava ( tumači) izvorni tekst bez prethodnog prijevoda. U tom slučaju program ostaje na izvornom jeziku i ne može se pokrenuti bez tumača. Računalni procesor, u tom smislu, može se nazvati tumačem za strojni kod.

Podjela na sastavljene i interpretirane jezike je uvjetna. Dakle, za bilo koji tradicionalno kompilirani jezik kao što je Pascal, možete napisati tumača. Osim toga, većina modernih "čistih" tumača ne izvode izravno jezične konstrukcije, već ih kompiliraju u neki srednji prikaz visoke razine (na primjer, s promjenjivim dereferenciranjem i makro proširenjem).

Možete stvoriti kompajler za bilo koji interpretirani jezik — na primjer, izvorno interpretirani jezik Lisp može se prevesti bez ikakvih ograničenja. Kod kreiran u vrijeme izvođenja također se može dinamički kompajlirati tijekom izvođenja.

U pravilu, kompajlirani programi rade brže i ne zahtijevaju dodatni programi, budući da su već prevedeni na strojni jezik. Istodobno, svaki put kada se promijeni tekst programa, potrebno ga je ponovno kompajlirati, što usporava razvojni proces. Osim toga, prevedeni program može se izvoditi samo na istoj vrsti računala i, u pravilu, pod istim operativnim sustavom za koji je kompajler dizajniran. Stvoriti izvršna datoteka za drugu vrstu stroja potrebna je nova kompilacija.

Interpretirani jezici imaju neke specifičnosti dodatne mogućnosti(vidi gore), osim toga, programi na njima mogu se pokrenuti odmah nakon promjene, što olakšava razvoj. Često se može pokrenuti program interpretiranog jezika različiti tipovi strojevi i operativni sustavi bez dodatnog napora.

Međutim, interpretirani programi se primjetno sporije izvode od kompajliranih programa; štoviše, ne mogu se izvršiti bez programa tumača.

Ovaj pristup vam u određenom smislu omogućuje korištenje prednosti i interpretatora i prevoditelja. Treba napomenuti da postoje jezici koji imaju i prevoditelja i prevoditelja ( utvrda).

Programski jezici niske razine

Prva računala morala su biti programirana binarnim strojnim kodovima. Međutim, programiranje na ovaj način je prilično dugotrajan i glomazan zadatak. Kako bi se pojednostavio ovaj zadatak, počeli su se pojavljivati ​​niskorazinski programski jezici koji su omogućili postavljanje strojnih instrukcija u čovjeku čitljivom obliku. Da ih pretvorimo u binarni kod stvoreni su posebne programe - prevoditelji.

Primjer jezika niske razine je asembler... Jezici niske razine su specifični za tip procesor i uzeti u obzir njegove osobitosti, stoga, za prijenos programa u asembleru na drugu hardversku platformu, on mora biti gotovo potpuno prepisan. Također postoje određene razlike u sintaksi programa za različite prevodioce. Istina, središnje procesne jedinice za računala poduzeća AMD i Intel praktički kompatibilni i razlikuju se samo u nekim specifičnim naredbama. Ali specijalizirani procesori za druge uređaje, na primjer, video kartice i telefone, sadrže značajne razlike.

Jezici niske razine u pravilu se koriste za pisanje malih sistemskih programa, upravljačkih programa uređaja, modula za sučelja s nestandardnom opremom, programiranja specijaliziranih mikroprocesora, kada su najvažniji zahtjevi kompaktnost, brzina i sposobnost Direktni pristup na hardverske resurse.

Programski jezici visoke razine

U njima se ne uzimaju u obzir osobitosti specifičnih računalnih arhitektura, stoga se kreirane aplikacije lako prenose s računala na računalo. U većini slučajeva dovoljno je jednostavno ponovno kompajlirati program za određenu arhitekturu računala i operacijski sustav... Mnogo je lakše razvijati programe na takvim jezicima i ima manje grešaka. Vrijeme razvoja programa je značajno smanjeno, što je posebno važno pri radu na velikim softverskim projektima.

Sada se u razvojnoj zajednici vjeruje da se programski jezici koji imaju izravan pristup memoriji i registrima ili imaju umetke asemblerskog jezika trebaju smatrati programskim jezicima s niskom razinom apstrakcije. Stoga se većina jezika koji su se smatrali jezicima visoke razine prije 2000. više ne smatraju jezicima visoke razine.

Nedostatak nekih jezika visoke razine je velika veličina programi naspram programa na jezicima niske razine. S druge strane, za algoritamski i strukturno složene programe pri korištenju superkompilacija prednost može biti na strani jezika visoke razine. Sam tekst programa u jeziku visoke razine je manji, međutim, ako ga uzmemo u bajtovima, tada će kod izvorno napisan u asemblerskom jeziku biti kompaktniji. Stoga se jezici visoke razine uglavnom koriste za razvoj softvera za računala i uređaje koji imaju veliku količinu memorije. A različite podvrste asemblera koriste se za programiranje drugih uređaja, gdje je veličina programa kritična.

Upotrijebljeni simboli

Moderni programski jezici su dizajnirani za korištenje ASCII, odnosno dostupnost svih grafički ASCII znakovi su neophodan i dovoljan uvjet za snimanje bilo koje jezične konstrukcije. Menadžeri ASCII znakovi koristi se u ograničenoj mjeri: dopušteni su samo povratni CR, pomak reda LF i horizontalni jezičak HT (ponekad i okomita kartica VT i prijelaz na sljedeću stranicu FF).

Rani jezici koji su se pojavili tijekom tog doba 6-bitni znakovi koristio ograničeniji set. Na primjer, Fortran abeceda sadrži 49 znakova (uključujući razmak): A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 = + - * / (). , $ ":

Značajna iznimka je jezik APL koji koristi puno posebnih znakova.

Upotreba znakova koji nisu ASCII (kao što su KOI8-R znakovi ili Unicode znakovi) ovisi o implementaciji: ponekad su dopušteni samo u komentarima i konstantama znakova/niza, a ponekad su dopušteni samo u identifikatorima. V SSSR postojali su jezici na kojima su sve ključne riječi bile napisane ruskim slovima, ali takvi jezici nisu stekli veliku popularnost (iznimka je Ugrađeni programski jezik 1C: Enterprise).

Proširenje skupa znakova ograničeno je činjenicom da su mnogi projekti razvoja softvera međunarodni. Bilo bi vrlo teško raditi s kodom u kojem su imena nekih varijabli napisana ruskim slovima, drugih arapskim, a trećih kineskim slovima. Istovremeno, za rad s tekstualnim podacima, programski jezici nove generacije ( Delphi 2006 , , Java) podrška Unicode.

Kategorije programskih jezika

Matematički zdravi programski jezici

To su jezici čija je semantika direktno utjelovljenje određenog matematičkog modela, malo prilagođenog (bez narušavanja integriteta) kako bi bio praktičniji jezik za razvoj stvarnih programa. Samo nekoliko jezika spada u ovu kategoriju, većina jezika je osmišljena kao prioritet na temelju mogućnosti učinkovitog prijevoda na Turingov stroj, a imaju samo određene podskup u svom sastavu, utjelovljujući jedno ili drugo matematički model- od