Matryoshka Si. Sistem slojeva programskog jezika

Pokušajmo zamisliti hemiju bez Mendeljejevljevog periodnog sistema (1869). Koliko elemenata je trebalo imati na umu, i to bez posebnog reda... (Onda - 60.)

Da biste to učinili, samo razmislite o jednom ili više programskih jezika odjednom. Isti osjećaji, isti kreativni haos.

I sada možemo ponovo da proživimo osećanja hemičara iz XNUMX. veka kada im je ponuđeno svo svoje znanje, i još malo više, u jednom periodnom sistemu.

Matryoshka Si. Sistem slojeva programskog jezika


Knjiga „Matrjoška C. Slojeviti sistem programskog jezika" predstavlja sve jedinice C jezika na prvi pogled. To vam omogućava da ih organizirate, ispravite zastarjele informacije, pa čak i razjasnite sam koncept programa.

Danas je programskim informacijama potrebna sistematizacija čak i više nego hemijskim elementima prije 150 godina.

Prva potreba je podučavanje. Mendeljejev je počeo da stvara svoj sistem kada se suočio sa pitanjem sa kojim elementom da počne da predaje: O, H, N, He, Au... U isto vreme, bilo mu je lakše - predavao je hemiju najboljima - studentima St. Petersburg University. A programiranje se već uči u školi i uskoro će početi u vrtiću.

Druga potreba je naučni pristup. Uz pomoć periodnog sistema otkriveni su novi elementi i korigovani podaci o starima. Pomogla je u stvaranju modela atoma (1911). I tako dalje.

Treća potreba je da se razjasni koncept programa.

Moderno programiranje je jednom nogom zapelo u 50-im godinama XNUMX. vijeka. Tada su programi bili jednostavni, ali mašine i mašinski jezici su bili složeni, tako da se sve vrtelo oko mašina i jezika.

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

Što nas vraća na prvo predavanje Privatdozenta Mendeljejeva. Šta reći brucošima? Gdje je istina? To je pitanje.

Knjiga "Matrjoška C" nudi svoj odgovor na ovo pitanje. Slojeviti sistem programskog jezika". Štaviše, upućen je ne samo studentima, već i obučenim programerima, jer upravo oni, odnosno mi, moramo tražiti istinu i mijenjati pogled na svijet.

Ono što slijedi je sažetak knjige.

1. Uvod

Godine 1969. stvoren je jezik C, koji je postao osnovni programski jezik i ostao je tako već 50 godina. Zašto je to tako? Prije svega, zato što C jeste primenjeno jezik koji je dao program humane umjesto toga pogledajte mašina. Ovo dostignuće osigurali su jezici iz porodice C: C++, JavaScript, PHP, Java, C# i drugi. Drugo, to je kratak i lijep jezik.

Međutim, sam jezik C se obično miješa sa mašinskim asemblerom, čime se komplikuje i iskrivljuje njegova percepcija. Druga krajnost je nametanje određene “filozofije” jeziku: proceduralne, objektne, funkcionalne, kompajlirane, interpretirane, otkucane itd. Ovo dodaje emocije, ali ne pomaže da se jezik bolje opiše.

Istina je u sredini, a za jezik C je striktno na sredini između filozofske i mašinske percepcije.

C jezik nije nezavisan, on se pokorava običnom pisanom jeziku, a istovremeno kontroliše i sam asemblerski jezik. Ova pozicija opisuje Govorni model programa, prema kojem je program podijeljen u tri podređena tipa: govor, kod, naredba. C jezik je odgovoran za drugi, tip koda.

Nakon što odredite mjesto jezika u programu, možete organizirati informacije o njemu, što čini Slojeviti sistem programskog jezika, koji predstavlja jezik C u duhu periodnog sistema - na jednoj stranici.

Sistem je izgrađen uzimajući u obzir zajednice primenjenih jezika, koje proizilaze iz njihove govorne podređenosti. Jedan set Matryoshka C jedinica omogućava vam da opišete i uporedite različite jezike, stvarajući seriju Matryoshka: C++, PHP, JavaScript, C#, MySQL, Python i tako dalje. Dostojno je i ispravno da se različiti jezici opisuju jedinicama osnovnog jezika.

2. POGLAVLJE 1. Govorni model programa. Jasno C

Prvo poglavlje predstavlja govorni model programa, što odražava primijenjeni pristup. Prema njegovim riječima, program ima tri očigledna uzastopna tipa:

  1. govor - direktni govor programera koji rješava problem,
  2. kodirano - kodiranje rješenja u matematički oblik u jeziku C (ili bilo kojem drugom)
  3. i komande - direktne mašinske komande.

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 direktni 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. I upravo na ovom modelu je nastao C jezik.

