Dešifrovanje programskog jezika. Najpopularniji programski jezici. Programski jezici za početnike. Razvoj operativnog sistema

Kada pokušavate da shvatite koji programski jezik da počnete da učite, verovatno ćete naići na termine "visoki nivo" i "niski nivo". Ljudi stalno govore o programskim jezicima visokog i niskog nivoa. Ali šta to tačno znači? A šta znači naučiti kodirati? Počnimo s definicijama svakog od njih.


Programski jezici visokog i niskog nivoa

U ovom članku ću govoriti o jezicima "visokog" i "niskog nivoa". Ali ne postoje posebni kriteriji za to. Samo imajte na umu da ovo mnogo zavisi od vaše perspektive. Ako ste C programer, Java može izgledati prilično visoko. Ako ste navikli na Ruby, Java može izgledati kao jezik niskog nivoa.

Mašinski kod i jezici niskog nivoa

Bilo da se jezik smatra na visokom ili niskom nivou (ili negde između), radi se o apstrakciji. Mašinski kod nema apstrakciju – sadrži pojedinačne instrukcije koje se prosljeđuju računaru. A pošto se mašine bave samo brojevima, oni su predstavljeni binarno (iako su ponekad zapisani u decimalnom ili heksadecimalnom zapisu).

Evo primjera izvornog koda:

U mašinskom kodu operacije moraju biti tačno navedene. Na primjer, ako se dio informacije treba izvući iz memorije, mašinski kod će morati reći računaru gdje da ga pronađe u memoriji.

Pisanje direktno u mašinski kod je moguće, ali vrlo teško.

Programski jezici niskog nivoa dodaju malo apstrakcije mašinskim kodovima. Ova apstrakcija skriva specifične instrukcije mašinskog koda iza deklaracija koje su ljudima čitljivije. Asemblerski jezici su jezici najnižeg nivoa pored mašinskog koda.

U mašinskom kodu možete napisati nešto poput "10110000 01100001", ali asemblerski jezik to može pojednostaviti kao "MOV AL, 61h". Još uvijek postoji skoro jedna na jedan korespondencija između onoga što je napisano u asemblerskom jeziku i instrukcija datih mašini.

Prelaskom na popularnije programske jezike, na kraju ćete dobiti nešto poput C. Iako ovaj jezik nije tako niskog nivoa kao asemblerski jezik, i dalje postoji jaka korespondencija između onoga što je napisano u C-u i mašinskog koda. Većina operacija napisanih u C-u može se ispuniti malim brojem instrukcija mašinskog koda.

Programski jezici visokog nivoa

Poput jezika nižeg nivoa, viši nivoi pokrivaju širok spektar apstrakcija. Neki jezici, kao što je Java (koju mnogi smatraju programskim jezicima srednjeg nivoa), i dalje vam daju veliku kontrolu nad načinom na koji računar upravlja memorijom i podacima.

Drugi, poput Rubyja i Pythona, vrlo su apstraktni. Oni vam daju manji pristup funkcijama nižeg nivoa, ali je sintaksa mnogo lakša za čitanje i pisanje. Možete grupirati stvari u klase koje nasljeđuju karakteristike, tako da ih trebate deklarirati samo jednom.

Varijable, objekti, potprogrami i petlje važni su dijelovi jezika visokog nivoa. Ovi koncepti i više pomoći će vam reći mašini mnogo stvari kratkim, sažetim izjavama.

Ako asemblerski jezik ima skoro ujednačenu korespondenciju između svojih instrukcija i instrukcija mašinskog koda, jezik višeg nivoa može poslati desetine instrukcija sa jednim redom koda.

Važno je napomenuti da "programski jezici visokog nivoa" mogu uključivati ​​sve apstraktnije od asemblerskog jezika.

Koji jezik učiti: niži ili viši?

Ovo je svakako uobičajeno pitanje među novim programerima i programerima početnicima. Koje je programske jezike bolje naučiti: viši ili niži nivo? Kao što je slučaj sa mnogim programskim pitanjima, pitanje programskih jezika visokog i niskog nivoa nije tako jednostavno.

Obje vrste jezika imaju važne prednosti. Jezici niskog nivoa, pošto zahtevaju malo tumačenja od strane računara, obično su veoma brzi. I daju programerima veliku kontrolu nad skladištenjem podataka, memorijom i pronalaženjem podataka.

