Najstariji programski jezik. Evolucija programskih jezika

💖 Sviđa li vam se? Podijelite vezu sa svojim prijateljima

Osobno računalo je sve do sredine šezdesetih bilo preskup stroj koji je služio isključivo za određene zadatke i koji je obavljao samo jedan zadatak odjednom.

Programski jezici u to vrijeme, kao i računalni uređaj na kojem su se koristili, razvijeni su samo za obavljanje specifičnih zadataka, na primjer, za znanstveno računalstvo, a ne. Budući da su strojevi, kao što smo gore rekli, bili vrlo skupo zadovoljstvo, a istovremeno se obavljao samo jedan zadatak, vrijeme se smatralo skupim - stoga je brzina izvršavanja programa bila u prvom planu.

Međutim, tijekom šezdesetih godina cijena je počela padati i 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 stanju mirovanja bez obavljanja ikakvih zadataka. A kako bi se to zaustavilo, uvedeni su sustavi dijeljenja vremena.

Procesorsko vrijeme u tim je sustavima bilo, kako bi se to reklo, "sječeno", a korisnici su mogli naizmjenično primati kratke dijelove tog istog vremena. Računalni uređaj počeo je raditi puno brže, što je omogućilo korisniku da se na terminalu osjeća kao da svoje aktivnosti obavlja sam sa sustavom. Uređaj je, zauzvrat, bio manje u stanju mirovanja, jer nije obavljao jedan, već nekoliko zadataka odjednom. Dijeljenje vremena značajno je smanjilo troškove hardverskog vremena, a sve zahvaljujući činjenici da jedan uređaj može dijeliti ne jedan korisnik, ili čak dva, već stotine.

Dakle, kada je energija postala jeftinija i dostupnija, oni koji su stvorili programske jezike počeli su sve više razmišljati o praktičnijem pisanju softvera, a ne o brzini njihovog izvršenja. „Male“ operacije, odnosno operacije atomskog tipa koje su izravno izvodili uređaji uređaja, kombinirane su u „volumnije“ operacije visoke razine i pojedinačne strukture 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 opisivanju algoritama u obliku koji je prikladniji 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 stvaranje računalnog programa. Koristeći takav jezik, programer će moći točno odrediti na koje će događaje računalo reagirati, kako će se informacije pohranjivati ​​i prenositi, kao i koje radnje treba izvršiti u tim različitim vrstama okolnosti.

Tijekom stvaranja prvih programabilnih uređaja izumljeno je gotovo tri tisuće programskih jezika. Svake godine njihov se broj povećava, a na popis se dodaju novi. Postoje jezici koje može koristiti samo mali broj kreatora koji su ih razvili, dok drugi postaju poznati velikom broju korisnika. Specijalizirani programeri koriste više od deset različitih programskih jezika u svom radu.

Zašto su potrebni programski jezici?

Proces rada računala je izvršavanje programa. Više rečeno jednostavnim jezikom, odnosno paket naredbi koje slijede određenim redoslijedom. Vrsta strojne instrukcije, koja se sastoji od nula i jedinica, označava koje radnje središnji procesor treba izvesti. Iz ovoga slijedi: kako bi se PC-u postavio redoslijed radnji koje treba izvršiti, specificiran je niz kodova binarnog tipa odgovarajućih naredbi. U strojnim kodovima softver se sastoji od mnogih naredbi. Pisanje takvog softvera je dugotrajno, teško 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 tijekom njegovog izvođenja. Mnogo je lakše pisati softver na jeziku koji je bliži ljudskom prirodnom jeziku, a računalo prevesti taj program u strojne kodove. Upravo tako su se pojavili programski jezici, koji su namijenjeni posebno za pisanje softvera.

U današnje vrijeme postoji veliki broj različitih programskih jezika. Svaki od njih može se koristiti za rješavanje mnogih problema. Stručnjaci u svom području znaju točno koji programski jezik treba koristiti za rješavanje problema, budući da je svaki od jezika opremljen vlastitim mogućnostima, ciljajući na određene vrste zadataka, a također ima vlastiti način opisivanja objekata i koncepata koji koriste se za rješavanje velikog broja problema.

Programski jezici su podijeljeni u 2 grupe

Postoje jezici koji imaju nisku razinu i jezici koji imaju visoku razinu.

U prvu skupinu spadaju asemblerski jezici, gdje se zapisi naredbi koriste u obliku simbola koji se brzo i jasno pamte. Umjesto niza naredbi binarnog tipa ispisuju se simboličke oznake, a umjesto adresa podataka binarnog tipa koji se koriste pri izvođenju naredbe, imena po izboru programera i imena tih podataka u obliku simbola su uzeti. Ovaj programski jezik ima još jedno ime - autocode ili mnemonički kod.

No, programske jezike visoke razine najčešće koriste za programe oni koji ih stvaraju. Takav jezik, u načelu, kao i ljudski jezik, ima svoje pismo, odnosno veliki broj simbola koji se koriste u jezicima. Ovi simboli su neophodni za sastavljanje ključnih riječi jezika. Svaka ključna riječ ima svoju funkciju, baš kao u jeziku na koji smo navikli, riječi koje se sastoje od slova abecede. Ključne riječi se međusobno povezuju u rečenice pomoću sintaktičkih pravila jezika. Svaka od svih rečenica odgovorna je za redoslijed radnji koje će PC izvesti.

Programski jezik, koji ima visoku razinu, je veza između računala i korisnika, pozivajući ga da komunicira s računalom koristeći metodu koja je najprikladnija za osobu. Vrlo često ovaj jezik pomaže odabrati pravu metodu za rješavanje problema.

Prije nego što počne pisati softver u 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 slijediti kako bi se riješio ovaj problem. Stoga se programski jezici koji zahtijevaju preliminarnu kompilaciju algoritma nazivaju jezicima algoritamskog tipa.

Pa, dolazimo, reklo bi se, do onog glavnog. Sada ćemo vam reći koji programski jezici postoje.

Koji su različiti programski jezici?

Fortran

Još sredinom pedesetih godina znanstvenici su počeli stvarati programske jezike. A prvi jezik ove vrste zvao se Fortran, a razvijen je 1957. godine. Koristi se za opisivanje algoritma za rješavanje znanstvenih i tehničkih problema pomoću digitalnog računala. Osim toga, kao i prve računske jedinice, jezik ove vrste koristi se za izvođenje prirodnih znanstvenih i matematičkih izračuna. Taj je jezik u poboljšanom obliku preživio do danas, a među suvremenim jezicima koji imaju visoku razinu najviše se koristi u provođenju znanstvenih istraživanja. Najčešće opcije danas: Fortran-I2, Fortran-I4, EASIC Fortran i njihove generalizacije.

