Matrjoška Si. Sustav slojeva programskog jezika

Pokušajmo zamisliti kemiju bez Mendeljejeva periodnog sustava (1869). Koliko je samo elemenata trebalo imati na umu, i to bez određenog reda... (Zatim - 60.)

Da biste to učinili, samo razmislite o jednom ili nekoliko programskih jezika odjednom. Isti osjećaji, isti kreativni kaos.

I sada možemo ponovno proživjeti osjećaje kemičara iz XNUMX. stoljeća kada su im sve svoje znanje, i malo više, ponudili u jednom periodnom sustavu.

Matrjoška Si. Sustav slojeva programskog jezika


Knjiga “Matrjoška C. Slojeviti sustav programskog jezika" prikazuje sve jedinice jezika C na prvi pogled. To vam omogućuje da ih organizirate, ispravite zastarjele podatke, pa čak i razjasnite sam koncept programa.

Danas programske informacije trebaju sistematizaciju više nego kemijski elementi prije 150 godina.

Prva potreba je podučavanje. Mendeljejev je počeo stvarati svoj sustav kada se suočio s pitanjem od kojeg elementa započeti predavanje: O, H, N, He, Au... Ujedno mu je bilo lakše - predavao je kemiju najboljima - studentima Peterburško sveučilište. A programiranje se već uči u školi, a uskoro će početi iu vrtiću.

Druga potreba je znanstveni pristup. Uz pomoć periodnog sustava otkriveni su novi elementi i ispravljeni podaci o starim. Pomogla je u izradi modela atoma (1911.). I tako dalje.

Treća potreba je razjasniti koncept programa.

Moderno programiranje je jednom nogom zapelo u 50-im godinama XNUMX. stoljeća. Tada su programi bili jednostavni, ali su strojevi i strojni jezici bili složeni, pa se sve vrtjelo oko strojeva i jezika.

Sada je sve obrnuto: programi su složeni i primarni, jezici su jednostavni i sekundarni. To se zove primijenjeni pristup, koji je svima poznat. Ali studenti i programeri i dalje su uvjereni da je sve isto.

Što nas vraća na prvo predavanje privatnog doktora Mendeljejeva. Što reći prvašićima? Gdje je istina? To je pitanje.

Knjiga “Matrjoška C” nudi svoj odgovor na to pitanje. Slojeviti sustav programskog jezika". Štoviše, nije upućena samo studentima, već i obučenim programerima, jer oni, odnosno mi, moramo tražiti istinu i mijenjati svjetonazor.

Ono što slijedi je sažetak knjige.

1. uvod

Godine 1969. nastao je jezik C koji je postao temeljni programski jezik i to je ostao punih 50 godina. Zašto je to tako? Prije svega zato što je C primijenjen jezik koji je dao program humano pogledajte umjesto toga mašina. Ovo postignuće osigurali su jezici iz obitelji C: C++, JavaScript, PHP, Java, C# i drugi. Drugo, to je kratak i lijep jezik.

Međutim, sam jezik C obično se miješa sa strojnim asemblerom, čime se komplicira i iskrivljuje njegova percepcija. Druga je krajnost nametanje određene “filozofije” jeziku: proceduralne, predmetne, funkcionalne, kompilirane, interpretirane, tipkane i tako dalje. Ovo dodaje emocije, ali ne pomaže boljem opisivanju jezika.

Istina je u sredini, a za jezik C ona je strogo u sredini između filozofske i strojne percepcije.

Jezik C nije neovisan, on se pokorava običnom pisanom jeziku, au isto vrijeme kontrolira sam asemblerski jezik. Ovaj položaj opisuje Govorni model programa, prema kojem se program dijeli na tri podređene vrste: govor, kod, naredba. Jezik C odgovoran je za drugu, vrstu koda.

Odredivši mjesto jezika u programu, možete organizirati informacije o njemu, što čini Sustav slojevitog programskog jezika, koji predstavlja jezik C u duhu periodnog sustava - na jednoj stranici.

Sustav je izgrađen uzimajući u obzir zajednice primijenjenih jezika, koji proizlaze iz njihove govorne podređenosti. Jedan set Matryoshka C jedinica omogućuje vam da opišete i usporedite različite jezike, stvarajući niz Matryoshka: C++, PHP, JavaScript, C#, MySQL, Python i tako dalje. Dostojno je i ispravno da se različiti jezici opisuju jedinicama temeljnog jezika.