Međutim, jezici visokog nivoa su intuitivni i omogućavaju programerima da pišu kod mnogo efikasnije. Ovi jezici se također smatraju "sigurnijim" jer postoji više mjera zaštite koje sprječavaju kodera da izda loše napisane naredbe koje mogu uzrokovati štetu. Ali ne daju programerima istu kontrolu nad procesima niskog nivoa.

Imajući to na umu, evo liste popularnih jezika na skali od niskog do visokog:

  • JavaScript
  • Python

Naravno, ovo je donekle subjektivno. I uključuje samo mali dio dostupnih jezika.

Ali ovo bi vam trebalo dati neku ideju o tome na kojem su nivou jezici koji vas zanimaju.

sta zelis da radis?

Kada odlučujete koji jezik ćete učiti, vaše prvo pitanje bi trebalo da bude: šta želite da programirate?

Ako želite da programirate operativne sisteme, kernele ili bilo šta što je potrebno za rad na maksimalnoj brzini, jezik nižeg nivoa mogao bi biti dobar izbor. Većina Windowsa, OS X i Linuxa napisana je na jezicima izvedenim iz C i C, kao što su C++ i Objective-C.

Mnoge moderne aplikacije su napisane na jezicima višeg nivoa ili čak na jezicima specifičnim za domene. Python i Ruby su posebno popularni za web aplikacije, iako HTML5 postaje sve moćniji. Jezici kao što su Swift, C#, JavaScript i SQL imaju svoje prednosti i slabosti.

Nedavno sam pročitao temu na forumu za programiranje i naišao na zanimljiv prijedlog: učite oba nivoa odjednom. Dobićete dublje razumevanje tipova apstrakcija koje jezik višeg nivoa čine efikasnijim.

Naravno, učenje dva jezika u isto vrijeme nije lako, pa biste ih možda trebali malo rastegnuti. A odabir dva jezika koja su najsličnija može biti od pomoći.

Opet, vraćamo se na ono o čemu sam ranije govorio: izaberite jezik na osnovu onoga što želite da radite. Uradite neko istraživanje kako biste saznali koje jezike ljudi koriste u svom polju. Zatim koristite ove informacije da odaberete jezik visokog i niskog nivoa i počnite da ih učite.

Uskoro ćete vidjeti paralele i steći ćete mnogo dublje razumijevanje kako programiranje funkcionira.

Fokusirajte se na cilj, a ne na sredstva

Postoji mnogo kriterija koje možete koristiti za odabir programskog jezika. Jedan od kriterijuma je visok i nizak nivo. Ali u skoro svakom slučaju, kriterijum koji treba da koristite je ono što želite da programirate.

Vaš projekat bi mogao imati koristi od jezika niskog nivoa. Ili može biti mnogo efikasnije na visokom nivou. Morate sami odabrati pravi alat za posao. Usredsredite se na svoj cilj i svaki put izaberite pravi jezik.

Imate li iskustva sa jezicima visokog i niskog nivoa? Da li više volite jedno od drugog? Podijelite svoja razmišljanja u komentarima ispod!

Uvođenje računara u sve sfere ljudske djelatnosti zahtijeva od stručnjaka različitih profila da ovladaju vještinama korištenja računarske tehnologije. Povećava se stepen obučenosti studenata koji se već od prvih kurseva upoznaju sa upotrebom računara i najjednostavnijim numeričkim metodama, a da ne govorimo o činjenici da upotreba računarske tehnologije u predmetnim i diplomskim projektima postaje norma. na velikoj većini univerziteta.

Kompjuterska tehnologija se danas koristi ne samo u inženjerskim proračunima i ekonomiji, već iu tradicionalno nematematičkim specijalnostima kao što su medicina, lingvistika i psihologija. S tim u vezi, može se konstatovati da je upotreba računara postala široko rasprostranjena. Pojavila se velika kategorija stručnjaka - korisnika računara kojima su potrebna znanja o upotrebi računara u svojoj industriji - vještine rada sa postojećim softverom, kao i kreiranje vlastitog softvera prilagođenog rješavanju određenog problema. I ovdje opisi programskih jezika dolaze u pomoć korisniku.

2. Šta je programski jezik