ALGOL

Nastavljamo našu temu o programskim jezicima. Kao što već razumijete, sada ćemo govoriti o programskom jeziku kao što je Algol, koji se pojavio 1958-1960. U 1964-1968 je poboljšan, a ALGOL-68 je razvijen od strane odbora koji je uključivao znanstvenike iz Amerike i Europe, te je klasificiran kao jezik visoke razine. Koristeći ovu vrstu jezika, algebarske formule mogu se lako prevesti u programske naredbe. Algol je bio popularan ne samo u europskim zemljama, već iu Rusiji. Ova vrsta jezika imala je primjetan utjecaj na sve programske jezike stvorene nakon nekog vremena, a posebno je to utjecalo na jezik Pascal. Ovaj tip jezici su, u načelu, kao i jezik Fortran, stvoreni za rješavanje znanstvenih i tehničkih problema. Osim toga, jezik je korišten kao sredstvo podučavanja osnova programiranja, odnosno umijeća sastavljanja softvera.

COBOL

Programski jezik Cobol nastao je 1959.-1960. godine i ovaj jezik pripada trećoj generaciji. Prije svega, namijenjen je razvoju aplikacija za poslovanje i rješavanje gospodarskih problema, za obradu bankovnih podataka, za osiguravajuća društva i druge institucije. "Izumitelj" Kobola je Grace Hopper. COBOL se obično kritizira zbog njegove glomaznosti i opširnosti, budući da je jedan od ciljeva tvoraca ovog jezika bio približiti se što je više moguće Engleski jezik. Pritom je programski jezik imao za svoje vrijeme izvrsne alate za rad s podatkovnim strukturama i datotekama, što mu je, usput rečeno, osiguralo dug život u poslovnim aplikacijama. Barem u SAD-u - sigurno.

Lisp

Sljedeći na redu je programski jezik Lisp. Programski jezik Lisp razvijen je gotovo u isto vrijeme kada i programski jezik Cobol. Ovaj jezik se temelji na programskom predstavljanju linearnih lista simbola sustava, koji su glavna podatkovna struktura jezika. To je drugi najstariji programski jezik nakon Fortran-a. Opsežno se koristi za obradu informacija u obliku simbola i koristi se za izradu softvera koji simulira funkcioniranje ljudskog mozga.

Program kreiran u Lispu sastoji se od nizova izraza, odnosno formi. Rezultat programa je izračun tih izraza, napisanih u obliku popisa - jedne od glavnih struktura ove vrste jezika. Glavna točka Lisp programa je "život" u simboličkom prostoru.

OSNOVNI, TEMELJNI

Programski jezik BASIC razvili su programeri na Dartmouth Collegeu u SAD-u sredinom šezdesetih godina. Jezik se temeljio djelomično na Fortranu 2, a djelomično na ALGOL-60, napravljeni su i dodaci koji su ga učinili praktičnijim za rad u načinu dijeljenja vremena, a nakon nekoliko godina postao je prikladan za obradu teksta i matričnu aritmetiku. Ova vrsta programskog jezika je inicijalno implementirana na glavno računalo GE-265, koje podržava veliki broj terminala. U vrijeme kada se pojavio, suprotno uvriježenom mišljenju, to je bio kompilirani jezik.

Ova vrsta programskog jezika dizajnirana je tako da učenici mogu pisati programe koristeći terminale za dijeljenje vremena. Napravljen je ne samo kako bi riješio problem koji se veže uz problematične, starije jezike, već je namijenjen i “običnim” korisnicima koje ne zanima brzina programa, već ih zanima mogućnost korištenja računalo za rješavanje svojih zadataka. Većina programera početnika, zbog jednostavnosti ove vrste jezika, počinje svoje programersko putovanje s njim.

utvrda

Programski jezik Forth pojavio se kasnih šezdesetih i ranih sedamdesetih. Ova vrsta jezika korištena je u kontrolnim zadacima raznih vrsta sustava nakon što je njen tvorac, Charles Moore, u njemu napisao softver koji je bio namijenjen upravljanju radioteleskopima na Zvjezdarnici u Arizoni.

Mnoga svojstva, poput fleksibilnosti, interaktivnosti i lakoće "izuma", učinila su Forth učinkovitim i atraktivnim jezikom u primijenjenom istraživanju i stvaranju alata. Očigledna područja primjene ove vrste programskog jezika su ugrađeni kontrolni sustavi. Uz sve navedeno, našao je primjenu iu programiranju osobnih računala s različitim operativnim sustavima.

Pascal

Nastavljajući temu, ne možemo ne primijetiti ovu vrstu programskog jezika kao Pascal. Pascal je nastao 1972. godine i dobio je ime po Blaiseu Pascalu, koji je nekoć bio veliki matematičar i izumitelj prve aritmetičke jedinice na svijetu. Tvorcem jezika s pravom se smatra švicarski znanstvenik i informatičar Nikolaus Wirth. Inovacija je korištena za podučavanje metoda programiranja. Pascal je programski jezik opće namjene.

Od svih njegovih značajki, glavne se mogu nazvati - ovo je najstrože tipkanje i prisutnost alata za programiranje strukturnog tipa. Pascal je postao jedan od prvih takvih jezika. Programski jezik Pascal uči vas kako ispravno napisati program i kako pravilno razviti metode za rješavanje problema, a također vam pomaže da naučite kako odabrati prave opcije za predstavljanje i organiziranje podataka koji se koriste u problemu. Jezik Pascal uveden je u srednjoškolske tečajeve informatike od 1983. godine. obrazovne škole SAD.

Nastavljajući temu programskih jezika, odlučili smo govoriti o drugoj vrsti jezika - jeziku Ada. Programski jezik Ada nastao je iz Pascala kasnih sedamdesetih i dobio je ime po Adi Lovelace, nadarenoj matematičarki. Upravo je ta talentirana žena 1843. godine cijelom svijetu objasnila mogućnosti analitičke jedinice Charlesa Babbagea. Ova vrsta jezika razvijena je po narudžbi Ministarstva obrane SAD-a, a isprva se koristila za rješavanje problema upravljanja svemirskim letom.

