Matrjoška C. Sistem večplastnega programskega jezika

Poskusimo si predstavljati kemijo brez Mendelejevega periodnega sistema (1869). Koliko elementov je bilo treba imeti v mislih in brez posebnega vrstnega reda ... (Nato - 60.)

Če želite to narediti, pomislite na enega ali več programskih jezikov hkrati. Isti občutki, isti ustvarjalni kaos.

In zdaj lahko podoživimo občutke kemikov iz XNUMX. stoletja, ko so jim v enem periodnem sistemu ponudili vse svoje znanje in še malo več.

Matrjoška C. Sistem večplastnega programskega jezika


Knjiga "Matrjoška C. Večplastni sistem programskega jezika« na prvi pogled predstavlja vse enote jezika C. To vam omogoča, da jih organizirate, popravite zastarele informacije in celo razjasnite sam koncept programa.

Programske informacije danes še bolj potrebujejo sistematizacijo kot kemični elementi pred 150 leti.

Prva nuja je poučevanje. Mendelejev je svoj sistem začel ustvarjati, ko se je soočil z vprašanjem, s katerim elementom naj začne predavati: O, H, N, He, Au ... Hkrati mu je bilo lažje - kemijo je poučeval najboljšim - študentom Univerza v Sankt Peterburgu. In programiranje se že učijo v šoli in kmalu se bo začelo tudi v vrtcu.

Druga potreba je znanstveni pristop. S pomočjo periodnega sistema so bili odkriti novi elementi in popravljeni podatki o starih. Pomagala je pri izdelavi modela atoma (1911). In tako naprej.

Tretja potreba je pojasniti koncept programa.

Sodobno programiranje je z eno nogo obtičalo v 50. letih XNUMX. stoletja. Takrat so bili programi preprosti, vendar so bili stroji in strojni jeziki zapleteni, tako da se je vse vrtelo okoli strojev in jezikov.

Zdaj je vse obratno: programi so zapleteni in primarni, jeziki so preprosti in sekundarni. To se imenuje uporabni pristop, ki ga vsi poznajo. Toda študentje in razvijalci so še naprej prepričani, da je vse po starem.

Kar nas pripelje nazaj k prvemu predavanju privatdozenta Mendelejeva. Kaj povedati brucem? Kje je resnica? To je vprašanje.

Knjiga "Matrjoška C" ponuja odgovor na to vprašanje. Večplastni sistem programskega jezika". Poleg tega ni namenjen le študentom, ampak tudi usposobljenim programerje, saj so oni, torej mi, tisti, ki moramo iskati resnico in spreminjati pogled na svet.

Sledi povzetek knjige.

1. Uvod

Leta 1969 je nastal jezik C, ki je postal temeljni programski jezik in je to ostal že 50 let. Zakaj je temu tako? Najprej zato, ker je C uporablja jezik, ki je dal program humano pogled namesto tega stroj. Ta dosežek so zagotovili jeziki iz družine C: C++, JavaScript, PHP, Java, C# in drugi. Drugič, to je kratek in lep jezik.

Vendar je sam jezik C običajno pomešan s strojnim sestavljalnikom, kar otežuje in izkrivlja njegovo zaznavanje. Druga skrajnost je vsiljevanje določene »filozofije« v jezik: proceduralne, predmetne, funkcionalne, prevedene, interpretirane, tipkane itd. To doda čustva, vendar ne pomaga bolje opisati jezika.

Resnica je na sredini in za jezik C je strogo na sredini med filozofsko in strojno percepcijo.

Jezik C ni samostojen, podreja se navadnemu pisnemu jeziku, hkrati pa nadzoruje sam zbirni jezik. Ta položaj opisuje Govorni model programa, po katerem je program razdeljen na tri podrejene vrste: govor, koda, ukaz. Jezik C je odgovoren za drugo, kodno vrsto.

Ko določite mesto jezika v programu, lahko organizirate informacije o njem, kar naredi Sistem večplastnega programskega jezika, ki predstavlja jezik C v duhu periodnega sistema - na eni strani.