Zaključci programera, izraženi u govoru, pretvaraju se u kodirani numerički oblik. Ovu transformaciju treba nazvati refleksija, budući da govor i kod imaju istu prirodu (odraz - rođenje - rod). Ovo je sasvim očigledno ako uporedimo govorni (levo) i kod (desno) tipove programa.

Matryoshka Si. Sistem slojeva programskog jezika

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

Međutim, savremeni opis jezika C (iz 1978.) ne sadrži dovoljan spisak imena ni za opisivanje jezika uopšte, niti za zadatak refleksije posebno. Stoga smo primorani da budemo kreativni i uvedemo ova imena.

Odabir riječi mora biti precizan i jasan. Za to je bio potreban poseban pristup, ukratko izražen ovako: striktna upotreba maternjeg jezika. Za Engleze bi to bilo Englezi, ali mi nismo Englezi. Zato ćemo iskoristiti ono što imamo i pokušati da pričamo ruski.

Refleksija se izvodi pomoću dvije vrste izraza:

  1. obračun (HF) - odražava promjenu svojstava objekta. Svojstvo objekta je izraženo brojem, tada je akcija na svojstvu akcija na broju - operacija.
  2. podređenosti (Pch) - odražava promjenu u redoslijedu radnji. Prototip Pch je govorna složena rečenica, stoga većina tipova Pch počinje podređenim veznicima "ako", "inače", "dok", "za". Druge vrste računara ih dopunjuju.

Usput, možete li vjerovati da u C opisu nema naziva za računske izraze - oni se jednostavno zovu "izrazi"? Nakon ovoga više neće biti iznenađujuće da nema naziva i asocijacije na vrstu podređenosti, a zapravo i oskudnost naziva, definicija i generalizacija općenito. To je zato što poznati K/R (“The C Language”, Kernighan/Ritchie, 1978) nije opis, već vodič za korištenje jezika.

Međutim, ipak bih volio da imam opis jezika. Stoga je on ponuđen Slojeviti sistem programskog jezika.

3. POGLAVLJE 2. Sistem slojeva. Brief C

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

Ovdje imamo program. Sastoji se od modula. Moduli se sastoje od potprograma i kolekcija (struktura). Potprogrami se sastoje od pojedinačnih izraza: deklaracije, proračuni, subordinacija. Postoji čak deset vrsta subordinacije. Subordinacija povezuje podnivoe i potprograme. Postoji i nekoliko reklama. Međutim, deklaracije su uključene ne samo u potprograme i podnivoe, već iu module i kolekcije. A većina izraza sastoji se od riječi koje je toliko teško opisati da se obično jednostavno daju u dvije liste – izvorne i izvedene riječi, s kojima ćete se upoznati tokom učenja i upotrebe jezika. Dodajmo ovome znakove interpunkcije i niz drugih izraza.

U takvoj prezentaciji nije lako shvatiti ko je na koga stao.

Direktan hijerarhijski pristup opisivanju jezika bio bi previše složen. Zaobilazno pretraživanje vodi do opisa jezika na osnovu njegove govorne prirode i komandne strane. Tako je rođen Sistem slojeva, koji se delimično poklapa sa Periodnim sistemom Mendeljejeva, koji je takođe sloj. Kako se pokazalo 42 godine nakon njegovog objavljivanja (1869), periodičnost sistema povezana je sa elektronskim slojevi (1911, Bohr-Rutherfordov model atoma). Takođe, Slojeviti i Periodični sistemi su slični u tabelarnom rasporedu svih jedinica na jednoj stranici.

Opis jezičkih jedinica je kratak - samo 10 vrsta izraza i 8 vrsta drugih jedinica, kao i smislenih i vizuelnih. Iako neobično za prvo poznanstvo.

Jezičke jedinice podijeljene su u 6 nivoa:

  1. jedinice - redovi tabele
  2. odjeljenja - posebne grupe rodova (dijelovi prvog reda)
  3. rod - ćelije (glavni nivo deobe)
  4. supervrste - separatori vrsta (redak nivo)
  5. vrste - formule jedinica na dnu ćelije ili zasebno
  6. obrasci - same jedinice (samo za riječi)

Primjer riječi opisuje dictionary - poseban podsistem sastavljen od istih šest nivoa.