2. POGLAVLJE 1. Govorni model programa. Obriši C

Prvo poglavlje predstavlja govorni model programa, odražavajući primijenjeni pristup. Prema njemu, program ima tri očigledna sekvencijalna tipa:

  1. govor - izravan govor programera koji rješava problem,
  2. kodirano - kodiranje rješenja u matematički oblik u C jeziku (ili bilo kojem drugom)
  3. i naredba - izravne strojne naredbe.

Govorni model objašnjava zašto je C jednostavan i razumljiv jezik. Xi je izgrađen na sliku i priliku ljudskog govora koji nam je poznat.

Prva vrsta programa je izravni govor programera. Govor odgovara ljudskom mišljenju. Programeri početnici pišu programe koristeći govor - prvo na ruskom, a zatim korak po korak prevodeći radnje u jezik koda. A upravo po tom uzoru nastao je jezik C.

Zaključci programera, izraženi govorom, pretvaraju se u kodirani numerički oblik. Ovu transformaciju treba nazvati odraz, budući da govor i kod imaju istu prirodu (odraz - rođenje - rod). To je sasvim očito ako usporedimo govorni (lijevo) i kodni (desno) tip programa.

Matrjoška Si. Sustav slojeva programskog jezika

Zanimljivo je da se refleksija događa vrlo jednostavno - sa samo dvije vrste izraza.

Međutim, moderni opis jezika C (iz 1978.) ne sadrži dovoljan popis imena ni za opis jezika općenito, niti za zadatak refleksije posebno. Stoga smo prisiljeni biti kreativni i uvesti ova imena.

Izbor riječi mora biti precizan i jasan. To je zahtijevalo poseban pristup, ukratko izražen na sljedeći način: stroga uporaba domaćeg jezika. Za Engleze bi to bili Englezi, ali mi nismo Englezi. Pa ćemo koristiti ono što imamo i pokušati govoriti ruski.

Refleksiju izvode dvije vrste izraza:

  1. računanje (HF) - odražava promjenu svojstava objekta. Svojstvo objekta izražava se brojem, tada je radnja nad svojstvom radnja nad brojem – operacija.
  2. podređenosti (Pch) - odražava promjenu redoslijeda radnji. Prototip Pch je govorna složena rečenica, stoga većina vrsta Pch počinje podređenim veznicima "ako", "inače", "dok", "za". Druge vrste računala ih nadopunjuju.

Usput, možete li vjerovati da u C opisu ne postoji naziv za računske izraze - oni se jednostavno zovu "izrazi"? Nakon ovoga više neće čuditi nepostojanje naziva i asocijacije za vrstu podređenosti, kao i oskudnost naziva, definicija i uopće generalizacija. To je zato što poznati K/R ("Jezik C", Kernighan/Ritchie, 1978.) nije opis, već vodič za korištenje jezika.

Međutim, ipak bih želio imati opis jezika. Stoga mu se nudi Sustav slojevitog programskog jezika.

3. POGLAVLJE 2. Sustav slojeva. Ukratko C

Svaki opis mora biti točan i krajnje sažet. U slučaju programskog jezika, frontalni opis je težak.

Evo imamo program. Sastoji se od modula. Moduli se sastoje od potprograma i kolekcija (struktura). Potprogrami se sastoje od pojedinačnih izraza: deklaracija, izračuna, podređenosti. Postoji čak deset vrsta podređenosti. Podređenost povezuje podrazine i potprograme. Tu je i nekoliko reklama. Međutim, deklaracije nisu uključene samo u potprograme i podrazine, već iu module i zbirke. A većina se izraza sastoji od riječi koje je toliko teško opisati da su obično jednostavno navedene u dva popisa - izvornih i izvedenih riječi, s kojima ćete se upoznati tijekom učenja i upotrebe jezika. Dodajmo ovome interpunkcijske znakove i niz drugih izraza.

U takvoj prezentaciji nije lako razabrati tko je na koga stao.