Sistem je zgrajen ob upoštevanju skupnosti uporabnih jezikov, ki izhaja iz njihove govorne podrejenosti. En niz enot Matryoshka C vam omogoča opisovanje in primerjavo različnih jezikov ter ustvarjanje niza Matryoshka: C++, PHP, JavaScript, C#, MySQL, Python in tako naprej. Vredno in pravilno je, da so različni jeziki opisani z enotami temeljnega jezika.

2. POGLAVJE 1. Govorni model programa. Počisti C

Prvo poglavje predstavlja govorni model programa, ki odraža uporabni pristop. Po njegovem mnenju ima program tri očitne zaporedne vrste:

  1. govor - neposredni govor programerja, ki rešuje problem,
  2. kodirano - kodiranje rešitve v matematično obliko v jeziku C (ali katerem koli drugem)
  3. in ukaz - neposredni strojni ukazi.

Govorni model pojasnjuje, zakaj je C preprost in razumljiv jezik. Xi je zgrajen po podobi in podobnosti človeškega govora, ki ga poznamo.

Prva vrsta programa je neposredni govor programerja. Govor ustreza človeškemu mišljenju. Programerji začetniki pišejo programe z uporabo govora - najprej v ruščini, nato korak za korakom prevajajo dejanja v kodni jezik. In prav po tem modelu je nastal jezik C.

Programerjevi sklepi, izraženi v govoru, se pretvorijo v kodirano numerično obliko. To preoblikovanje je treba imenovati refleksija, saj imata govor in koda isto naravo (odsev – rojstvo – spol). To je povsem očitno, če primerjamo govorno (levo) in kodno (desno) vrsto programa.

Matrjoška C. Sistem večplastnega programskega jezika

Zanimivo je, da se refleksija zgodi zelo preprosto - s samo dvema vrstama izrazov.

Vendar sodobni opis jezika C (iz leta 1978) ne vsebuje zadostnega seznama imen niti za opis jezika na splošno niti za nalogo refleksije posebej. Zato smo prisiljeni postati kreativni in uvesti ta imena.

Izbira besed mora biti natančna in jasna. To je zahtevalo poseben pristop, na kratko izražen takole: stroga raba domačega jezika. Za Angleže bi bilo to Angleži, a mi nismo Angleži. Zato bomo uporabili, kar imamo, in poskušali govoriti rusko.

Refleksijo izvajata dve vrsti izrazov:

  1. izračun (HF) - odraža spremembo lastnosti predmeta. Lastnost predmeta je izražena s številom, potem je dejanje nad lastnostjo dejanje nad številom – operacija.
  2. podrejenost (Pch) - odraža spremembo vrstnega reda dejanj. Prototip Pch je govorno zapleten stavek, zato se večina vrst Pch začne s podrednimi vezniki "če", "sicer", "medtem ko", "za". Druge vrste osebnih računalnikov jih dopolnjujejo.

Mimogrede, lahko verjamete, da v opisu C ni imena za računske izraze - preprosto se imenujejo "izrazi"? Po tem ne bo več presenetljivo, da ni poimenovanja in asociacije za tip podrejenosti, sploh pa maloštevilnost poimenovanj, definicij in posploševanj. To je zato, ker slavni K/R (»jezik C«, Kernighan/Ritchie, 1978) ni opis, ampak vodnik za uporabo jezika.

Vseeno pa bi rad imel opis jezika. Zato je ponujen Sistem večplastnega programskega jezika.

3. POGLAVJE 2. Sistem plasti. Na kratko C

Vsak opis mora biti točen in zelo jedrnat. V primeru programskega jezika je frontalni opis težaven.

Tukaj imamo program. Sestavljen je iz modulov. Moduli so sestavljeni iz podprogramov in zbirk (struktura). Podprogrami so sestavljeni iz posameznih izrazov: deklaracije, izračuni, podrejenost. Obstaja kar deset vrst podrejenosti. Podrejenost povezuje podravni in podprograme. Obstaja tudi več oglasov. Vendar deklaracije niso vključene le v podprograme in podravni, ampak tudi v module in zbirke. In večina izrazov je sestavljena iz besed, ki jih je tako težko opisati, da so običajno preprosto podane v dveh seznamih - izvirnih in izpeljanih besed, s katerimi se boste seznanili med učenjem in uporabo jezika. Temu dodajmo še ločila in številne druge izraze.