Govorna komponenta jezika C je sasvim očigledna, iako još uvijek zaslužuje opis. Ali komandni dio jezika je upravo vezan za kontrolu kompilacije, tokom koje se stvara treća vrsta programa - naredba. Ovdje dolazimo do najuzbudljivijeg aspekta C jezika: ljepote.

4. SLJEDEĆA POGLAVLJA. Handsome Si

C jezik je osnova modernog programiranja. Zašto? Prvo, zbog najveće korespondencije sa govorom. Drugo, zato što je divno zaobišla ograničenja mašinske obrade brojeva.

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

Riječ "image" je prijevod engleske riječi "type", koja dolazi od grčke "prototype" - "tip". U ruskom jeziku riječ "tip" ne prenosi kamen temeljac koncepta koji se izražava, štoviše, miješa se s pomoćnim značenjem "tip".

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

Sloj je odmah riješio nekoliko problema - i mašinskih i nanesenih. Stoga će razmatranje početi sa slikom jednog zadatka i preći na sloj sa više zadataka.

Jedna od neprijatnih karakteristika istorijskog programiranja je da je većina koncepata, uključujući i osnovne, data bez definicija. “Programski jezik (ime rijeka) ima tipove cjelobrojnih i plutajućih brojeva...” i oni su zagrebali dalje. Nije potrebno definisati šta je „tip“ (slika), jer sami autori to ne razumeju u potpunosti i prećutkuju „radi jasnoće“. Ako su pričvršćeni za zid, dat će nejasnu i beskorisnu definiciju. Mnogo pomaže skrivanje iza stranih riječi: ruskim autorima - iza engleskog (tip), za Engleze - iza francuskog (potprogram), grčkog (polimorfizam), latinskog (enkapsulacija) ili njihovih kombinacija (ad-hoc polimorfizam).

Ali ovo nije naša sudbina. Naš izbor su definicije sa podignutim vizirom na čistom ruskom jeziku.

Slika

Slika je prefigurativno ime količine, koje definiše 1) suštinska svojstva količine i 2) izbor operacija za količinu.

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

Polazna tačka za uvođenje slike u C je normalan proračun, kao što je operacija sabiranja.

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

Mašinska soba Matematika striktno dijeli brojeve na cijele brojeve i razlomke. Različiti tipovi brojeva različito se pohranjuju u memoriju i obrađuju različitim instrukcijama procesora. Na primjer, instrukcije za zbrajanje cijelih brojeva i razlomaka su dvije različite instrukcije koje odgovaraju dvama različitim procesorskim čvorovima. Ali ne postoji naredba za dodavanje cjelobrojnih i razlomaka argumenata.

Primijenjeno matematika, odnosno jezik C, razdvaja tipove brojeva, ali kombinuje operacije: sabiranje za cele brojeve i/ili razlomke se piše jednim znakom akcije.

Jasna definicija slike koncepta nam omogućava da definitivno govorimo o dva druga koncepta: magnitude и operacije.

Veličina i rad

Vrednost — broj koji se obrađuje.

Operacija — obrada vrijednosti početnih vrijednosti (argumenata) kako 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. I svaka vrijednost je rezultat prijenosa vrijednosti u/iz registra procesora, odnosno rezultat operacije. Uprkos ovom odnosu, glavna stvar je mogućnost njihovog zasebnog opisa, iako uz ponavljanje jedne riječi u različitim dijelovima rječnika, što se i događa u MA3.

Mašinski pristup je podijelio sve brojeve koje je programer koristio naredbe и podatke. Ranije su oba bila brojevi, na primjer, naredbe su pisane numeričkim kodovima. Međutim, u primijenjenim jezicima komande su prestale biti brojevi i postale su reči и znakovi akcije. Kao brojevi ostaju samo „podaci“, ali je apsurdno i dalje ih tako nazivati, jer u prelasku sa mašinske na matematičku tačku gledišta, brojevi su količine koje se dele sa originalom (podatke) i konačni (potrebno). “Nepoznati podatak” će zvučati glupo.

Ekipe su također bile podijeljene u dvije vrste akcija: matematičku i uslužnu. Matematičke radnje - operacije. Kasnije ćemo doći do službenih stvari.

U jezicima C, uobičajene nedvosmislene ili pojedinačne matematičke operacije na papiru i mašinama gotovo univerzalno postaju višestruke.

Više operacija je nekoliko operacija istog imena sa različitim tipovima argumenata i različitim, sličnim po značenju, akcijama.

Cjelobrojni argumenti odgovaraju cijeloj operaciji, a frakcijski argumenti frakcijskoj operaciji. Ova razlika je posebno jasna tokom operacije dijeljenja, kada izraz 1/2 daje ukupno 0, a ne 0,5. Takva notacija ne odgovara pravilima papirne matematike, ali jezik C ne teži da ih se pridržava (za razliku od Fortrana) - on igra po svom primijenjeno pravila.