Programski jezik- formalni sistem znakova dizajniran da opiše algoritme u obliku koji je pogodan za izvođača (na primjer, kompjuter). Programski jezik definiše skup leksičkih, sintaksičkih i semantičkih pravila koja se koriste u kompajliranju kompjuterskog programa. Omogućava programeru da tačno odredi na koje će događaje računar reagovati, kako će podaci biti pohranjeni i prenošeni, i koje tačno radnje treba izvršiti na njima u različitim okolnostima.

Od stvaranja prvih programabilnih mašina, čovečanstvo je smislilo više od dve i po hiljade programskih jezika. Svake godine njihov broj se popunjava novim. Neke jezike koristi samo mali broj vlastitih programera, drugi postaju poznati milionima ljudi. Profesionalni programeri ponekad koriste više od deset različitih programskih jezika u svom radu.

Tvorci jezika različito tumače koncept. programski jezik. Među uobičajenim mjestima koja prepoznaje većina programera su sljedeća:

· Funkcija: programski jezik je dizajniran za pisanje kompjuterskih programa koji se koriste za prenos instrukcija do računara za izvršenje određenog računarskog procesa i organizaciju upravljanja pojedinačnim uređajima.

· zadatak: Programski jezik se razlikuje od prirodnih jezika po tome što je dizajniran da prenosi komande i podatke od osobe do računara, dok se prirodni jezici koriste samo za komunikaciju među ljudima. U principu, može se generalizirati definicija "programskih jezika" - ovo je način prenošenja naredbi, naredbi, jasan vodič za akciju; dok ljudski jezici služe i za razmjenu informacija.

· Izvođenje: Programski jezik može koristiti posebne konstrukcije za definiranje i manipulaciju strukturama podataka i kontrolu procesa izračunavanja.

3. Faze rješavanja problema na računaru.

Najefikasnija primjena VT pronađena je u izvođenju radno intenzivnih proračuna u naučnim istraživanjima i inženjerskim proračunima. Prilikom rješavanja problema na računaru, glavna uloga i dalje pripada čovjeku. Mašina izvršava svoje zadatke samo prema razvijenom programu. ulogu čovjeka i mašine je lako razumjeti ako se proces rješavanja problema razloži na dolje navedene korake.

Formulacija problema. Ova faza se sastoji u smislenoj (fizičkoj) formulaciji problema i utvrđivanju konačnih rješenja.

Konstrukcija matematičkog modela. Model mora ispravno (adekvatno) opisati osnovne zakone fizičkog procesa. Izgradnja ili odabir matematičkog modela od postojećih zahtijeva duboko razumijevanje problema i poznavanje relevantnih dijelova matematike.

Razvoj Svjetskog prvenstva. Pošto računar može da izvodi samo najjednostavnije operacije, on "ne razume" iskaz problema, čak ni u matematičkoj formulaciji. Da bi se to riješilo, mora se pronaći numerička metoda koja omogućava da se problem svede na neki računski algoritam. U svakom konkretnom slučaju potrebno je izabrati odgovarajuće rješenje od već razvijenih standardnih.

Razvoj algoritma. Proces rješavanja problema (proces računanja) zapisuje se kao niz elementarnih aritmetičkih i logičkih operacija koji dovodi do konačnog rezultata i naziva se algoritam za rješavanje problema.

Programiranje. Algoritam za rešavanje problema napisan je mašinski razumljivim jezikom u obliku precizno definisanog niza operacija – programa. Proces se obično obavlja uz pomoć nekog srednjeg jezika, a njegov prevod obavlja sama mašina i njen sistem.

Otklanjanje grešaka programa. Sastavljeni program sadrži razne vrste grešaka, netačnosti i propusta. Otklanjanje grešaka uključuje kontrolu programa, dijagnostiku (pretragu i utvrđivanje sadržaja) grešaka i njihovo otklanjanje. Program se testira na rješavanju kontrolnih (testnih) zadataka kako bi se steklo povjerenje u pouzdanost rezultata.

Izvođenje proračuna. U ovoj fazi pripremaju se početni podaci za proračune i proračun se vrši prema debagovanom programu. Istovremeno, kako bi se smanjio ručni rad u obradi rezultata, mogu se široko koristiti pogodni oblici izdavanja rezultata u obliku tekstualnih i grafičkih informacija, u obliku razumljivom ljudima.