V taki predstavitvi ni lahko razbrati, kdo je komu stal.

Neposredni hierarhični pristop k opisovanju jezika bi bil preveč zapleten. Krožno iskanje vodi do opisa jezika na podlagi njegove govorne narave in ukazne strani. Tako se je rodil sistem plasti, ki delno sovpada s periodnim sistemom Mendelejeva, ki je tudi vložek. Kot se je izkazalo 42 let po objavi (1869), je periodičnost sistema povezana z elektronskim plasti (1911, Bohr-Rutherfordov model atoma). Poleg tega sta si večplastni in periodični sistem podobna v tabelarični razporeditvi vseh enot na eni strani.

Opis jezikovnih enot je kratek - samo 10 vrst izrazov in 8 vrst drugih enot, pa tudi smiselnih in vizualnih. Čeprav nenavadno za prvo poznanstvo.

Jezikovne enote so razdeljene na 6 ravni:

  1. enote - vrstice tabele
  2. oddelki - posebne skupine rodov (deli prve vrstice)
  3. rod - celice (glavna stopnja delitve)
  4. superspecies - ločila vrst (redka raven)
  5. vrste - formule enot na dnu celice ali ločeno
  6. vzorci - same enote (samo za besede)

Vzorčne besede opisujejo slovar - ločen podsistem, sestavljen iz istih šestih ravni.

Govorna komponenta jezika C je precej očitna, čeprav si še vedno zasluži opis. Toda ukazni del jezika je prav povezan z nadzorom prevajanja, med katerim se ustvari tretja vrsta programa - ukaz. Tu smo prišli do najbolj vznemirljivega vidika jezika C: lepote.

4. NASLEDNJA POGLAVJA. Lepi Si

Jezik C je osnova sodobnega programiranja. Zakaj? Prvič, zaradi največje korespondence z govorom. Drugič, ker je lepo obšel omejitve strojne obdelave številk.

Kaj točno je Xi predlagal? Slika in plast.

Beseda "image" je prevod angleške besede "type", ki izhaja iz grškega "prototype" - "tip". V ruskem jeziku beseda "tip" ne predstavlja temelja izraženega pojma, poleg tega se zamenjuje s pomožnim pomenom "tip".

Sprva je slika reševala povsem strojni računski problem, nato pa je postala vzletno-pristajalna steza za rojstvo predmetnih jezikov.

Sloj je takoj rešil več težav – tako strojnih kot nanesenih. Zato se bo obravnava začela s sliko z eno nalogo in se premaknila na plast z več nalogami.

Ena od neprijetnih lastnosti zgodovinskega programiranja je, da je večina konceptov, vključno z osnovnimi, podana brez definicij. “Programski jezik (ime rek) ima tipe celih in lebdečih števil ...” in so grebali dalje. Ni treba definirati, kaj je »tip« (podoba), saj avtorji sami tega ne razumejo povsem in bodo to »zaradi jasnosti« zamolčali. Če so pripeti na steno, bodo dali nejasno in neuporabno definicijo. Zelo pomaga skrivanje za tujimi besedami: za ruske avtorje - za angleščino (tip), za Angleže - za francoščino (podrutina), grščino (polimorfizem), latinščino (enkapsulacija) ali njihove kombinacije (ad-hoc polimorfizem).

Ampak to ni naša usoda. Naša izbira so definicije z dvignjenim vizirjem v čisti ruščini.

Slika

Slika je predfigurativno ime količine, ki definira 1) intrinzične lastnosti količine in 2) izbiro operacij za količino.

Beseda "vrsta" (vrsta) ustreza prvemu delu definicije: "notranje lastnosti količine." Toda glavni pomen slike je v drugem delu: "izbor operacij do količin."

Izhodišče za uvedbo slike v C je običajen izračun, kot je operacija seštevanja.

Papir Matematika, ne glede na to, ali je napisana ročno ali natisnjena, ne razlikuje veliko med vrstami števil, običajno ob predpostavki, da so resnična. Zato so njihove obdelave nedvoumne.