Programski jezik Ada je modularan, strukturiran i objektno orijentiran programski jezik koji sadrži mogućnosti programiranja paralelnih procesa visoke razine. Sintaksa ove vrste programskog jezika preuzeta je iz Pascala i Algola, proširena je i izvedena u logičkom i strogom stilu. Ada je programski jezik sa strogim tipovima koji potpuno eliminira rad s objektima koji nemaju tipove, a također smanjuje automatske pretvorbe na apsolutni minimum.

Programski jezik C daleko je najpopularniji i najkorišteniji među programerima. Ova vrsta programskog jezika potječe iz dva jezika, a to su BCPL i B. Martin Richards kreirao je BCPL 1967. godine kao jezik koji je bio namijenjen pisanju sistemskog softvera i kompilatora. U nastavku ćemo vam reći o čemu se radi. Ken Thompson 1970. da stvori više ranije verzije UNIX OS korišten na računalu DEC PDP-7. I u prvom i u drugom jeziku varijable nisu bile podijeljene na tipove - svaka vrijednost podataka imala je jednu riječ u memoriji.

Programski jezik SI prvi put je implementiran 1972. godine na računalu DEC PDP-11. Ali uspio je steći svoju popularnost i slavu kao operativni sustav UNIX. Svi današnji glavni operativni sustavi napisani su u C ili C++. Programski jezik C dostupan je na velikom broju osobnih računala nakon nekoliko desetljeća. I usput, vrijedi napomenuti da je potpuno neovisan o hardveru.

Jezik C postao je tradicionalni programski jezik u kasnim sedamdesetima. Ova vrsta jezika opremljena je bogatim alatima koji pružaju mogućnost pisanja fleksibilnog softvera koji se koristi u svim vrstama modernih računala.

Prolog

Eto, došli smo do kraja. Našu temu o programskim jezicima 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. Nazvali su ga prema riječima "Programiranje u jeziku LOGIKE." Programski jezik nastao je na temelju zakona matematičke logike. Ovaj tip jezika, za razliku od gore opisanih programskih jezika, nije algoritamski i spada u takozvane deskriptivne jezike, odnosno jezike deskriptivne vrste.

Sada razgovarajmo o tome što su kompilator i interpreter?

Prevodilac i tumač

Razvijanje jezika koji bi bio pogodan za pisanje programa nije dovoljno. Svaki jezik mora imati prevoditelja, a to je poseban program – prevoditelj.

Dakle, prevoditelj je program koji je dizajniran za prevođenje softvera koji je napisan na jednom programskom jeziku u softver na drugom programskom jeziku. Ovaj proces prevođenja naziva se prevođenje. Primjer prevoditelja je complitor, koji je također program. Namijenjen je prevođenju softvera koji je napisan na bilo kojem jeziku u softver u strojnom kodu. Taj se proces naziva kompilacija.

Postoji još jedna metoda koja može kombinirati procese prevođenja i izvršavanja programa, a zove se interpretacija. Bit procesa je sljedeća: prvo se prevodi u strojne kodove, zatim se izvršava prva linija softvera. Kada je prvi red dovršen, počinje prijevod drugog reda, i tako dalje.

Dakle, iz ovoga možemo zaključiti da je usmeno prevođenje program koji je namijenjen prevođenju redak po redak i izvorni program.

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

Opće je poznato da informacijska tehnologija su jedno od najbrže rastućih područja modernog života. Nove tehnologije, projekti, imena i kratice pojavljuju se gotovo svakodnevno. A u potrazi za napretkom, u nastojanju da ga održimo u korak, ponekad je korisno zastati na minutu, stati na prste i pogledati oko sebe. Bacite pogled u horizont, prisjetite se povijesti i razmislite o budućnosti... Kako biste ponovno uronili u posao sa svježom energijom, ovladajte novim tehnologijama, povećajte vlastitu učinkovitost i blagostanje. Dok opet ne poželite stati na vrhove prstiju...

Na pisanje ovog članka ponukala me rasprava koja se rasplamsala na jednom od dotSITE foruma nakon što se tamo pojavila poruka koja oštro kritizira C#, jednu od glavnih komponenti nove Microsoftove .NET platforme. Poruka je sadržavala već prilično banalne kritike Microsofta općenito i posebno (ovdje ne kažem da se nema što kritizirati Microsoft, samo je ta kritika već napucala zube), kao i neke izjave konkretno o C#. Tijekom rasprave koja je uslijedila izrečeno je nekoliko zanimljivih komentara, no neka su pitanja ostala nerazjašnjena. Sve me to potaknulo da napišem članak u kojem se pokušavaju na neki način “pomiriti” oni koji zastupaju mišljenje o ekskluzivnosti pojedinog programskog jezika. Pokušat ću dati neke povijesne preglede razvoja različitih jezika i objasniti na primjerima neke opće trendove. Možda uspijem nekoga uvjeriti u besmislenost vođenja rasprava sličnih gore navedenima. Ne pretendiram ni na objektivnost (iako ću se truditi da bude tako) ni na cjelovitost izlaganja. Ovo je samo pokušaj da se “stane na prste i pogleda okolo”...

1. Prvi univerzalni jezici

Dakle, počnimo. Okrenimo se izvorima razvoja računalna tehnologija. Prisjetimo se prvih računala i programa za njih. To je bilo doba programiranja izravno u strojnim kodovima, a glavni mediji za pohranu bili su bušene kartice i bušene trake. Od programera se zahtijevalo da temeljito poznaju arhitekturu stroja. Programi su bili prilično jednostavni, što je bilo određeno, prvo, vrlo ograničenim mogućnostima tih strojeva, i, drugo, velikom složenošću razvoja i, što je najvažnije, otklanjanja pogrešaka programa izravno u strojnom jeziku. U isto vrijeme, ova metoda razvoja dala je programeru nevjerojatnu moć nad sustavom. Postalo je moguće koristiti tako genijalne algoritme i načine organiziranja programa o kojima moderni programeri nisu ni sanjali. Na primjer, mogla bi se koristiti (i koristila se!) takva značajka kao što je samomodificirajući kod. Poznavanje binarnog prikaza naredbi ponekad je omogućilo da se neki podaci ne pohranjuju zasebno, već da se ugrade u kod kao naredbe. A ovo je daleko od toga puni popis tehnikama, od kojih vas ovladavanje barem jednom odmah dovodi do razine "gurua" vrhunske klase.

2. Asembler