Izravni hijerarhijski pristup opisivanju jezika bio bi previše složen. Zaobilazno pretraživanje vodi do opisa jezika na temelju njegove govorne prirode i naredbene strane. Tako je rođen sustav slojeva, koji se djelomično podudara s periodnim sustavom Mendeljejeva, koji je također prometovati. Kako se pokazalo 42 godine nakon objave (1869.), periodičnost sustava povezana je s elektroničkim slojevi (1911., Bohr-Rutherfordov model atoma). Također, Slojeviti i Periodni sustav slični su po tabelarnom rasporedu svih jedinica na jednoj stranici.

Opis jezičnih jedinica je kratak - samo 10 vrsta izraza i 8 vrsta ostalih jedinica, kao i smislene i vizualne. Iako neobično za prvo upoznavanje.

Jezične jedinice podijeljene su u 6 razina:

  1. jedinice - redovi tablice
  2. odjeli - posebne skupine rodova (dijelovi prvog reda)
  3. rod - stanice (glavna razina diobe)
  4. superspecies - separatori vrsta (rijetka razina)
  5. tipovi - formule jedinice na dnu ćelije ili zasebno
  6. uzorci - same jedinice (samo za riječi)

Ogledne riječi opisuju rječnik - zaseban podsustav sastavljen od istih šest razina.

Govorna komponenta jezika C prilično je očita, iako još uvijek zaslužuje opis. Ali naredbeni dio jezika upravo je vezan za kontrolu kompilacije, pri čemu se stvara treća vrsta programa - naredba. Ovdje dolazimo do najuzbudljivijeg aspekta jezika C: ljepote.

4. SLJEDEĆA POGLAVLJA. Zgodni Si

Jezik C je osnova modernog programiranja. Zašto? Prvo, zbog najveće korespondencije s govorom. Drugo, jer je lijepo zaobišao ograničenja strojne obrade brojeva.

Što je točno Xi predložio? Slika i sloj.

Riječ "slika" je prijevod engleske riječi "type", koja dolazi od grčke riječi "prototype" - "tip". U ruskom jeziku riječ "tip" ne predstavlja temelj koncepta koji se izražava; štoviše, brka se s pomoćnim značenjem "tip".

U početku, slika je rješavala čisto problem strojnog izračuna, a zatim je postala pista za rađanje objektnih jezika.

Sloj je odmah riješio nekoliko problema - i strojno i naneseno. Stoga će razmatranje započeti slikom s jednim zadatkom i prijeći na sloj s više zadataka.

Jedna od neugodnih značajki povijesnog programiranja je da je većina pojmova, uključujući i one osnovne, dana bez definicija. “Programski jezik (ime rijeka) ima integer i floating number type...” i zagrebali su dalje. Nije potrebno definirati što je to “tip” (slika), jer ni sami autori to ne razumiju u potpunosti i prešutjet će “radi jasnoće”. Ako se zakače za zid, dat će nejasnu i beskorisnu definiciju. Uvelike pomaže skrivanje iza stranih riječi: za ruske autore - iza engleskog (tip), za Engleze - iza francuskog (podrutina), grčkog (polimorfizam), latinskog (inkapsulacija) ili njihovih kombinacija (ad-hoc polimorfizam).

Ali to nije naša sudbina. Naš izbor su definicije s podignutim vizirom na čistom ruskom.

slika

slika je prefigurativni naziv veličine, definirajući 1) intrinzična svojstva količine i 2) izbor operacija za količinu.

Riječ “tip” (vrsta) odgovara prvom dijelu definicije: “intrinzična svojstva veličine”. Ali glavno značenje slike je u drugom dijelu: "odabir operacija na količine."

Polazna točka za uvođenje slike u C je normalan izračun, kao što je operacija zbrajanja.

Papir Matematika, bilo da je pisana rukom ili tiskana, ne pravi veliku razliku između vrsta brojeva, obično pod pretpostavkom da su stvarni. Stoga su njihove operacije obrade nedvosmislene.

Strojna soba Matematika striktno dijeli brojeve na cijele i razlomke. Različite vrste brojeva različito se pohranjuju u memoriju i obrađuju različitim uputama procesora. Na primjer, instrukcije za zbrajanje cijelih brojeva i razlomaka dvije su različite instrukcije koje odgovaraju dvama različitim procesorskim čvorovima. Ali ne postoji naredba za dodavanje argumenata cijelog broja i razlomka.