Stroj Matematika strogo deli števila na cela števila in ulomke. Različne vrste številk so različno shranjene v pomnilniku in obdelane z različnimi ukazi procesorja. Na primer, navodila za seštevanje celih števil in ulomkov sta dve različni navodili, ki ustrezata dvema različnima procesorskima vozliščema. Ni pa ukaza za dodajanje celih in delnih argumentov.

Uporabljeno matematika, torej jezik C, ločuje vrste števil, vendar združuje operacije: seštevanje za cela števila in/ali ulomke pišemo z enim akcijskim znakom.

Jasna definicija konceptne podobe nam omogoča, da zagotovo govorimo o dveh drugih konceptih: velikosti и operacijo.

Velikost in delovanje

vrednost — številko, ki se obdeluje.

Operacija — obdelava vrednosti začetnih vrednosti (argumentov) za pridobitev končnega števila (skupaj).

Velikost in delovanje sta med seboj povezana. Vsaka operacija je količina, ker ima numerični rezultat. In vsaka vrednost je rezultat prenosa vrednosti v/iz registra procesorja, torej rezultat operacije. Kljub temu razmerju je glavna stvar možnost njihovega ločenega opisa, čeprav s ponavljanjem ene besede v različnih delih slovarja, kar se zgodi v MA3.

Strojni pristop je vsa števila, ki jih uporablja programer, razdelil na ukazi и podatke. Prej sta bili obe številki, na primer ukazi so bili zapisani v številskih kodah. Vendar pa so v uporabnih jezikih ukazi prenehali biti številke in postali z besedami и akcijski znaki. Samo »podatki« ostanejo kot številke, a jih je nesmiselno še naprej tako imenovati, saj so pri prehodu s strojnega na matematični vidik števila količine, ki se delijo z originalom (podatke) in končno (potrebno). "Neznan datum" bo zvenel neumno.

Ekipe so bile razdeljene tudi na dve vrsti akcij: matematično in servisno. Matematična dejanja - operacije. K uradnim stvarem bomo prišli kasneje.

V jezikih C običajne papirnate in strojne nedvoumne ali posamezne matematične operacije skoraj univerzalno postanejo večkratne.

Več operacij je več operacij z istim imenom z različnimi vrstami argumentov in različnimi, po pomenu podobnimi dejanji.

Celoštevilski argumenti ustrezajo celotni operaciji, ulomki pa frakcijski operaciji. Ta razlika je še posebej jasna med operacijo deljenja, ko izraz 1/2 daje skupno 0, ne 0,5. Takšen zapis ne ustreza pravilom papirnate matematike, vendar jezik C ne teži k temu (za razliko od Fortran-a) - igra se po svojem uporabljeno pravila.

V primeru mešanja celih števil in ulomkov je vključeno edino pravilno ulivanje vrednosti argumentov — selektivno preoblikovanje vrednosti iz ene slike v drugo. Dejansko je pri seštevanju celega števila in ulomka rezultat ulomek, zato je slika operacije pobere operacija pretvorbe celega argumenta v ulomek.

Ostalo je še nekaj operacij množineIn samski. Takšne operacije so definirane samo za eno vrsto argumentov: ostanek pri deljenju - celi argumenti, zlaganje (bitne operacije) - naravna cela števila. Ma3 označuje množico operacij z znaki (#^), ki označujejo slike, za katere je operacija definirana. To je pomembna, a prej spregledana lastnost vsake operacije.

Vse funkcije so poljubne enote. Izjema so operaterji - funkcije brez oklepaja, vgrajen v jezik (izvirne operacije).

Pomoč

Pomoč - ukrep, ki spremlja operacijo.

Če operacijo obravnavamo kot glavno dejanje, potem lahko ločimo dve spremljajoči, ki zagotavljata operacijo in se od nje razlikujeta. To sta 1) variabilni nadzor in 2) podrejenost. To dejanje se imenuje pomoč.

Tu se moramo oddaljiti in ločeno povedati o ruskih prevodih učbenikov programiranja. V besedilo K/R je bila uvedena nova beseda za beleženje dejanj Izjava (izraz), ki je poskušal koncepte strojnega ukaza razdeliti na različna dejanja: 1) operacijo, 2) deklaracijo in 3) podrejenost (imenovano "nadzorni konstrukti"). Ta poskus so pokopali ruski prevajalci, ki so "izraz" nadomestili z besedo "operator", ki:

  1. je postala sinonim za strojno besedo "ukaz",
  2. Izkazalo se je, da je sinonim za besedno zvezo "znak dejanja",
  3. prejeli pa so tudi neomejeno število dodatnih vrednosti. To pomeni, da se je spremenilo v nekaj podobnega angleškemu članku "uhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh"