Analiza rezultata. Rezultati proračuna se pažljivo analiziraju i izrađuje naučno-tehnička dokumentacija.

4. Čemu služe programski jezici?

Proces rada računara se sastoji u izvršavanju programa, odnosno skupa dobro definisanih instrukcija po dobro definisanom redosledu. Mašinski oblik komande, koji se sastoji od nula i jedinica, pokazuje kakvu radnju centralni procesor treba da izvrši. To znači da da biste računaru rekli redosled radnji koje mora da izvrši, morate da postavite redosled binarnih kodova za odgovarajuće komande. Programi mašinskog koda sastoje se od hiljada instrukcija. Pisanje takvih programa je težak i dosadan zadatak. Programer mora zapamtiti kombinaciju nula i jedinica binarnog koda svakog programa, kao i binarne kodove adresa podataka koji se koriste u njegovom izvršavanju. Mnogo je lakše napisati program na nekom jeziku bližem prirodnom ljudskom jeziku, a kompjuteru povjeriti zadatak da ovaj program prevede u mašinske kodove. Tako su nastali jezici dizajnirani posebno za pisanje programa - programski jezici.

Postoji mnogo različitih programskih jezika. Zapravo, bilo koji od njih možete koristiti za rješavanje većine problema. Iskusni programeri znaju koji jezik je bolje koristiti za rješavanje svakog konkretnog problema, jer svaki jezik ima svoje mogućnosti, orijentaciju na određene vrste zadataka, svoj način opisivanja koncepata i objekata koji se koriste u rješavanju problema.

Čitav skup programskih jezika može se podijeliti u dvije grupe: jezici niskog nivoa i jezici visokog nivoa.

Jezici niskog nivoa uključuju asemblerske jezike (od engleskog toassemble - sastaviti, sastaviti). Asemblerski jezik koristi simbole za uputstva koja su laka za razumevanje i za pamćenje. Umjesto niza kodova binarnih naredbi, ispisuju se njihove simboličke oznake, a umjesto binarnih adresa podataka koji se koriste prilikom izvršavanja naredbe, upisuju se simbolički nazivi ovih podataka koje bira programer. Jezik asemblera se ponekad naziva mnemocode ili autocode.

Većina programera koristi jezike visokog nivoa za pisanje programa. Kao i običan ljudski jezik, takav jezik ima svoju abecedu - skup simbola koji se koriste u jeziku. Ovi simboli čine takozvane ključne riječi jezika. Svaka od ključnih riječi obavlja svoju funkciju, kao što u jeziku na koji smo navikli riječi sastavljene od slova abecede ovog jezika mogu obavljati funkcije različitih dijelova govora. Ključne riječi su povezane jedna s drugom u rečenicama prema određenim sintaksičkim pravilima jezika. Svaka rečenica definiše neki niz radnji koje računar mora izvršiti.

Jezik visokog nivoa deluje kao posrednik između osobe i računara, omogućavajući osobi da komunicira sa računarom na njemu poznatiji način. Često takav jezik pomaže u odabiru prave metode za rješavanje problema.

Prije pisanja programa na jeziku visokog nivoa, programer mora napisati algoritam rješavanje problema, odnosno akcioni plan korak po korak koji treba dovršiti da bi se ovaj problem riješio. Stoga se često nazivaju jezici koji zahtijevaju preliminarnu kompilaciju algoritma algoritamski jezici.

Postoji mnogo načina da se izmeri popularnost programskog jezika. Ali vjerujemo da je analiza potražnje za specijalistima najtačnija. Programerima jasno pokazuje vještine koje su im potrebne da poboljšaju izglede za karijeru.

Analizirali smo oglase za posao objavljene na Indeed.com kako bismo identificirali sedam najtraženijih programskih jezika u 2018. Neki jezici, kao što su Swift i Ruby, nisu ušli u prvih sedam jer su manje popularni kod poslodavaca.

Potražnja za Javom u 2018. smanjena je za oko 6.000 radnih mjesta u odnosu na 2017. Ali ovaj programski jezik je i dalje popularan. Javu koriste milioni programera i milijarde uređaja širom svijeta više od 20 godina. Može da radi na bilo kom hardveru i operativnom sistemu preko Java virtuelne mašine.