Čini se da je prvi značajan korak prijelaz na asemblerski jezik (dopustimo si malu lirsku digresiju: ​​engleski naziv asemblerski jezik, ili asembler, preveden je na ruski potpuno istim izrazom koji je korišten gore. U isto vrijeme, početnik stječe dojam da je jezik imenovan po određenoj osobi od strane imenovanog asemblera, prilično smiješna situacija, zar ne?). Naizgled ne baš zamjetan korak - prelazak na simboličko kodiranje strojnih instrukcija - bio je zapravo od velike važnosti. Programer više nije morao ulaziti u genijalne načine kodiranja naredbi na hardverskoj razini. Štoviše, često suštinski identične naredbe bile su kodirane na potpuno različite načine ovisno o njihovim parametrima (dobro poznati primjer iz svijeta modernih računala je kodiranje instrukcije mov u Intel procesori: Postoji nekoliko potpuno različito kodiranih varijanti naredbe; izbor jedne ili druge opcije ovisi o operandima, iako je bit operacije nepromijenjena: smjestite sadržaj (ili vrijednost) drugog operanda u prvi). Također je postalo moguće koristiti makronaredbe i oznake, što je također pojednostavilo stvaranje, modificiranje i uklanjanje pogrešaka programa. Postojao je čak i neki privid prenosivosti - bilo je moguće razviti cijelu obitelj strojeva sa sličnim sustavom instrukcija i nekom vrstom zajedničkog asemblera za njih, bez potrebe za osiguravanjem binarne kompatibilnosti.

Pritom je prijelaz na novi jezik sadržavao i neke negativne (barem na prvi pogled) strane. Postalo je gotovo nemoguće koristiti sve vrste pametnih tehnika sličnih gore spomenutima. Osim toga, ovdje su se prvi put u povijesti razvoja programiranja pojavila dva prikaza programa: u izvornim tekstovima iu kompiliranom obliku. U početku, dok su asembleri samo prevodili mnemonike u strojne kodove, jedan se lako prevodio u drugi i natrag, ali onda, kako su značajke kao što su oznake i makronaredbe postale dostupne, rastavljanje je postalo sve teže. Do kraja asemblerske ere potpuno je izgubljena mogućnost automatskog prevođenja u oba smjera. S tim u vezi, razvijen je velik broj posebnih disassembler programa koji izvode inverzne transformacije, ali u većini slučajeva teško mogu razdvojiti kod i podatke. Osim toga, sve logičke informacije (nazivi varijabli, oznake itd.) su zauvijek izgubljene. U slučaju problema dekompiliranja jezika visoke razine, primjeri zadovoljavajućeg rješenja problema potpuno su rijetki.

3. FORTRAN

Godine 1954. programski jezik Fortran kreirala je unutar IBM Corporation skupina programera predvođenih Johnom Backusom.

Značaj ovog događaja teško je precijeniti. To je prvi programski jezik visoke razine. Po prvi put, programer je mogao istinski apstrahirati sebe od osobitosti strojne arhitekture. Ključna ideja koja razlikuje novi jezik od asemblera, postojao je koncept potprograma. Podsjetimo, ovo moderna računala podržavati rutine na hardverskoj razini, pružajući odgovarajuće instrukcije i strukture podataka (stog) izravno na asemblerskoj razini, ali 1954. to je bilo potpuno drugačije. Stoga kompajliranje 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 razmaci uopće nisu koristili kao sintaktičke jedinice. To je stvorilo mnogo prilika za skrivene pogreške, kao što su:

U Fortranu sljedeća konstrukcija opisuje " za petlju za oznaku 10 pri promjeni indeksa od 1 do 100": DO 10 I=1.100 Ako ovdje zarez zamijenite točkom, dobit ćete operator dodjele: DO10I = 1.100 Kažu da je zbog takve greške raketa eksplodirala tijekom lansiranja !

Jezik Fortran bio je (i koristi se i danas) za znanstveno računalstvo. Pati od nedostatka mnogih poznatih jezičnih konstrukcija i atributa; prevodilac praktički ne provjerava sintaktički ispravan program u smislu semantičke ispravnosti (podudaranje tipa, itd.). Ne podržava moderne načine strukturiranja koda i podataka. Toga su bili svjesni i sami programeri. Prema samom Backusu, suočili su se sa zadatkom da razviju kompilator, a ne jezik. Razumijevanje samostalnog značaja programskih jezika došlo je kasnije.

Uvođenje Fortrana naišlo je na još žešće kritike od uvođenja asemblera. Programeri su se bojali smanjenja učinkovitosti programa zbog korištenja međuveze u obliku prevoditelja. I ti su strahovi bili opravdani: doista, dobar programer će najvjerojatnije, kada ručno rješava bilo koji mali problem, napisati kod koji radi brže od koda dobivenog kao rezultat kompilacije. Nakon nekog vremena došlo je do razumijevanja da je provedba velikih projekata nemoguća bez upotrebe jezika visoke razine. Snaga računala je rasla, a s padom učinkovitosti, koji se prije smatrao prijetećim, postalo je moguće pomiriti se. Prednosti jezika visoke razine postale su toliko očite da su potaknule programere na stvaranje novih jezika, sve naprednijih.

4.Kobol

Godine 1960. stvoren je programski jezik Cobol. Zamišljen je bio kao jezik za stvaranje komercijalnih aplikacija i to je postao. Tisuće komercijalnih aplikacijskih sustava napisano je u Cobolu. Posebnost jezika je sposobnost učinkovit rad s velikom količinom podataka, što je tipično za komercijalne aplikacije. Popularnost Cobola je tolika da se čak i sada, uz sve svoje nedostatke (strukturom i dizajnom, Cobol uvelike podsjeća na Fortran), pojavljuju 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 imao iznimno bogatstvo sintaktičkih struktura. Po prvi put je uveo podršku za rukovanje iznimkama i paralelizam. Valja napomenuti da je sintaktička struktura jezika bila izuzetno složena. Razmaci su već korišteni kao sintaktički graničnici, ali ključne riječi nisu bili rezervirani. Posebno, sljedeći redak- ovo je sasvim normalan operator u PL/1: IF ELSE=THEN THEN THEN; DRUGO DRUGO

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

6.OSNOVNI

1963. jezik je stvoren na koledžu Dartmouth BASIC programiranje(Beginners’ All-Purpose Symbolic Instruction Code - višenamjenski jezik simboličkih uputa za početnike). Jezik je prvenstveno zamišljen kao nastavni alat i kao prvi programski jezik koji se uči. Namjera je bila da bude laka za tumačenje i sastavljanje. Mora se reći da je BASIC uistinu postao jezik na kojem se uči programirati (barem je tako bilo prije nekoliko godina, sada tu ulogu preuzima Pascal). Stvoreno je nekoliko moćnih implementacija BASIC-a koje podržavaju najnovije koncepte programiranja (Microsoft Visual Basic je glavni primjer).