Razmislite o spremljajočih dejanjih, oz pomoč.

Spremenljivo krmiljenje

Spremenljivo krmiljenje (GOR) - ustvarjanje/brisanje spremenljivih celic.
UE se pojavi implicitno pri deklaraciji spremenljivke, ki je že zapisana iz drugega razloga - da nakaže sliko vrednosti. Samo en pogled je izrecno upravljan dodatne spremenljivke z uporabo funkcij malloc() in free().

Treba je opozoriti, da so implicitna dejanja bolj priročna za pisanje, saj sploh ne zahtevajo pisanja ničesar, vendar jih je težje razumeti - težje jih je upoštevati in razlagati.

Podrejenost

Podrejenost — povezovanje/onemogočanje odsekov plasti.

Jezik C je ponudil uporabno metodo nadzora vrstnega reda dejanj, drugačno od asemblerja - podrejenost. Odraža in razvija govorno kompleksen stavek z jasno delitvijo na glavni del (podrejeni stavek) in podrejeni del (podravni/podprogramski deli).

Tako izjava kot predložitev sta v celoti zgrajena na konceptu sloj.

Plast

Plast je omejen enonivojski selektivni niz izrazov.

Plast je eksplicitno in implicitno prevzela več nalog hkrati:

  1. organiziranje programa
  2. omejevanje vidnosti imen (implicitno),
  3. upravljanje spremenljivk (pomnilniških celic) (implicitno),
  4. opredelitev podrednih stavkov za podrejenost,
  5. definicije funkcij in izbir ter drugo.

V strojnih jezikih ni bilo koncepta sloja, zato se ni pojavil v K/R, in če česa tam ne bi bilo, bi bilo uvajanje tega v naslednjih knjigah herezija in svobodomiselnost. Zato se koncept sloja sploh ni pojavil, čeprav je izjemno uporaben in precej očiten.

Brez plasti je nemogoče na kratko in jasno razložiti veliko dejanj in pravil programa. Na primer, zakaj je goto tako preprost kot tri kopejke slab, zapleten medtem pa je dober. Lahko le nemočno preklinjaš, kot je Dijkstra (»spretnost programerjev je funkcija, ki je obratno odvisna od pogostosti pojavljanja stavkov goto v njihovih programih.« Skratka, goto uporabljajo samo koze. Raven opravičila je Bog.) Res je, da to ni tako strašno, če nam vašim knjigam sploh ni treba ničesar razlagati, vendar, kot smo že rekli, to ni naša usoda.

Mimogrede, lahko domnevamo, da je Dan Ritchie pustil goto ravno kot ključ za iskanje nekega neimenovanega pojma, ker v izrazu goto ni bilo nobene potrebe ali lepote. Toda obstajala je potreba po preprosti in razumljivi razlagi novih jezikovnih principov, ki jih sam Richie ni želel dati in ki temeljijo ravno na konceptu sloj.

Odstopanje

Odstopanje — spreminjanje običajnih lastnosti novega imena.

Najpomembnejše odstopanje je ravno povezano z lastnostmi plasti programa in je opisano z eno besedo »statično«, ki ima v vsaki vrsti plasti drugačen pomen.

5. ZADNJE POGLAVJE. Skupnost uporabnih jezikov

Uporabni jeziki so figurativno jeziki (s sliko, "natipkano"). Temeljijo na eksplicitni ali implicitni uporabi slike. Poleg tega se spet pojavi protislovje: eksplicitna slika je bolj razumljiva, a manj priročna, in obratno.

Matrjoška C. Sistem večplastnega programskega jezika

(Postavitev tabele še ni bila dostavljena, zato je tabela prikazana s sliko.)