Sve Android aplikacije su bazirane na Javi. 90% kompanija sa liste Fortune 500 koristi Javu kao svoj programski jezik na strani servera.

2.Python

Python je postao popularan za oko 5.000 oglasa za posao. To je programski jezik opće namjene koji se koristi za web razvoj. Takođe se široko koristi u naučnom računarstvu i rudarenju podataka. Konstantna potražnja za programerima mašinskog učenja pokreće potražnju za Pythonom.

3.JavaScript

JavaScript je danas jednako popularan kao i 2017. godine. Ovaj programski jezik koristi više od 80% programera i 95% svih sajtova za izgradnju dinamičkih elemenata na web stranicama. Brojni front-end JavaScript okviri kao što su React i AngularJS imaju veliki potencijal. IoT i mobilni uređaji postaju sve popularniji, pa sumnjamo da ćemo uskoro vidjeti pad potražnje za JavaScript programerima.

4. C++

Potražnja za C++ se malo promijenila od 2017. Ovaj programski jezik se koristi za kreiranje sistemskog/aplikativnog softvera, razvoj igara, drajvera, klijent-server aplikacija. Mnogi programeri smatraju da je C++ složeniji od programskih jezika kao što su Python ili JavaScript. Ali još uvijek se koristi u mnogim naslijeđenim sistemima u velikim preduzećima.

5.C#

Popularnost C# (izgovara se "C oštro") ove godine je neznatno opala. C# je objektno orijentisani programski jezik dizajniran za razvoj na Microsoft .NET platformi.

C# se, kao i C++, koristi u razvoju video igrica, tako da bi programeri početnici trebali naučiti oba jezika odjednom.

6 PHP

Ovaj programski jezik na strani servera popeo se na šesto mjesto na našoj ljestvici (u odnosu na prošlu godinu). Većina programera koristi PHP za implementaciju funkcija koje HTML ne podržava. Takođe za interakciju sa MySQL bazama podataka.

7. Biser

Potražnja za Perlom je pala za oko 3.000 radnih mjesta, a on je ostao na sedmom mjestu na našoj ljestvici. Perl je i dalje popularan među sistemskim i mrežnim administratorima.

Pogled u budućnost

Ovo su programski jezici koji još nisu uključeni u našu ocjenu. Ali 2018. godine postali su popularniji. Pratite ih i ubuduće!

  • Swift: Programski jezik za iOS i macOS koji je Apple objavio 2014. godine, broj 14 na našoj rang listi. To je zato što mnogi poslovi programera navode zahtjeve kao "iOS" bez specificiranja određenog jezika. Swift stalno dobija na popularnosti.
  • R: zauzeo je 11. mjesto u našem rejtingu. Ali očekujemo da će ovaj programski jezik skočiti u nebo za nekoliko godina. Stiče popularnost, kako na međunarodnim rang listama, tako i u Sjedinjenim Državama. Rast potražnje za R programerima je posljedica sve veće upotrebe jezika u analizi podataka.
  • Rust : Iako Rust nije visoko rangiran na našoj ljestvici, prema Google Trends, on se stalno razvija.

Ostale tehnologije kojih treba biti svjestan

Dolje navedene tehnologije nisu formalno programski jezici. Ali oni su uključeni u listu zahtjeva koje poslodavci nameću programerima.

  • SQL: Standardni jezik upita dizajniran za pohranu i obradu informacija u bazama podataka. SQL znanje je veoma traženo među poslodavcima. Pominje se u više od 30 hiljada slobodnih radnih mjesta.
  • .NET: Microsoftova platforma za razvoj desktop, mobilnih i web aplikacija. Koriste ga programski jezici kao što su C#, Visual Basic i F#. A implementacija tehnologije na više platformi proširuje .NET za iOS, Linux i Android.
  • Čvor: Okruženje otvorenog koda koje vam omogućava da pokrenete JavaScript kod na strani servera. Ovo pruža mogućnost korištenja jednog programskog jezika za cijelu web aplikaciju. Preporučujemo da odvojite malo vremena da naučite Node.js.
  • MEAN : MEAN stek (MongoDB, ExpressJS, AngularJS i Node.js) je rangiran na 18. mjestu u našoj rang listi. Korištenje steka vam omogućava da kreirate punopravne JavaScript aplikacije. Učenje MEAN-a će pružiti osnovu za razvoj na jednom od najpopularnijih programskih jezika na svijetu.