7. Algol

Godine 1960. tim predvođen Peterom Naurom stvorio je programski jezik Algol. Ovaj je jezik iznjedrio cijelu obitelj jezika sličnih Algolu (najvažniji predstavnik je Pascal). Pojavio se 1968 nova verzija Jezik. Nije joj se činilo tako širokim praktična aplikacija, kao i prva verzija, ali je bila vrlo popularna u teoretičarskim krugovima. Jezik je bio vrlo zanimljiv, jer je imao mnogo jedinstvenih karakteristika u to vrijeme.

8. Daljnji razvoj programski jezici

U ovom trenutku radije ću zastati i dati neke napomene. Stvaranje svakog od gore navedenih jezika (s mogućim izuzetkom Algola) bilo je uzrokovano određenim praktičnim zahtjevima. Ovi jezici poslužili su kao temelj za kasniji razvoj. Svi oni predstavljaju istu programsku paradigmu. Sljedeći jezici otišli su znatno dalje u svom razvoju, prema dubljoj apstrakciji.

Predstavit ću informacije o kasnijim jezicima u obliku opisa obitelji jezika. To će nam omogućiti da bolje pratimo odnose između pojedinih jezika.

9. Jezici slični Pascalu

Jezik je 1970. stvorio Niklaus Wirth Pascal programiranje. Jezik je izvanredan po tome što je prvi široko korišteni jezik za strukturirano programiranje (prvi, strogo govoreći, bio je Algol, ali nije bio tako široko korišten). Po prvi put, bezuvjetni operator skoka više ne igra temeljnu ulogu u kontroli redoslijeda izvršavanja naredbi. Ovaj jezik je također uveo strogu provjeru tipa, što je omogućilo prepoznavanje mnogih grešaka u fazi kompilacije.

Negativna značajka jezika bio je nedostatak alata za podjelu programa na module. Wirth je to prepoznao i razvio jezik Modula-2 (1978), u kojem je ideja modula postala jedan od ključnih koncepata jezika. Godine 1988. pojavila se Modula-3, koja je dodala objektno orijentirane značajke. Logičan nastavak Pascala i Module jezici su Oberon i Oberon-2. Karakterizira ih kretanje prema usmjerenosti na objekte i komponente.

10. C-jezici

Godine 1972. Kernighan i Ritchie stvorili su programski jezik C. Nastao je kao jezik za razvoj operativnog sustava UNIX. C se često naziva "prijenosnim asemblerom", što znači da vam omogućuje rad s podacima gotovo jednako učinkovit kao asemblerski jezik, dok pruža strukturirane kontrolne konstrukcije i apstrakcije visoke razine (strukture i nizovi). To je razlog njegove ogromne popularnosti do danas. I upravo je to njegova Ahilova peta. C prevodilac ima vrlo malo kontrole tipa, tako da je vrlo lako napisati program koji izgleda savršeno ispravno, ali je logički pogrešan.

Godine 1986. Bjarne Stroustrup stvorio je prvu verziju jezika C++, dodajući objektno orijentirane značajke preuzete iz Simule (vidi dolje) u jezik C i ispravljajući neke od grešaka i loših odluka jezika. C++ se nastavlja poboljšavati do danas; 1998. godine objavljena je nova (treća) verzija standarda koja sadrži neke prilično značajne promjene. Jezik je postao osnova za razvoj modernih velikih i složenih projekata. On također ima, međutim, slabe strane, koji proizlaze iz zahtjeva učinkovitosti.

Godine 1995. Sun Microsystems Corporation osnovali su Ken Arnold i James Gosling. jezik Java. Naslijedio je sintaksu jezika C i C++ te je pošteđen nekih neugodnih značajki potonjeg. Posebnost jezika je kompilacija određenog apstraktnog stroja u kod, za koji se zatim piše emulator (Java Virtual Machine) stvarni sustavi. Osim toga, Java nema pokazivače niti višestruko nasljeđivanje, što uvelike povećava pouzdanost programiranja.

Od 1999. do 2000. Microsoft je stvorio jezik C#. Prilično je sličan Javi (i zamišljen je kao alternativa potonjoj), ali također ima karakteristične značajke. Usredotočen uglavnom na razvoj višekomponentnih internetskih aplikacija.

11. Ada i Ada 95 jezika