Po C je razvoj uporabnih jezikov šel po poti povečanja njihove figurativnosti. Najpomembnejši za razumevanje visokih podob je neposredni potomec jezika C – jezik C++. Razvija idejo poljubnega izbora operacij za količine in jo uteleša na osnovi sintetičnega izraznega izbora, ki dobi novo ime - predmet. Vendar C++ ni tako jedrnat in izrazit kot C zaradi preobremenjenosti novih vrst zbirk in z njimi povezanih pravil. Mimogrede, pogovorimo se o "preobremenitvi".

Preobremenitev in polimorfizem

Beseda "preobremenitev" je zastarel izraz strojnega učenja za ustvarjanje več operacij.

Strojni (sistemski) programerji pluralnost operacije bi lahko bile moteče: »Kaj pomeni ta znak (+): seštevanje celih števil, seštevanje ulomkov ali celo premik?! V našem času tako niso pisali!« Od tod tudi negativna konotacija izbrane besede (»pretiravati«, »utrujen«). Za aplikacijskega programerja je več operacij temelj, glavni dosežek in zapuščina jezika C, tako naravno, da jih pogosto ne prepoznajo.

V jeziku C++ pluralnost razširil ne samo na izvirne operacije, ampak tudi na funkcije - tako posamezne kot združene v razrede - metode. Z več metodami je prišla možnost njihove preglasitve v razširjenih razredih, kar je bilo nejasno imenovano "polimorfizem". Kombinacija polimorfizma in preobremenitve je ustvarila eksplozivno mešanico, ki se je razdelila na dva polimorfizma: »pravi« in »ad-hoc«. To je mogoče razumeti le kljub dodeljenim imenom. Pot do oglasa je tlakovana s tujimi imeni.

Izjava oblike "preobremenitev" je bolje izražena z besedo dodatno obvestilo — dodajanje deklaracije istoimenske funkcije z argumenti drugačne slike.

Izjavo oblike "polimorfizem" je bolje imenovati ponovna najava — prekrivajoča se deklaracija v novi razširitveni plasti funkcije z istim imenom z argumenti iste slike.

Potem bo enostavno razumeti, da iste metode različnih slik (argumentov) - dodatno napovedanoin ena slika - ponovno napovedano.

Ruske besede odločajo.

Pristajalna steza

Upoštevanje konceptov visoko figurativnih jezikov potrjuje pomen jasne opredelitve temeljnih konceptov. S pravilno opisanim jezikom C bo učenje visoko figurativnih jezikov enostavno in prijetno.

To je še posebej pomembno za implicitni visoko figurativni jeziki (PHP, JavaScript). Zanje postane pomen predmetov (sestavljenih slik) celo večji kot v C++, vendar sam koncept slike postane impliciten in izmuzljiv. Z vidika priročnosti so postale enostavnejše, z vidika razumevanja pa težje.

Zato bi se morali začeti učiti programskih jezikov z jezikom C in nadaljevati v vrstnem redu, v katerem se pojavljajo jeziki družine C.

Enako velja za opisovanje jezikov. Različni jeziki imajo enak ali manjši nabor spolov enot kot jezik C. Število vrst in vzorcev se lahko razlikuje v obe smeri: C++ ima več vrst kot C, medtem ko jih ima JavaScript manj.

Jezik MySQL si zasluži posebno omembo. Zdi se, da ni nič skupnega, vendar ga Matryoshka odlično opisuje in spoznavanje z njim postane hitrejše in lažje. Kar je pomembno, glede na njegov pomen za splet - jedilnico sodobnega programiranja. In kjer je MySQL, so tudi drugi SQL-ji. No, vse mogoče Fortran-Pascal-Pythone opisuje tudi Matryoshka, takoj ko jo dobijo v roke.

Čakajo nas torej velike stvari - uporabni opis jezika C in enoten opis jezikov, ki mu sledijo. »Naši cilji so jasni, naše naloge so opredeljene. Na delo, tovariši! (Buren, dolgotrajen aplavz, ki preide v ovacije. Vsi vstanejo.)«

Vašim mnenjem bomo prisluhnili z veliko pozornostjo, vašo pomoč pri izdelavi spletnega mesta gnezdilke bomo sprejeli z veliko hvaležnostjo. Popolnejše informacije o knjigi so na spletni strani, spretno skrite v Matryoshka C.

Vir: www.habr.com

Dodaj komentar