Prijevod članka „7 najtraženijih programskih jezika u 2018.“ je pripremio prijateljski projektni tim.

Dobro loše

Programer William W. Vold kaže

Proteklih šest mjeseci radio sam na programskom jeziku (PL) koji se zove Pinecone. Neću riskirati da ga nazovem potpunim, ali već je upotrebljiv - sadrži dovoljno elemenata za to, kao što su varijable, funkcije i korisnički definirane strukture podataka. Ako želite to provjeriti prije čitanja, predlažem da posjetite službenu stranicu i spremište na GitHubu.

Uvod

Ja nisam stručnjak. Kada sam započeo ovaj projekat, nisam imao pojma šta radim, a ni dalje ne znam. Nikada nisam namjerno proučavao principe stvaranja jezika - samo sam čitao neke materijale na webu i čak u njima nisam našao skoro ništa korisno za sebe.

Međutim, napisao sam potpuno novi jezik. I on radi. Mora da radim nešto kako treba.

U ovom članku pokušat ću pokazati kako Pinecone (i drugi programski jezici) pretvara izvorni kod u ono što mnogi smatraju magijom. Također ću se fokusirati na situacije u kojima sam morao napraviti kompromis i objasniti zašto sam donio odluke koje sam donio.

Tekst baš i ne tvrdi da je potpuni vodič za kreiranje programskog jezika, ali za radoznale će biti dobra polazna tačka.

Prvi koraci

"Odakle početi?" je pitanje koje drugi programeri često postavljaju kada saznaju da pišem na svom jeziku. U ovom dijelu ću pokušati da na njega detaljno odgovorim.

Sastavljeno ili interpretirano?

Kompajler analizira program kao celinu, pretvara ga u mašinski kod i sprema ga za kasnije izvršavanje. Interpretator analizira i izvršava program red po red u realnom vremenu.

Tehnički, bilo koji jezik se može kompajlirati i interpretirati. Ali za svaki jezik, jedna od metoda je prikladnija od druge, a izbor paradigme u ranoj fazi određuje daljnji dizajn. U opštem smislu, interpretacija je fleksibilna i kompilacija obezbeđuje visoke performanse, ali ovo je samo vrh veoma složene teme.

Želeo sam da stvorim jednostavan, ali efikasan jezik, što je retkost, pa sam od samog početka odlučio da napravim Pinecone kompilibilnim. Ipak, Pinecone ima i tumača - u početku je lansiranje bilo moguće samo uz njegovu pomoć, kasnije ću objasniti zašto.

Bilješka. transl. Usput, imamo kratak pregled - ovo je odlična vježba za one koji uče Python.

Izbor jezika

Neka vrsta meta-koraka: sam programski jezik je program koji mora biti napisan na nekom jeziku. Odabrao sam C++ zbog njegovih performansi, bogatog skupa funkcija i jednostavno zato što mi se sviđa.

Ali općenito, savjeti se mogu dati ovako:

  • tumačio PL Preporučujepisati na kompajliranom PL (C, C++, Swift). U suprotnom, kazna za performanse će se grudvati dok meta interpretator tumači vašeg prevodioca;
  • sastavio PL možeš pisati u interpretiranom PL (Python, JS). Vrijeme kompilacije će se povećati, ali ne i vrijeme izvršenja programa.

arhitektonsko projektovanje

Struktura programskog jezika ima nekoliko koraka od izvornog koda do izvršne datoteke, od kojih svaki formatira podatke na određeni način, kao i funkcije za kretanje između ovih koraka. Razgovarajmo o ovome detaljnije.

Leksički analizator/lexer

Niz izvornog koda se propušta kroz lekser i pretvara u listu tokena.

Prvi korak u većini PL je leksička analiza. Jednostavno rečeno, to je podjela teksta na tokene, odnosno jedinice jezika: varijable, nazive funkcija (identifikatore), operatore, brojeve. Dakle, dostavljanjem stringa sa izvornim kodom lekseru, dobićemo listu svih tokena koje sadrži kao izlaz.

Reference na izvorni kod se više neće javljati u sljedećim fazama, tako da lekser mora pružiti sve potrebne informacije za njih.

Flex