U slučaju miješanja cijelih brojeva i razlomaka, uključen je jedini ispravan ubacivanje vrijednosti argumenta — selektivna transformacija vrijednosti iz jedne slike u drugu. Zaista, kada se zbrajaju cijeli i razlomački broj, rezultat je razlomak, tako da slika operacije pokupi operacija pretvaranja cjelobrojnog argumenta u razlomku vrijednost.

Ostalo je još nekoliko operacija množinai samac. Takve operacije su definirane samo za jednu vrstu argumenata: ostatak dijeljenja - cjelobrojni argumenti, slaganje (operacije po bitu) - prirodni cijeli brojevi. Ma3 označava mnoštvo operacija sa znakovima (#^) koji označavaju slike za koje je operacija definirana. Ovo je važno, ali prethodno zanemareno svojstvo svake operacije.

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

Asistencija

Asistencija - radnja koja prati operaciju.

Ako operaciju smatramo glavnom radnjom, onda možemo razlikovati dvije prateće koje pružaju operaciju i razlikuju se od nje. To su 1) varijabilna kontrola i 2) subordinacija. Ova akcija se zove pomoć.

Ovdje trebamo skrenuti pažnju i posebno reći o ruskim prijevodima udžbenika programiranja. U tekst K/R uvedena je nova reč za beleženje radnji izjava (izraz), koji je pokušao da podeli koncepte mašinske komande na različite akcije: 1) operaciju, 2) deklaraciju i 3) podređenost (nazvane "kontrolne konstrukcije"). Ovaj pokušaj zakopali su ruski prevodioci, zamijenivši "izraz" riječju "operator", što:

  1. je postao sinonim za mašinsku reč "komanda",
  2. ispostavilo se da je sinonim za izraz "znak akcije",
  3. a također je dobio neograničen broj dodatnih vrijednosti. Odnosno, pretvorio se u nešto slično engleskom članku "uhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh"

Razmotrite prateće radnje, ili pomoć.

Varijabilna kontrola

Varijabilna kontrola (UP) - kreiranje/brisanje varijabilnih ćelija.
UE se javlja implicitno prilikom deklarisanja varijable, koja je već napisana iz drugog razloga - da naznači sliku vrijednosti. Samo jednim pogledom se eksplicitno upravlja dodatne varijable koristeći malloc() i free() funkcije.

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

Podređivanje

Podređivanje — povežite/onemogućite sekcije slojeva.

C jezik je ponudio primenjenu metodu kontrole redosleda akcija, različitu od asemblera - subordinacije. Odražava i razvija govornu složenu rečenicu sa jasnom podjelom na glavni dio (podređena rečenica) i podređeni dio (podnivo/podprogram).

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

Sloj

Sloj je ograničeni selektivni skup izraza na jednom nivou.

Sloj je eksplicitno i implicitno preuzeo nekoliko zadataka odjednom:

  1. organizovanje programa
  2. ograničavanje vidljivosti imena (implicitno),
  3. upravljanje varijablama (memorijskim ćelijama) (implicitno),
  4. definicija podređenih rečenica za subordinaciju,
  5. definicije funkcija i selekcija i drugo.

Nije postojao koncept sloja u mašinskim jezicima, tako da se nije pojavio u K/R, a ako nečega nije bilo, onda bi uvođenje u naredne knjige bilo jeres i slobodoumlje. Stoga se koncept sloja uopće nije pojavio, iako je izuzetno koristan i sasvim očigledan.

Bez sloja, nemoguće je ukratko i jasno objasniti mnoge radnje i pravila programa. Na primjer, zašto je goto jednostavno kao tri kopejke loše, a lukavo dok 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 koze koriste goto. Nivo opravdanja je Bog.) Istina, ovo i nije toliko 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 Riči ostavio goto upravo kao ključ za traženje nekog neimenovanog pojma, jer u izrazu goto nije bilo potrebe ni lepote. Ali postojala je potreba za jednostavnim i razumljivim objašnjenjem novih principa jezika, koje sam Richie nije želio dati, a koji su upravo zasnovani na konceptu sloj.

Odstupanje

Odstupanje — promjena uobičajenih svojstava novog imena.

Najvažnije odstupanje je upravo vezano za svojstva sloja programa, a opisuje se jednom riječju „statičnost“, koja u svakoj vrsti sloja ima različito značenje.