Primijenjeno matematika, odnosno jezik C, razdvaja vrste brojeva, ali kombinira operacije: zbrajanje za cijele brojeve i/ili razlomke piše se jednim znakom akcije.

Jasna definicija pojma slike omogućuje nam da definitivno govorimo o dva druga pojma: vrijednost и operacija.

Veličina i rad

Vrijednost — broj koji se obrađuje.

Operacija — obrada vrijednosti početnih vrijednosti (argumenata) da bi se dobio konačni broj (ukupno).

Veličina i rad su međusobno povezani. Svaka operacija je količina jer ima numerički rezultat. A svaka vrijednost je rezultat prijenosa vrijednosti u/iz registra procesora, odnosno rezultat operacije. Unatoč tom odnosu, glavna stvar je mogućnost njihovog zasebnog opisa, iako uz ponavljanje jedne riječi u različitim dijelovima rječnika, što se događa u MA3.

Strojni pristup podijelio je sve brojeve koje koristi programer na naredbe и podaci. Ranije su oboje bili brojevi, na primjer, naredbe su bile zapisane u numeričkim kodovima. Međutim, u primijenjenim jezicima naredbe su prestale biti brojevi i postale su riječima и akcijski znakovi. Ostaju samo “podaci” kao brojevi, ali je apsurdno i dalje ih tako nazivati, jer u prijelazu sa strojnog na matematičko gledište, brojevi su veličine koje se dijele s originalom (podaci) i konačni (potreban). "Nepoznat podatak" zvučat će glupo.

Timovi su također bili podijeljeni u dvije vrste akcija: matematičku i servis. Matematičke radnje – operacije. Kasnije ćemo doći na službene stvari.

U jezicima C, uobičajene papirnate i strojne nedvosmislene ili pojedinačne matematičke operacije gotovo univerzalno postaju višestruke.

Višestruke operacije su nekoliko operacija istog imena s različitim tipovima argumenata i različitim, sličnim po značenju, radnjama.

Cjelobrojni argumenti odgovaraju cijeloj operaciji, a frakcijski argumenti odgovaraju frakcijskoj operaciji. Ova razlika je posebno jasna tijekom operacije dijeljenja, kada izraz 1/2 daje ukupno 0, a ne 0,5. Takva notacija ne odgovara pravilima papirnate matematike, ali jezik C ih se ne trudi pridržavati (za razliku od Fortran-a) - igra po svom primijeniti pravila.

U slučaju miješanja cijelih i razlomaka upisuje se jedini točan određivanje vrijednosti argumenata — selektivna transformacija vrijednosti iz jedne slike u drugu. Doista, kada se zbroje cijeli i razlomački broj, rezultat je razlomački, pa je slika operacije pokupi operacija pretvaranja argumenta cijelog broja u vrijednost razlomka.

Ostaje niz operacija pluralI singl. Takve operacije definirane su samo za jednu vrstu argumenata: ostatak dijeljenja - cjelobrojni argumenti, slaganje (bitne operacije) - prirodni cijeli brojevi. Ma3 označava višestrukost operacija sa znakovima (#^) koji označavaju slike za koje je operacija definirana. Ovo je važno, ali prethodno zanemareno svojstvo svake operacije.

Sve su funkcije proizvoljne jedinične operacije. Izuzetak su operateri - funkcije bez zagrada, ugrađen u jezik (izvorne operacije).

Pomoć

Pomoć - radnja koja prati operaciju.

Ako operaciju smatramo glavnom radnjom, onda možemo razlikovati dvije popratne koje osiguravaju operaciju i razlikuju se od nje. To su 1) varijabilna kontrola i 2) podređenost. Ova radnja se zove pomoć.