Kada sam stvarao jezik, prvo što sam uradio je da napišem lekser. Kasnije sam proučavao alate koji bi mogli olakšati leksičku analizu i smanjiti broj grešaka.

Jedan od glavnih takvih alata je Flex, generator leksičkog analizatora. Uzima datoteku s opisom gramatike jezika kao ulaz, a zatim kreira C program, koji zauzvrat analizira string i proizvodi željeni rezultat.

Moja odluka

Odlučio sam da zadržim analizator koji sam napisao. Na kraju, nisam vidio nikakve posebne prednosti za Flex, a njegovo korištenje bi samo stvorilo dodatne ovisnosti koje komplikuju proces izgradnje. Osim toga, moj izbor pruža veću fleksibilnost - na primjer, možete dodati operator jeziku bez potrebe za uređivanjem više datoteka.

Parser / parser

Lista tokena prolazi kroz parser i pretvara se u stablo.

Sljedeća faza je parser. On transformiše izvorni tekst, odnosno listu tokena (uzimajući u obzir zagrade i redosled operacija), u apstraktno sintaktičko stablo, koje vam omogućava da strukturalno predstavite pravila kreiranog jezika. Sam proces se može nazvati jednostavnim, ali s povećanjem broja jezičnih konstrukcija postaje mnogo složeniji.

Bison

U ovom koraku, također sam razmišljao o korištenju biblioteke treće strane, s obzirom na Bison za generiranje parsera. Sličan je Flex-u na mnogo načina - korisnički fajl sa sintaksnim pravilima je strukturiran pomoću C programa. Ali opet, napustio sam alate za automatizaciju.

Prednosti prilagođenih programa

Sa lekserom, moja odluka da napišem i koristim sopstveni kod (dugačak oko 200 redova) bila je prilično očigledna: volim zagonetke, a i ova je relativno trivijalna. Parser je druga priča: sada je dužina koda za njega 750 redova, a ovo je treći pokušaj (prva dva su bila užasna).

Međutim, odlučio sam da sam napravim parser. Evo glavnih razloga:

  • minimiziranje promjene konteksta;
  • pojednostavljenje montaže;
  • spremnost da stvari rade sami.

U svrsishodnost rješenja uvjerila me je izjava Waltera Brighta (tvorca D jezika) u jednom od njegovih članaka:

Ne bih preporučio korišćenje generatora leksera i parsera, kao ni drugih takozvanih "kompajlera". Pisanje leksera i parsera neće oduzeti mnogo vremena, a korištenje generatora će vas čvrsto vezati za njega u budućem radu (što je važno kada prenosite kompajler na novu platformu). Osim toga, generatori su poznati po izdavanju nebitnih poruka o grešci.

Apstraktni semantički graf

Prelazak sa stabla sintakse na semantički graf

U ovom dijelu implementirao sam strukturu koja je u suštini najbliža "međureprezentaciji" (intermediate representation) u LLVM-u. Postoji mala, ali važna razlika između apstraktnog sintaksnog stabla (AST) i apstraktnog semantičkog grafa (ASG).

ASG protiv ASD

Grubo govoreći, semantički graf je stablo sintakse sa kontekstom. Odnosno, sadrži informacije poput toga koji tip funkcija vraća ili gdje se koristi ista varijabla. Budući da graf treba da prepozna i zapamti sav ovaj kontekst, kodu koji ga generiše potrebna je podrška u obliku mnogih različitih tabela sa objašnjenjima.

lansirati

Jednom kada je grafikon postavljen, pokretanje programa postaje prilično jednostavan zadatak. Svaki čvor sadrži implementaciju funkcije koja uzima neki ulaz, radi ono što je programirana (uključujući moguće pozivanje pomoćnih funkcija) i vraća rezultat. Ovo je tumač u akciji.

Opcije kompilacije

Možda se pitate odakle je došao tumač ako sam prvobitno definisao Pinecone kao kompajlirani jezik. Poenta je da je kompilacija mnogo komplikovanija od interpretacije - ranije sam spomenuo da sam naišao na neke probleme u ovom koraku.

Napišite svoj kompajler

U početku mi se svidjela ova ideja - volim da radim stvari sam, osim toga, dugo sam želio naučiti asemblerski jezik. Ali stvaranje višeplatformskog kompajlera od nule je teže od pisanja mašinskog koda za svaki element jezika. Smatrao sam da ova ideja apsolutno nije praktična i nije vrijedna utrošenih resursa.