5. POSLJEDNJE POGLAVLJE. Zajedničkost primijenjenih jezika

Primijenjeni jezici su figurativno jezicima (sa slikom, "ukucanim"). Oni se zasnivaju na eksplicitnoj ili implicitnoj upotrebi slike. Štoviše, ovdje se opet pojavljuje kontradikcija: eksplicitna slika je razumljivija, ali manje zgodna, i obrnuto.

Matryoshka Si. Sistem slojeva programskog jezika

(Izgled tabele još nije dostavljen, pa je tabela prikazana sa slikom.)

Nakon C, razvoj primijenjenih jezika krenuo je putem povećanja njihove figurativnosti. Najvažniji za razumijevanje visoke slike je direktni potomak C - jezika C++. On razvija ideju proizvoljnog odabira operacija za količine i utjelovljuje je na temelju sintetičkog izraza selekcija, koji dobiva novo ime - objekt. Međutim, C++ nije tako sažet i izražajan kao C zbog preopterećenja novih tipova kolekcija i njihovih povezanih pravila. Usput, hajde da pričamo o “preopterećenju”.

Preopterećenje i polimorfizam

Riječ "preopterećenje" je zastarjeli termin za stvaranje u mašinskom učenju više operacija.

Mašinski (sistemski) programeri pluralitet operacije bi mogle biti neugodne: „Šta znači ovaj znak (+): zbrajanje cijelih brojeva, dodavanje razlomaka ili čak pomjeranje?! U naše vrijeme nisu tako pisali!” Otuda negativna konotacija odabrane riječi (“pretjerati”, “umoran”). Za programera aplikacija, višestruke operacije su kamen temeljac, glavno dostignuće i naslijeđe C jezika, toliko prirodno da se često ne prepoznaju.

Na jeziku C++ pluralitet proširen ne samo na originalne operacije, već i na funkcije - kako pojedinačne tako i kombinovane u klase - metode. Uz više metoda došla je i mogućnost da se oni nadjačaju u proširenim klasama, što je nejasno nazvano "polimorfizam". Kombinacija polimorfizma i preopterećenja proizvela je eksplozivnu mješavinu koja se podijelila na dva polimorfizma: "pravi" i "ad-hoc". To je moguće razumjeti samo uprkos dodijeljenim nazivima. Put do oglasa popločan je stranim nazivima.

Deklaracija oblika “preopterećenje” je bolje izražena u riječi dodatna najava — dodavanje deklaracije funkcije istog imena sa argumentima druge slike.

Deklaraciju oblika "polimorfizam" bolje je nazvati ponovno objavljivanje — deklaracija koja se preklapa u novom sloju proširenja funkcije istog imena sa argumentima iste slike.

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

Ruske riječi odlučuju.

Pista

Razmatranje pojmova izrazito figurativnih jezika potvrđuje važnost jasne definicije osnovnih pojmova. Uz ispravno opisan C, učenje visokofigurativnih jezika bit će lako i ugodno.

Ovo je posebno važno za implicitnih visoko figurativnih jezika (PHP, JavaScript). Za njih značaj objekata (kompozitnih slika) postaje još veći nego u C++, ali sam koncept slike postaje implicitan i neuhvatljiv. Sa stanovišta pogodnosti, postali su jednostavniji, ali sa stanovišta razumijevanja postali su teži.

Stoga biste trebali početi učiti programske jezike s jezikom C i ići dalje redoslijedom kojim se pojavljuju jezici porodice C.

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

MySQL jezik zaslužuje posebnu pažnju. Čini se da nema ništa zajedničko, ali Matrjoška ga savršeno opisuje, a upoznavanje postaje brže i lakše. Što je važno, s obzirom na njegovu važnost za web – trpezarijski put modernog programiranja. A gdje postoji MySQL, tu su i drugi SQL-ovi. Pa, sve vrste Fortran-Pascal-Pythona opisuje i Matryoshka, čim se dočepaju.

Dakle, čekaju nas velike stvari - primijenjeni opis jezika C i unificirani opis jezika koji ga slijede. “Naši ciljevi su jasni, zadaci su definisani. Na posao, drugovi! (Buran, dugotrajan aplauz, koji prelazi u ovacije. Svi ustaju.)"

Vaša mišljenja će biti saslušana sa velikom pažnjom, vaša pomoć u kreiranju web stranice lutke za gnijezde će biti primljena sa velikom zahvalnošću. Potpunije informacije o knjizi nalaze se na web stranici, vješto skrivenoj u Matryoshka C.

izvor: www.habr.com

Dodajte komentar