Ovdje moramo napraviti digresiju i reći odvojeno o ruskim prijevodima udžbenika programiranja. U tekstu K/R uvedena je nova riječ za bilježenje radnji izjava (izraz), koji je pokušao podijeliti koncepte strojnih naredbi na različite radnje: 1) operaciju, 2) deklaraciju i 3) podnošenje (nazvane "kontrolne konstrukcije"). Ovaj pokušaj su pokopali ruski prevoditelji, zamijenivši "izraz" riječju "operator", što:

  1. postala je sinonim za strojnu riječ "naredba",
  2. pokazalo se da je sinonim za frazu "znak akcije",
  3. a također je dobio neograničen broj dodatnih vrijednosti. Odnosno, pretvorio se u nešto slično engleskom članku "uhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh"

Razmotrite popratne radnje, odn pomoć.

Varijabilna kontrola

Varijabilna kontrola (GORE) - stvaranje/brisanje varijabilnih ćelija.
UE se pojavljuje implicitno kada se deklarira varijabla, koja je već napisana iz drugog razloga - da naznači sliku vrijednosti. Eksplicitno se upravlja samo jednim pogledom dodatne varijable pomoću funkcija malloc() i free().

Treba napomenuti da su implicitne radnje prikladnije za pisanje, jer ne zahtijevaju pisanje uopće, ali ih je teže razumjeti - teže ih je uzeti u obzir i protumačiti.

Podređenost

Podređenost — spojite/onemogućite dijelove sloja.

Jezik C ponudio je primijenjenu metodu kontrole redoslijeda radnji, različitu od asemblera - podređenost. Odražava i razvija govorno složenu rečenicu s jasnom podjelom na glavni dio (podređena klauzula) i podređeni dio (podrazina/podprogramski dijelovi).

I deklaracija i podnošenje u potpunosti su izgrađeni na konceptu sloj.

Sloj

Sloj je ograničeni jednorazinski selektivni skup izraza.

Sloj je eksplicitno i implicitno preuzeo nekoliko zadataka odjednom:

  1. organiziranje programa
  2. ograničavanje vidljivosti imena (implicitno),
  3. upravljanje varijablama (memorijske ćelije) (implicitno),
  4. definicija podređenih rečenica za podređenost,
  5. definicije funkcija i odabira i drugo.

Nije postojao koncept sloja u strojnim jezicima, pa se nije pojavio u K/R, a ako nešto nije bilo tamo, onda bi uvođenje toga u sljedećim knjigama bilo krivovjerje i slobodno razmišljanje. Stoga se koncept sloja uopće nije pojavio, iako je iznimno koristan i sasvim očit.

Bez sloja nemoguće je ukratko i jasno objasniti mnoge akcije i pravila programa. Na primjer, zašto je goto jednostavno kao tri kopejke loše, a lukavo while je dobro. Možete samo bespomoćno psovati, kao što je to učinio Dijkstra (“vještina programera je funkcija koja obrnuto ovisi o učestalosti pojavljivanja goto naredbi u njihovim programima.” Ukratko, samo jarci koriste goto. Razina opravdanja je Bog.) Istina, to i nije tako strašno ako vaše knjige Ne moramo ništa objašnjavati, ali, kao što smo već rekli, to nije naša sudbina.

Inače, može se pretpostaviti da je Dan Ritchie goto ostavio upravo kao ključ za traženje nekog neimenovanog pojma, jer u izrazu goto nije bilo potrebe i ljepote. Ali bilo je potrebno jednostavno i razumljivo objašnjenje novih načela jezika, koje sam Richie nije želio dati, a koja se temelje upravo na konceptu sloj.

Odstupanje

Odstupanje — mijenjanje uobičajenih svojstava novog imena.

Najvažnije odstupanje upravo se odnosi na svojstva sloja programa, a opisuje se jednom riječju “statičan”, koja u svakoj vrsti sloja ima drugačije značenje.

5. POSLJEDNJE POGLAVLJE. Zajedništvo primijenjenih jezika

Primijenjeni jezici su figurativno jezici (sa slikom, "tipkano"). Temelje se na eksplicitnoj ili implicitnoj uporabi slike. Štoviše, ovdje se opet pojavljuje kontradikcija: eksplicitna slika je razumljivija, ali manje prikladna, i obrnuto.

Matrjoška Si. Sustav slojeva programskog jezika

(Izgled tablice još nije isporučen, pa je tablica prikazana slikom.)