Godine 1983., pod pokroviteljstvom Ministarstva obrane SAD-a, stvoren je jezik Ada. Jezik je izvanredan po tome što se mnoge pogreške mogu otkriti u fazi kompilacije. Osim toga, podržani su mnogi aspekti programiranja koji su često prepušteni operativnom sustavu (konkurentnost, 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 (zrakoplovstvo, željeznički promet). Glavni razlog je teško svladavanje jezika i njegova prilično glomazna sintaksa (mnogo glomaznija od Pascala).

12. Jezici za obradu podataka

Svi gore navedeni jezici jezici su opće namjene u smislu da nisu ciljani niti optimizirani za korištenje bilo koje specifične strukture podataka ili za korištenje u bilo kojem specifičnom području. Razvijen je velik broj jezika koji ciljaju na prilično specifične aplikacije. Ispod je kratki osvrt takvi jezici.

Godine 1957. pokušalo se stvoriti jezik za opis matematičke obrade podataka. Jezik je nazvan APL (Application Programming Language). Njegova posebnost bila je uporaba matematičkih simbola (što je otežavalo korištenje na tekstualnim terminalima; izgled grafička sučelja eliminirao 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 uporaba spriječena je, kao što je već navedeno, uporabom nestandardnih simbola kao elemenata sintakse.

14. Snobol i ikona

Godine 1962. pojavio se jezik Snobol (a 1974. njegov nasljednik Icon), dizajniran za obradu nizova. Sintaksa Icona podsjeća na C i Pascal u isto vrijeme. Razlika je u prisutnosti snažnih ugrađenih funkcija za rad s nizovima i posebnoj semantici povezanoj s tim funkcijama. Suvremeni analog Icona i Snobola je Perl, jezik za obradu nizova i teksta koji dodaje neke objektno orijentirane mogućnosti. Smatra se vrlo praktičnim jezikom, ali nedostaje mu elegancije.

15.SETL

Godine 1969. nastao je jezik SETL – 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. Postao je dosta raširen u sustavima umjetne inteligencije. Ima nekoliko potomaka: Planner (1967), Scheme (1975), Common Lisp (1984). Mnoge njegove osobine bile su naslijeđene moderni jezici funkcionalno programiranje.

17. Skriptni jezici

U U zadnje vrijeme Zbog razvoja internetskih tehnologija, široke upotrebe računala visokih performansi i niza drugih čimbenika, takozvani skriptni jezici postali su široko rasprostranjeni. Ovi su jezici u početku bili orijentirani na korištenje kao interni kontrolni jezici u svim vrstama složenih sustava. Mnogi od njih su, međutim, izašli 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 promjenjivi programi, Vrlo mali programi ili u slučajevima kada je za izvršavanje jezičnih iskaza potrebno vrijeme koje je neusporedivo s vremenom njihovog parsiranja. Stvoren je prilično velik broj takvih jezika; navest ćemo samo one 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, razlog za promjenu imena bili su marketinški razlozi. Tumači ga preglednik kada se web stranica prikaže. Sintaksa je slična Javi i (daleko) C/C++. Ima mogućnost korištenja ugrađene objektne funkcionalnosti preglednika, ali nije istinski objektno orijentirani jezik.

19. VBScript

Jezik je stvorio Microsoft uglavnom kao alternativu JavaScriptu. Ima sličan opseg. Sintaktički sličan jeziku Visual Basic (i skraćena je verzija potonjeg). Baš kao i JacaScript, izvršava ga preglednik prilikom prikaza web stranica i ima isti stupanj objektne orijentacije.

20. Perl

Jezik je stvoren da pomogne Administrator sustava Unix operativni sustav za obradu raznih vrsta tekstova i označavanje potrebne informacije. Razvio se u moćan alat za rad s tekstovima. To je interpretirani jezik i implementiran je u gotovo sve postojeće platforme. Koristi se u obradi teksta, kao i za dinamičko generiranje web stranica na web poslužiteljima.

21.Python

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

22. Objektno orijentirani jezici

Objektno orijentirani pristup, koji je zamijenio strukturalni, nije se prvi put pojavio u C++, kako neki vjeruju. Postoji cijeli niz čistih objektno orijentiranih jezika, bez informacija o kojima bi naš pregled bio nepotpun.

23. Simula

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

24. Smalltalk

Popularnost objektno orijentiranog programiranja donio je jezik Smalltalk, nastao 1972. godine. Jezik je bio namijenjen dizajniranju složenih grafičkih sučelja i bio je prvi istinski objektno orijentirani jezik. U njemu su klase i objekti jedine programske konstrukcije. Veliki nedostatak Smalltalka su veliki zahtjevi za memorijom i niske performanse primljenih programa. To je zbog ne baš uspješne implementacije objektno orijentiranih značajki. Popularnost jezika C++ i Ada 95 je upravo zbog činjenice da je objektna orijentacija implementirana bez značajnog smanjenja performansi.

25. Eiffel

Postoji jezik s vrlo dobrom implementacijom objektne orijentacije, koji nije nadgradnja bilo kojem drugom jeziku. Ovo je Eiffelov jezik (1986). Budući da je čisti objektno orijentirani programski jezik, također poboljšava pouzdanost programa upotrebom "kontrolnih izjava".

26. Paralelni programski jezici

Većina računalne arhitekture a programski jezici usmjereni su na sekvencijalno izvođenje programskih iskaza. Trenutno, međutim, postoje softverski i hardverski sustavi koji omogućuju organiziranje paralelnog izvođenja različitih dijelova istog računalnog procesa. Za programiranje takvih sustava potrebna je posebna podrška programskih alata, posebno 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 programiranju transpjutera – višeprocesorskih sustava za distribuiranu obradu podataka. Opisuje interakciju paralelnih procesa u obliku kanala - načina prijenosa informacija iz jednog procesa u drugi. Primijetimo značajku sintakse jezika Shccam - u njemu su sekvencijalni i paralelni redoslijed izvršavanja operatora jednaki i 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. Njegova glavna zadaća je organizirati interakciju između paralelnih procesa. To se postiže korištenjem globalnog prostora torki. Proces može tamo smjestiti torku podataka (tj. zbirku nekoliko, po mogućnosti heterogenih podataka), a drugi proces može čekati da se određena torka pojavi u području torki i nakon njenog pojavljivanja pročitati tu torku i eventualno naknadno ga izbrisati. Imajte na umu da proces može, na primjer, postaviti tuple u područje i izaći, a drugi proces može koristiti tu tuple neko vrijeme kasnije. Time se osigurava mogućnost asinkrone interakcije. Očito, pomoću takvog modela može se simulirati 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 postojanja globalne regije tuplea s potencijalno neograničenom memorijom.

29. Neimperativni jezici

Svi jezici o kojima smo ranije govorili imaju jednu zajedničku stvar: imperativ su. To znači da programi na njima u konačnici predstavljaju opis korak po korak rješavanje ovog ili onog problema. Možete pokušati opisati samo izjavu problema i povjeriti prevoditelju da riješi problem. Postoje dva glavna pristupa koji razvijaju ovu ideju: funkcionalno i logičko programiranje.

30. Funkcionalni jezici

Osnovna ideja koja stoji iza funkcionalnog programiranja je predstavljanje programa kao matematičkih funkcija (to jest, funkcija čije je značenje određeno samo njihovim argumentima, a ne kontekstom izvršenja). Operator dodjele se ne koristi u takvim jezicima (ili se barem ne preporučuje). Imperativne mogućnosti, u pravilu, postoje, ali njihova je uporaba podložna 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 izračunavanje radi na istom mjestu gdje je i deklarirano, dok se u slučaju lijene semantike računanje vrši samo kada je stvarno potrebno. Prvi jezici imaju učinkovitiju implementaciju, dok drugi imaju bolju semantiku.

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

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

Više informacija o funkcionalnim jezicima možete pronaći OVDJE:

31. Logički programski jezici

Programi u logičkim programskim jezicima izražavaju se kao matematičke logičke formule, a prevoditelj pokušava iz njih izvesti posljedice.

Predak većine logičkih programskih jezika je 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 detaljnije informacije upućujemo čitatelja na stručnu literaturu .

32. Umjesto zaključka

Dopustite mi da istaknem neke opće trendove u razvoju programskih jezika. Pronicljivi čitatelj vjerojatno je već davno pogodio što ću reći. Jezici evoluiraju prema sve većoj i većoj apstrakciji. A to je popraćeno padom učinkovitosti. Pitanje: 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 riješiti stvaranjem više brza računala. Ako su memorijski zahtjevi previsoki, možete povećati veličinu memorije. To, naravno, zahtijeva vrijeme i novac, ali može se riješiti. Ali postoji samo jedan način rješavanja grešaka u programima: moraju se ispraviti. Ili još bolje, nemojte to učiniti. 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 ovog pregleda bila je pokušati dati čitatelju ideju o raznolikosti postojećih programskih jezika. Među programerima često postoji mišljenje o “univerzalnoj primjenjivosti” određenog jezika (C, C++, Pascal itd.). Ovo mišljenje proizlazi iz nekoliko razloga: nedostatak informacija, navika, inercija razmišljanja. Pokušao sam malo kompenzirati prvi faktor. Što se ostalog tiče, mogu samo reći da pravi profesionalac mora stalno težiti usavršavanju svojih stručnih kvalifikacija. A za to se ne trebate bojati eksperimentirati. Pa što ako svi oko vas pišu u C/C++/VB/Pascal/Perl/Java/… (podcrtajte ako je potrebno)? Zašto ne isprobati nešto novo? Što ako se ovo pokaže učinkovitijim? Naravno, prije nego počnete koristiti novi jezik, morate pažljivo proučiti sve njegove značajke, uključujući dostupnost učinkovite implementacije, mogućnost interakcije s postojećim modulima itd., I tek onda donijeti odluku. Naravno, uvijek postoji rizik da se krene krivim putem, ali... Ne griješi samo onaj tko ništa ne radi.

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 ovakvih sporova. Maksimalno o čemu se može raspravljati jesu prednosti jednog jezika nad drugim pri rješavanju određenog problema pod određenim uvjetima. Ovdje se stvarno ponekad ima o čemu raspravljati. A rješenje ponekad nije nimalo očito. Međutim, svađati se "općenito" očita je glupost.

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

Materijal s Wikipedije

Programski jezik- formalni znakovni sustav dizajniran za snimanje računalnih programa. Programski jezik definira skup leksičkih, sintaktičkih i semantičkih pravila koja definiraju izgled programi i radnje koje će izvođač (najčešće računalo) izvoditi pod svojom kontrolom.

U isto vrijeme, 1940-ih, pojavljuju se električna digitalna računala i razvija se jezik koji se može smatrati prvim računalnim programskim jezikom visoke razine - “Plankalkül”, koji je kreirao njemački inženjer K. Zuse između 1945. i 1945. godine.

Od sredine 1950-ih počeli su se pojavljivati ​​jezici treće generacije kao što su Fortran, Lisp i Cobol. Programski jezici ove vrste su apstraktniji (također se nazivaju "jezici visoke razine") i univerzalni, te nemaju strogu ovisnost o određenoj hardverskoj platformi i strojnim uputama koje se na njoj koriste. 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 koje ima prevoditelj za taj jezik (alat koji prevodi program u strojni jezik, nakon čega ga može izvršiti procesor).

Ažurirane verzije navedenih jezika još uvijek se koriste u razvoju. softver, a svaki od njih imao je određeni utjecaj na kasniji razvoj programskih jezika. U isto vrijeme, krajem 1950-ih, pojavljuje se Algol, koji je također poslužio kao temelj za niz daljnjih razvoja na ovom području. Treba napomenuti da su na format i upotrebu ranih programskih jezika uvelike utjecala ograničenja sučelja.

Poboljšanje

Vizualni (grafički) programski jezici postaju važno područje rada, u kojima se proces "pisanja" programa kao teksta zamjenjuje procesom "crtanja" (konstruiranje programa u obliku dijagrama) na ekranu računala. Vizualni jezici pružaju jasnoću i bolju ljudsku percepciju programske logike.

Standardizacija programskih jezika

Stvoreni su međunarodni standardi za mnoge široko korištene programske jezike. Posebne organizacije redovito ažuriraju i objavljuju specifikacije i formalne definicije odgovarajućeg jezika. U okviru takvih odbora nastavlja se razvoj i modernizacija programskih jezika i rješavaju pitanja proširenja ili podrške postojećim i novim jezičnim konstruktima.

Vrste podataka

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

Poseban sustav kojim se organiziraju podaci u programu je sustav tipa programski jezik; razvoj i proučavanje sustava tipova poznato je kao teorija tipova. Jezici se mogu podijeliti na one koji imaju statično tipkanje I dinamičko tipkanje, i beztipski jezici(Na primjer, Dalje).

Statički tipizirani jezici mogu se dalje podijeliti na jezike sa obvezna deklaracija, gdje svaka deklaracija varijable i funkcije ima obaveznu deklaraciju tipa, a jezici s zaključene vrste. Ponekad se nazivaju dinamički upisani jezici latentno upisano.

Strukture podataka

Sustavi tipova u jezicima visoke razine dopuštaju definiranje složenih, složenih tipova, takozvanih struktura podataka. Obično se strukturni tipovi podataka formiraju kao kartezijanski umnožak osnovnih (atomskih) tipova i prethodno definiranih kompozitnih tipova.

Osnovne strukture podataka (popisi, redovi čekanja, hash tablice, binarna stabla i parovi) često su predstavljeni posebnim sintaktičkim konstrukcijama u jezicima visoke razine. Takvi se podaci automatski strukturiraju.

Semantika programskih jezika

Postoji nekoliko pristupa definiranju semantike programskih jezika.

Najrasprostranjenije su tri varijante: operacionalna, derivacijska (aksiomatska) i denotacijska (matematička).

  • Kada se opisuje semantika unutar operativni pristupa, obično se izvođenje konstrukata programskog jezika tumači pomoću nekog zamišljenog (apstraktnog) računala.
  • Aksiomatska semantika opisuje posljedice izvršavanja jezičnih konstrukata korištenjem jezika logike i određivanjem pred- i postuvjeta.
  • Zubni Semantika operira pojmovima tipičnim za matematiku - skupovi, korespondencija, kao i sudovi, iskazi itd.

Paradigma programiranja

Programski jezik izgrađen je u skladu s jednim ili drugim osnovnim računalnim modelom i programskom paradigmom.

Unatoč činjenici da je većina jezika usmjerena na imperativni model računalstva, definiran von Neumannovom arhitekturom računala, postoje i drugi pristupi. Možemo spomenuti jezike s modelom računanja stog (Forth, Factor, PostScript itd.), kao i funkcionalne (Lisp, Haskell, REFAL, temeljen na modelu računanja koji je uveo sovjetski matematičar A. A. Markov Jr. itd.). ) i logičko programiranje (Prolog).

Trenutno se također aktivno razvijaju deklarativni i vizualni programski jezici, kao i metode i alati za razvoj jezika specifičnih za probleme (vidi Jezično orijentirano programiranje).

Načini implementacije jezika

Programski jezici mogu se implementirati kao kompilirani, interpretirani i ugrađeni.

Program u prevedenom jeziku pomoću kompilatora (poseban program) pretvara se (kompilira) u strojni kod (skup instrukcija) za danu vrstu procesora i zatim sastavlja u izvršni modul, koji se može pokrenuti za izvođenje 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, tada interpreter izravno izvršava (interpretira) izvorni tekst bez preliminarni prijevod. U tom slučaju program ostaje na izvornom jeziku i ne može se pokrenuti bez tumača. Računalni procesor se, u tom pogledu, može nazvati tumačem strojnog koda.

Podjela na kompilirane i interpretirane jezike je uvjetna. Dakle, za bilo koji tradicionalno kompilirani jezik, kao što je Pascal, možete napisati tumač. Osim toga, većina suvremenih "čistih" interpretatora ne izvršava jezične konstrukcije izravno, već ih kompajlira u neku međureprezentaciju visoke razine (na primjer, s dereferenciranjem varijable i makro ekspanzijom).

Prevodilac se može stvoriti za bilo koji interpretirani jezik - na primjer, jezik Lisp, koji je izvorno interpretiran, može se kompilirati bez ikakvih ograničenja. Kod generiran tijekom izvođenja programa također se može dinamički prevesti tijekom izvođenja.

Općenito, kompajlirani programi rade brže i ne zahtijevaju dodatni programi, budući da su već prevedeni na strojni jezik. Istodobno, svaki put kad se programski tekst promijeni potrebno ga je ponovno prevesti, što usporava razvojni proces. Osim toga, prevedeni program može se izvršiti samo na istoj vrsti računala i obično pod istim operativnim sustavom za koji je prevoditelj dizajniran. Za izradu izvršne datoteke 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 na interpretiranom jeziku različiti tipovi strojeva i operativnih sustava bez dodatnog napora.

Međutim, interpretirani programi rade osjetno sporije od kompiliranih i ne mogu se izvršiti bez programa interpretera.

Ovaj vam pristup, u određenom smislu, omogućuje korištenje prednosti i tumača i prevoditelja. Treba spomenuti da postoje jezici koji imaju i interpreter i kompajler (Forth).

Programski jezici niske razine

Prva računala morala su se programirati pomoću binarnih strojnih kodova. Međutim, programiranje na ovaj način prilično je dugotrajan i težak zadatak. Kako bi se pojednostavio ovaj zadatak, počeli su se pojavljivati ​​programski jezici niska razina, što je omogućilo određivanje strojnih naredbi u obliku razumljivom ljudima. Da ih pretvorim u binarni kod stvoreni su posebni programi- prevoditelji.

Primjer jezika niske razine je asemblerski jezik. Jezici niske razine usmjereni su na određenu vrstu procesora i uzimaju u obzir njegove značajke, tako da se program na asemblerskom jeziku može prenijeti na drugu hardversku platformu, mora se gotovo u potpunosti prepisati. Postoje određene razlike u sintaksi programa za različite prevoditelje. Istina, središnji procesori za računala iz AMD-a i Intela praktički su 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 obično se koriste za pisanje malih sistemski programi, upravljački programi uređaja, moduli sučelja s nestandardnom opremom, programiranje specijaliziranih mikroprocesora, pri čemu su najvažniji zahtjevi kompaktnost, brzina i mogućnost izravnog pristupa hardverskim resursima.

Programski jezici visoke razine

Ne uzimaju se u obzir značajke pojedinih računalnih arhitektura, pa se izrađene aplikacije lako prenose s računala na računalo. U većini slučajeva dovoljno je jednostavno rekompilirati program za određenu računalnu arhitekturu i operacijski sustav. Razvijanje programa na takvim jezicima puno je lakše i čini se manje pogrešaka. Vrijeme razvoja programa značajno je smanjeno, što je posebno važno pri radu na velikim softverskim projektima.

Sada se među programerima vjeruje da se programski jezici koji imaju izravan pristup memoriji i registrima ili imaju umetke sklopa 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 takvima.

Nedostatak nekih jezika visoke razine je da su programi veliki u usporedbi s programima na jezicima niske razine. S druge strane, za algoritamski i strukturno složene programe, kada se koristi superkompilacija, prednost može biti na strani jezika visoke razine. Tekst programa na jeziku visoke razine je manji, međutim, ako se uzme u bajtovima, kod izvorno napisan u asemblerskom jeziku bit će kompaktniji. Stoga se uglavnom jezici visoke razine koriste za razvoj softvera za računala i uređaje koji imaju veliki volumen memorija. A različite podvrste asemblera koriste se za programiranje drugih uređaja gdje je veličina programa kritična.

Korišteni simboli

Moderni programski jezici dizajnirani su za korištenje ASCII-ja, odnosno dostupnosti svima grafički ASCII znakovi su nužan i dovoljan uvjet za pisanje bilo koje jezične konstrukcije. Menadžeri ASCII znakovi koriste se u ograničenoj mjeri: dopušteni su samo povratak na početak redaka CR, novi redak LF i vodoravni tabulator HT (ponekad i okomiti tabulator VT i pomak stranice FF).

Rani jezici, nastali u eri 6-bitnih znakova, koristili su ograničeniji skup. Na primjer, Fortran abeceda ima 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 APL jezik, koji koristi mnogo 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 u identifikatorima. U SSSR-u su postojali jezici u 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 korištenih simbola 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 znakovima. U isto vrijeme, za rad s tekstualnim podacima, programski jezici nove generacije (Delphi 2006, Java) podržavaju Unicode.

Kategorije programskih jezika

Matematički utemeljeni programski jezici

To su jezici čija je semantika direktno utjelovljenje određenog matematičkog modela, malo prilagođeno (bez narušavanja cjelovitosti) kako bi bio praktičniji jezik za razvoj stvarnih programa. Samo nekoliko jezika spada u ovu kategoriju, većina jezika dizajnirana je s prioritetom na mogućnosti učinkovitog prevođenja na Turingov stroj i imaju samo određene podskup u svom sastavu, utjelovljujući jedan ili drugi matematički model - od



reci prijateljima
Pročitajte također