Programski jezici se dijele u 2 klase:

  1. Mašinski ili mašinski orijentisan (nizak nivo)
  2. algoritamski (visoki nivo)

Jezik niskog nivoa je specifičan za određeni tip procesora i napisan je u mašinskim kodovima (0 ili 1). Ovaj jezik je razumljiv kompjuteru, ali nije razumljiv ljudima. Na primjer, asemblerski jezik

Programski jezici visokog nivoa- napisane su engleskim riječima i frazama. Odnosno, takav jezik je razumljiv za osobu, ali

kompjuter ne razume. Ove jezike je potrebno prevesti u mašinske kodove. Za to se koriste prevodioci. Dijele se na:

  1. Kompajleri - odmah prevode izvorni kod programa na jezik mašinskih kodova. Nakon toga se formira batch fajl (.exe ili .com) i sam originalni program više nije potreban.
  2. Tumači - prevode izvorni kod programa u korake. I svaki put se na početku obraćajte izvornom tekstu. Veoma zgodno za otklanjanje grešaka u programima.

Postoji i koncept „povezivanja“ programa, odnosno prikupljanja kompajliranih elemenata u jedan programski modul

Faze kompjuterske simulacije:

  1. Postavljanje problema i definicija objekta modeliranja
  2. Izrada konceptualnog modela, identifikacija glavnih elemenata i njihovih odnosa
  3. Formalizacija i prelazak na model
  4. Kreiranje algoritma i pisanje programa
  5. Planiranje i izvođenje kompjuterskih eksperimenata
  6. Analiza i interpretacija rezultata

niz odnosi se na kompozitne tipove podataka. Elementu niza se pristupa po imenu niza i broju elementa. Elementi niza u memoriji računara sortirani su uzlaznim redosledom indeksa.

Varijabilni atributi u programskim jezicima: ime, adresa, vrijednost i tip

Kriteriji kvaliteta softverski sistemi: pouzdanost, ispravnost, razumljivost, fleksibilnost, efikasnost

Programski jezici :

Perl - skript jezik

Ne postoji složen tip podataka u proceduralnim programskim jezicima

Java virtuelna mašina - tumač

Prolog je logički programski jezik koji je tumač

JavaSCRIPT - skriptni jezik

SQL je jezik za manipulaciju podacima koji se koristi za dohvaćanje, umetanje i brisanje informacija u relacijskim bazama podataka.

Deklarativni programski jezici uključuju logičke jezike

HTML i XML - jezici za označavanje podataka

C - jezik koji se koristi za strukturirano programiranje

Glavni elementi objektno orijentisanog programiranje su:

  1. Klasa
  2. Objekat - instanca klase
  3. Događaj koji se dešava objektu
  4. Metoda koja se izvršava na objektu
  5. Nekretnina

Osnovni koncepti objektno orijentisanog programiranja su:

  1. Polimorfizam - upotreba jednog imena za specifikaciju akcija koje su zajedničke za klasu, što znači sposobnost objekata da izaberu internu metodu na osnovu tipa podataka
  2. Nasljeđivanje je OOP svojstvo koje se može modelirati korištenjem taksonomske klasifikacijske sheme (hijerarhije)
  3. Enkapsulacija - znači mogućnost enkapsulacije procedura za rad sa objektom u zasebnom modulu

Osnova metode strukturirano programiranje su: (programiranje odozgo prema dolje)

Na drugi način, ovo je programiranje bez “GoTo”

  1. Koristeći kompoziciju od tri osnovna elementa: grananja, linearne strukture i ciklusa
  2. Korištenje potprograma

Koristeći potprogrami nema potrebe za postizanjem minimalnog broja operatera. Prijenos ulaznih podataka prilikom pozivanja potprograma odvija se pomoću parametara. Pozivaju se parametri navedeni u trenutku kada je potprogram pozvan iz glavnog programa stvarni.

Najpogodniji jezici za sistemsko programiranje su C, C++ i Assembler.

Tokom prevođenja, faza semantičke analize se koristi za provjeru tipova u izrazima.

U fazi raščlanjivanja tokom prevođenja otkrivaju se greške poput „nedostaje tačka i zarez“.