Nakon C-a, razvoj primijenjenih jezika krenuo je putem povećanja njihove figurativnosti. Najvažniji za razumijevanje visoke slike je izravni potomak jezika C - jezik C++. On razvija ideju proizvoljnog odabira operacija za količine i utjelovljuje je na temelju sintetičkog izraza odabira, koji dobiva novi naziv - objekt. Međutim, C++ nije tako koncizan i izražajan kao C zbog preopterećenosti novim tipovima kolekcija i njima pridruženih pravila. Usput, razgovarajmo o "preopterećenju".

Preopterećenje i polimorfizam

Riječ "preopterećenje" je zastarjeli izraz strojnog učenja za stvaranje više operacija.

Strojni (sistemski) programeri pluralnost operacije bi mogle biti iritantne: “Što ovaj znak (+) znači: zbrajanje cijelih brojeva, zbrajanje razlomaka ili čak pomak?! U naše vrijeme nisu tako pisali!” Otuda i negativna konotacija odabrane riječi (“pretjerati”, “umoran”). Za aplikacijskog programera, višestruke operacije kamen su temeljac, glavno postignuće i nasljeđe jezika C, toliko prirodno da se često ne prepoznaju.

U jeziku C++ pluralnost proširio ne samo na izvorne operacije, već i na funkcije - pojedinačne i kombinirane u klase - metode. S višestrukim metodama došla je i mogućnost njihovog nadjačavanja u proširenim klasama, što je nejasno nazvano "polimorfizam". Kombinacija polimorfizma i preopterećenja proizvela je eksplozivnu smjesu koja se podijelila u dva polimorfizma: "pravi" i "ad-hoc". To je moguće razumjeti samo unatoč dodijeljenim imenima. Put do oglasa popločan je stranim imenima.

Deklaracija oblika "preopterećenje" bolje je izražena riječju dodatna najava — dodavanje deklaracije funkcije istog imena s argumentima različite slike.

Deklaraciju oblika "polimorfizam" je bolje nazvati ponovna objava — preklapajuća deklaracija u novom sloju proširenja funkcije istog naziva s argumentima iste slike.

Tada će biti lako razumjeti da iste metode različitih slika (argumenata) - dodatno najavljeno, i jedna slika - ponovno najavljen.

Ruske riječi odlučuju.

Pista

Razmatranje pojmova visoko figurativnih jezika potvrđuje važnost jasne definicije temeljnih pojmova. S ispravno opisanim jezikom C, učenje visokofigurativnih jezika bit će lako i ugodno.

Ovo je posebno važno za implicitni visoko figurativni jezici (PHP, JavaScript). Za njih važnost objekata (složenih slika) postaje još veća nego u C++-u, ali sam koncept slike postaje implicitan i nedokučiv. S gledišta pogodnosti postali su jednostavniji, ali s gledišta razumijevanja postali su teži.

Stoga biste trebali početi proučavati programske jezike s jezikom C i ići dalje redoslijedom kojim se pojavljuju jezici obitelji C.

Isto vrijedi i za opisivanje jezika. Različiti jezici imaju isti ili manji skup rodova jedinica od jezika C. Broj tipova i uzoraka može se razlikovati u oba smjera: C++ ima više tipova nego C, dok JavaScript ima manje.

MySQL jezik zaslužuje poseban spomen. Čini se da nema ništa zajedničko, ali Matryoshka ga savršeno opisuje, a upoznavanje s njim postaje brže i lakše. Što je važno, s obzirom na njegovu važnost za web - blagovaonicu modernog programiranja. A gdje je MySQL, tu su i drugi SQL-ovi. Pa svakakve Fortran-Pascal-Pythone opisuje i Matryoshka, čim se dočepaju.

Dakle, očekuju nas velike stvari - primijenjeni opis jezika C i objedinjeni opis jezika koji ga prate. “Naši ciljevi su jasni, zadaće definirane. Na posao, drugovi! (Buran, dugotrajan pljesak, koji prelazi u ovacije. Svi ustaju.)"

Vaša će se mišljenja saslušati s velikom pozornošću, vaša pomoć u izradi web stranice s lutkama bit će primljena s velikom zahvalnošću. Potpuniji podaci o knjizi nalaze se na web stranici, vješto skrivenoj u Matryoshka C.

Izvor: www.habr.com

Dodajte komentar