Matrjoška C. Vrstvený programový jazykový systém

Zkusme si představit chemii bez Mendělejevovy periodické tabulky (1869). Kolik prvků bylo třeba mít na paměti a v žádném konkrétním pořadí... (Pak - 60.)

Chcete-li to provést, stačí přemýšlet o jednom nebo několika programovacích jazycích najednou. Stejné pocity, stejný tvůrčí chaos.

A nyní můžeme znovu prožít pocity chemiků XNUMX. století, když jim byly nabídnuty všechny své znalosti a ještě něco navíc v jedné periodické tabulce.

Matrjoška C. Vrstvený programový jazykový systém


Kniha „Matryoshka C. Vrstvený systém programového jazyka“ představuje všechny jednotky jazyka C na první pohled. To vám umožní uspořádat je, opravit zastaralé informace a dokonce objasnit samotnou koncepci programu.

Programování informací dnes potřebuje systematizaci ještě více než chemické prvky před 150 lety.

První nutností je vyučování. Mendělejev začal svůj systém vytvářet, když stál před otázkou, kterým prvkem začít přednášet: O, H, N, He, Au... Zároveň to pro něj bylo jednodušší - učil chemii ty nejlepší - studenty Petrohradská univerzita. A programování se už učí ve škole a brzy začne ve školce.

Druhou potřebou je vědecký přístup. Pomocí periodické tabulky byly objeveny nové prvky a opraveny informace o starých. Pomohla vytvořit model atomu (1911). A tak dále.

Třetí potřebou je ujasnit si pojem programu.

Moderní programování uvízlo jednou nohou v 50. letech XNUMX. století. Tehdy byly programy jednoduché, ale stroje a strojové jazyky byly složité, takže se vše točilo kolem strojů a jazyků.

Nyní je vše naopak: programy jsou složité a primární, jazyky jsou jednoduché a sekundární. Tomu se říká aplikovaný přístup, který, jak se zdá, každý zná. Studenti a vývojáři jsou ale nadále přesvědčeni, že vše je při starém.

Což nás přivádí zpět k první přednášce Privatdozent Mendělejeva. Co říct prvňáčkům? kde je pravda? To je ta otázka.

Kniha „Matryoshka C“ nabízí odpověď na tuto otázku. Vrstvený systém programovacího jazyka“. Navíc je určena nejen studentům, ale i vyškoleným programátorům, protože právě oni, tedy my, musíme hledat pravdu a měnit světonázor.

Následuje shrnutí knihy.

1. Úvod

V roce 1969 byl vytvořen jazyk C, který se stal základním programovacím jazykem a zůstal jím již 50 let. proč tomu tak je? Za prvé, protože C je aplikovaný jazyk, který dal programu humánní místo toho zobrazit stroj. Tento úspěch zajistily jazyky z rodiny C: C++, JavaScript, PHP, Java, C# a další. Za druhé, je to krátký a krásný jazyk.

Samotný jazyk C je však obvykle smíchán se strojovým assemblerem, což komplikuje a zkresluje jeho vnímání. Druhým extrémem je vnucování určité „filosofie“ jazyku: procedurální, objektový, funkční, kompilovaný, interpretovaný, typizovaný a tak dále. To přidává emoce, ale nepomáhá lépe popsat jazyk.

Pravda je uprostřed a pro jazyk C je přesně uprostřed mezi filozofickým a strojovým vnímáním.

Jazyk C není nezávislý, podřizuje se běžnému psanému jazyku a zároveň ovládá samotný jazyk symbolických instrukcí. Tato pozice popisuje Řečový model programu, podle kterého se program dělí na tři podřízené typy: řeč, kód, příkaz. Jazyk C je zodpovědný za druhý, typ kódu.

Po určení místa jazyka v programu můžete uspořádat informace o něm, což dělá Vrstvený systém programovacích jazyků, představující jazyk C v duchu periodického systému - na jedné stránce.

Systém je postaven s ohledem komunity aplikovaných jazyků, vyplývající z jejich řečové podřízenosti. Jedna sada jednotek Matryoshka C vám umožňuje popisovat a porovnávat různé jazyky a vytvářet řadu Matryoshkas: C++, PHP, JavaScript, C#, MySQL, Python a tak dále. Je hodné a správné, že různé jazyky jsou popsány jednotkami základního jazyka.

2. KAPITOLA 1. Řečový model programu. Clear C

První kapitola představuje řečový model programu, odrážející aplikovaný přístup. Podle něj má program tři zřejmé sekvenční typy:

  1. řeč - přímá řeč programátora řešícího problém,
  2. kódované - kódování řešení do matematické podoby v jazyce C (nebo v jakémkoli jiném)
  3. a příkaz - přímé strojové příkazy.

Řečový model vysvětluje, proč je C jednoduchý a srozumitelný jazyk. Xi je postaven na obrazu a podobě lidské řeči, která je nám známá.

Prvním typem programu je přímá řeč programátora. Řeč odpovídá lidskému myšlení. Začínající programátoři píší programy pomocí řeči - nejprve v ruštině, poté krok za krokem převádějí akce do kódového jazyka. A přesně na tomto modelu vznikl jazyk C.

Závěry programátora, vyjádřené v řeči, jsou převedeny do kódované číselné podoby. Tato transformace by se měla nazývat odraz, jelikož řeč a kód mají stejnou povahu (reflexe - narození - pohlaví). To je zcela zřejmé, porovnáme-li řečový (vlevo) a kódový (vpravo) typ programu.

Matrjoška C. Vrstvený programový jazykový systém

Je zvláštní, že k reflexi dochází velmi jednoduše – pouze se dvěma typy výrazů.

Moderní popis jazyka C (z roku 1978) však neobsahuje dostatečný seznam názvů ani pro popis jazyka obecně, ani pro konkrétní úlohu reflexe. Proto jsme nuceni být kreativní a tato jména představit.

Volba slov musí být přesná a jasná. To vyžadovalo zvláštní přístup, stručně vyjádřený takto: striktní používání rodného jazyka. Pro Angličany by to byla angličtina, ale my nejsme Angličané. Takže použijeme to, co máme, a zkusíme mluvit rusky.

Reflexe se provádí dvěma typy výrazů:

  1. výpočet (HF) - odráží změnu vlastností objektu. Vlastnost objektu je vyjádřena číslem, pak akce na vlastnost je akce na číslo - operace.
  2. podřízení (Pch) - odráží změnu v pořadí akcí. Prototypem Pch je řečová složitá věta, proto většina typů Pch začíná podřadicími spojkami „kdyby“, „jinak“, „zatímco“, „pro“. Ostatní typy PC je doplňují.

Mimochodem, můžete věřit, že v popisu C není žádný název pro výpočetní výrazy - jednoduše se nazývají „výrazy“? Poté již nebude překvapivé, že neexistuje žádné jméno a asociace pro typ podřízenosti a vlastně nedostatek názvů, definic a zobecnění obecně. Je tomu tak proto, že slavný K/R („The C Language“, Kernighan/Ritchie, 1978) není popisem, ale návodem k používání jazyka.

Přesto bych rád měl popis jazyka. Proto se nabízí Vrstvený systém programovacích jazyků.

3. KAPITOLA 2. Systém vrstev. Stručný C

Jakýkoli popis musí být přesný a extrémně stručný. V případě programového jazyka je frontální popis obtížný.

Tady máme program. Skládá se z modulů. Moduly se skládají z podprogramů a kolekcí (struktura). Podprogramy se skládají z jednotlivých výrazů: deklarace, výpočty, podřazení. Existuje až deset druhů podřízenosti. Podřízenost propojuje podúrovně a podprogramy. Existuje také několik inzerátů. Deklarace však nejsou obsaženy pouze v podprogramech a podúrovních, ale také v modulech a kolekcích. A většina výrazů se skládá ze slov, která je tak těžké popsat, že jsou většinou jednoduše uvedena ve dvou seznamech – původní a odvozená slova, se kterými se budete seznamovat po celou dobu učení a používání jazyka. K tomu přidejme interpunkční znaménka a řadu dalších výrazů.

V takovém podání není snadné pochopit, kdo na kom stál.

Přímý hierarchický přístup k popisu jazyka by byl příliš složitý. Hledání kruhového objezdu vede k popisu jazyka na základě jeho povahy řeči a příkazové stránky. Tak se zrodil systém vrstev, částečně se shodující s periodickým systémem Mendělejeva, který je také vrstva. Jak se ukázalo 42 let po vydání (1869), periodicita systému je spojena s elektronickým vrstvy (1911, Bohr-Rutherfordův model atomu). Také vrstvený a periodický systém jsou podobné v tabulkovém uspořádání všech jednotek na jedné stránce.

Popis jazykových útvarů je stručný – pouze 10 druhů výrazů a 8 druhů dalších útvarů, stejně jako významových a názorných. I když na první seznámení nezvyklé.

Jazykové jednotky jsou rozděleny do 6 úrovní:

  1. jednotky - řádky tabulky
  2. oddělení - zvláštní skupiny rodů (části první linie)
  3. rod - buňky (hlavní úroveň dělení)
  4. superspecies - separátory druhů (vzácná úroveň)
  5. typy - jednotkové vzorce ve spodní části buňky nebo samostatně
  6. vzory - samotné jednotky (pouze pro slova)

Ukázková slova popisuje slovník - samostatný subsystém tvořený stejnými šesti úrovněmi.

Řečová složka jazyka C je zcela zřejmá, i když si přesto zaslouží popis. Příkazová část jazyka ale přesně souvisí s řízením kompilace, při které vzniká třetí typ programu – příkaz. Zde se dostáváme k nejzajímavějšímu aspektu jazyka C: kráse.

4. NÁSLEDUJÍCÍ KAPITOLY. Pohledný Si

Jazyk C je základem moderního programování. Proč? Jednak kvůli největší korespondenci s řečí. Za druhé proto, že krásně obešel omezení strojového zpracování čísel.

Co konkrétně Xi navrhl? Obrázek a vrstva.

Slovo „image“ je překladem anglického slova „type“, které pochází z řeckého „prototype“ – „typ“. V ruském jazyce slovo „typ“ nevyjadřuje základní kámen vyjádřeného konceptu, navíc je zaměňováno s pomocným významem „typ“.

Zpočátku obraz řešil čistě strojový výpočetní problém a poté se stal přistávací dráhou pro zrod objektových jazyků.

Vrstva okamžitě vyřešila několik problémů - strojních i nanášených. Zvažování proto začne s obrázkem s jedním úkolem a přejde se na vrstvu s více úkoly.

Jednou z nepříjemných vlastností historického programování je, že většina pojmů, včetně základních, je uvedena bez definic. „Programovací jazyk (název řek) má celočíselné a plovoucí typy čísel...“ a škrábali dále. Není nutné definovat, co je „typ“ (obrázek), protože tomu sami autoři zcela nerozumí a „pro přehlednost“ to zamlčí. Pokud jsou přišpendlené na zeď, budou dávat vágní a zbytečnou definici. Hodně pomáhá skrývat se za cizí slova: pro ruské autory - za angličtinu (typ), pro Angličany - za francouzštinu (podprogram), řečtinu (polymorfismus), latinu (zapouzdření) nebo jejich kombinace (ad-hoc polymorfismus).

Ale to není náš osud. Naší volbou jsou definice se zvýšeným hledím v čisté ruštině.

Obrázek

Obrázek je prefigurativní název veličiny, definující 1) vnitřní vlastnosti veličiny a 2) výběr operací pro veličinu.

Slovo „typ“ (typ) odpovídá první části definice: „vnitřní vlastnosti veličiny“. Ale hlavní význam obrázku je v druhé části: „výběr operací k množstvím“.

Výchozím bodem pro zavedení obrázku v C je normální výpočet, jako je operace sčítání.

Papír Matematika, ať už psaná rukou nebo tištěná, příliš nerozlišuje mezi typy čísel, obvykle za předpokladu, že jsou skutečná. Proto jsou jejich zpracovatelské operace jednoznačné.

Strojovny Matematika striktně rozděluje čísla na celá čísla a zlomky. Různé typy čísel jsou různě uloženy v paměti a zpracovávány různými instrukcemi procesoru. Například instrukce pro sčítání celých čísel a zlomků jsou dvě různé instrukce odpovídající dvěma různým procesorovým uzlům. Ale neexistuje žádný příkaz pro přidávání celých a zlomkových argumentů.

Aplikovaný matematika, tedy jazyk C, odděluje typy čísel, ale kombinuje operace: sčítání pro celá čísla a/nebo zlomky se zapisuje jedním akčním znakem.

Jasná definice obrazu konceptu nám umožňuje rozhodně mluvit o dalších dvou konceptech: částku и úkon.

Velikost a provoz

hodnota — zpracovávané číslo.

Operace — zpracování hodnot počátečních hodnot (argumentů) pro získání konečného čísla (celkového).

Velikost a provoz spolu souvisí. Každá operace je veličina, protože má číselný výsledek. A každá hodnota je výsledkem přenosu hodnoty do/z registru procesoru, tedy výsledkem operace. Navzdory tomuto vztahu je hlavní věcí možnost jejich samostatného popisu, byť s opakováním jednoho slova v různých částech slovníku, což se v MA3 děje.

Strojový přístup rozdělil všechna čísla používaná programátorem na týmy и data. Dříve byly obě čísla, například příkazy byly psány v číselných kódech. V aplikovaných jazycích však příkazy přestaly být čísly a staly se slova и akční znamení. Čísly zůstávají pouze „data“, ale je absurdní je tak nadále nazývat, protože při přechodu od strojového k matematickému pohledu jsou čísla veličinami, které se dělí originálem (data) a konečná (Požadované). „Neznámý údaj“ bude znít hloupě.

Týmy byly také rozděleny do dvou typů akcí: matematické a servisní. Matematické děje - operace. K oficiálním věcem se dostaneme později.

V jazycích C se obvyklé jednoznačné nebo jednoduché matematické operace na papíře a stroji téměř všeobecně stávají vícenásobnými.

Více operací je několik operací stejného jména s různými typy argumentů a různými akcemi, které mají podobný význam.

Celočíselné argumenty odpovídají celé operaci a zlomkové argumenty odpovídají zlomkové operaci. Tento rozdíl je zvláště zřetelný při operaci dělení, kdy výraz 1/2 dává celkem 0, nikoli 0,5. Takový zápis sice neodpovídá pravidlům papírové matematiky, ale jazyk C se je nesnaží (na rozdíl od Fortranu) dodržovat – hraje podle svého aplikovaný pravidla.

V případě míchání celých čísel a zlomků se započítává jediné správné přetypování hodnot argumentů — selektivní transformace hodnoty z jednoho obrázku do druhého. Při sečtení celého čísla a zlomkového čísla je výsledek zlomkový, takže obrázek operace zvedne operace převodu celočíselného argumentu na zlomkovou hodnotu.

Zbývá řada operací množnýa singl. Takové operace jsou definovány pouze pro jeden typ argumentů: dělení zbytek - celočíselné argumenty, skládání (bitové operace) - přirozená celá čísla. Ma3 označuje množství operací se znaky (#^) označujícími obrázky, pro které je operace definována. To je důležitá, ale dříve opomíjená vlastnost každé operace.

Všechny funkce jsou libovolné jednotkové operace. Výjimkou jsou operátoři - funkce bez závorek, zabudované do jazyka (původní operace).

Pomoc

Pomoc - akce doprovázející operaci.

Pokud považujeme operaci za hlavní akci, pak můžeme rozlišit dvě doprovodné, které operaci zajišťují a liší se od ní. Jsou to 1) variabilní řízení a 2) podřízenost. Tato akce se nazývá pomoc.

Zde musíme odbočit a říci samostatně o ruských překladech učebnic programování. V textu K/R bylo zavedeno nové slovo pro záznam akcí prohlášení (výraz), který se pokusil rozdělit koncepty strojového příkazu do různých akcí: 1) operace, 2) deklarace a 3) podřízení (nazývané „kontrolní konstrukce“). Tento pokus byl pohřben ruskými překladateli, kteří nahradili „výraz“ slovem „operátor“, což:

  1. se stal synonymem pro strojové slovo „příkaz“,
  2. se ukázalo být synonymem pro frázi „znak akce“,
  3. a také získal neomezený počet dalších hodnot. To znamená, že se změnil v něco podobného anglickému článku „uhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh“

Zvažte doprovodné akce, popř pomoc.

Variabilní ovládání

Variabilní ovládání (NAHORU) - vytváření/mazání proměnných buněk.
UE nastává implicitně při deklaraci proměnné, která je již zapsána z jiného důvodu – pro označení obrázku hodnoty. Explicitně je spravováno pouze jedno zobrazení další proměnné pomocí funkcí malloc() a free().

Je třeba poznamenat, že implicitní akce jsou pro psaní pohodlnější, protože nevyžadují psaní vůbec nic, ale je obtížnější jim porozumět - je obtížnější je vzít v úvahu a interpretovat.

Podřízení

Podřízení — připojit/zakázat sekce vrstvy.

Jazyk C nabízel aplikovanou metodu řízení pořadí akcí odlišnou od assembleru – podřízenost. Reflektuje a rozvíjí řečovou složitou větu s jasným rozdělením na hlavní část (podřadicí věta) a vedlejší část (sekce podúrovně/podprogram).

Jak prohlášení, tak podání jsou zcela postaveny na konceptu vrstvy.

Vrstva

Vrstva je omezená jednoúrovňová selektivní sada výrazů.

Vrstva explicitně a implicitně převzala několik úkolů najednou:

  1. organizování programu
  2. omezení viditelnosti jmen (implicitně),
  3. správa proměnných (paměťové buňky) (implicitní),
  4. definice vedlejších vět pro podřadnost,
  5. definice funkcí a výběrů a další.

Ve strojových jazycích neexistoval žádný koncept vrstvy, takže se neobjevil v K/R, a pokud tam něco nebylo, pak by jeho zavedení v následujících knihách bylo kacířstvím a volnomyšlenkářským. Pojem vrstva se proto vůbec neobjevil, ačkoliv je nesmírně užitečný a zcela zřejmý.

Bez vrstvy není možné stručně a jasně vysvětlit mnoho akcí a pravidel programu. Například proč je goto tak jednoduché jako tři kopejky špatné a choulostivá chvíle je dobrá. Můžete jen bezmocně nadávat, jako to udělal Dijkstra („dovednost programátorů je funkce, která nepřímo závisí na frekvenci výskytu příkazů goto v jejich programech.“ Zkrátka goto používají pouze kozy. Úroveň ospravedlnění je Bůh.) Pravda, není to tak děsivé, pokud vaše knihy nemusíme vysvětlovat vůbec nic, ale jak jsme již řekli, není to náš osud.

Mimochodem, dá se předpokládat, že Dan Ritchie nechal goto právě jako klíč pro hledání nějakého nejmenovaného konceptu, protože ve výrazu goto nebyla nouze ani krása. Bylo ale potřeba jednoduché a srozumitelné vysvětlení nových principů jazyka, které sám Richie nechtěl podat a které přesně vycházejí z konceptu vrstvy.

Odchylka

Odchylka — změna obvyklých vlastností nového názvu.

Nejdůležitější odchylka přesně souvisí s vlastnostmi vrstvy programu a je popsána jedním slovem „statická“, které má v každém typu vrstvy jiný význam.

5. POSLEDNÍ KAPITOLA. Shodnost aplikovaných jazyků

Aplikované jazyky jsou obrazný jazyky (s obrázkem, „zadaný“). Jsou založeny na explicitním nebo implicitním použití obrázku. Navíc se zde opět objevuje rozpor: explicitní obraz je srozumitelnější, ale méně pohodlný a naopak.

Matrjoška C. Vrstvený programový jazykový systém

(Rozvržení stolu ještě nebylo dodáno, proto je stůl zobrazen s obrázkem.)

Po C se vývoj aplikovaných jazyků ubíral cestou zvyšování jejich obraznosti. Nejdůležitější pro pochopení vysoké obraznosti je přímý potomek C – jazyka C++. Rozvíjí myšlenku libovolného výběru operací pro veličiny a ztělesňuje ji na základě syntetického výrazu výběr, který dostává nový název - objekt. Jazyk C++ však není tak stručný a výstižný jako jazyk C kvůli přetížení novými typy kolekcí as nimi spojenými pravidly. Mimochodem, pojďme mluvit o „přetížení“.

Přetížení a polymorfismus

Slovo „přetížení“ je zastaralý termín strojového učení pro tvorbu více operací.

Strojoví (systémoví) programátoři množství operace by mohly být nepříjemné: „Co znamená toto znaménko (+): sčítání celých čísel, sčítání zlomků nebo dokonce posouvání?! Za naší doby tak nepsali!" Odtud negativní konotace zvoleného slova („overkill“, „unavený“). Pro aplikačního programátora je více operací základním kamenem, hlavním úspěchem a dědictvím jazyka C, tak přirozené, že často nejsou rozpoznány.

V jazyce C++ množství rozšířena nejen na původní operace, ale i na funkce – jednotlivé i kombinované do tříd – metody. S více metodami přišla schopnost přepsat je v rozšířených třídách, čemuž se vágně říkalo „polymorfismus“. Kombinace polymorfismu a přetížení vytvořila výbušnou směs, která se rozdělila na dva polymorfismy: „pravdivý“ a „ad-hoc“. Tomu lze rozumět jen přes přidělená jména. Cesta k reklamě je dlážděna zahraničními jmény.

Deklarace tvaru „přetížení“ je lépe vyjádřena slovem dodatečné oznámení — přidání deklarace stejnojmenné funkce s argumenty jiného obrázku.

Lépe je nazvat deklaraci tvaru „polymorfismus“. opětovné vyhlášení — překrývající se deklarace v nové vrstvě rozšíření funkce stejného jména s argumenty stejného obrázku.

Pak bude snadné pochopit, že stejné metody různých obrázků (argumentů) - dodatečně oznámenoa jeden obrázek - znovu oznámeno.

Rozhodují ruská slova.

Přistávací dráha

Zvážení pojmů vysoce obrazných jazyků potvrzuje důležitost jasné definice základních pojmů. Se správně popsaným C bude výuka vysoce obrazných jazyků snadné a zábavné.

To je zvláště důležité pro implicitní vysoce obrazné jazyky (PHP, JavaScript). Pro ně je význam objektů (složených obrázků) ještě vyšší než v C++, ale samotný koncept obrázku se stává implicitním a nepolapitelným. Z hlediska pohodlnosti se zjednodušily, ale z hlediska porozumění ztížily.

Proto byste se měli začít učit programovací jazyky s jazykem C a posouvat se dále v pořadí, ve kterém se jazyky rodiny C objevují.

Totéž platí pro popis jazyků. Různé jazyky mají stejnou nebo menší sadu rodů jednotek než jazyk C. Počet typů a vzorků se může lišit v obou směrech: C++ má více typů než C, zatímco JavaScript jich má méně.

Zvláštní zmínku si zaslouží jazyk MySQL. Zdálo by se, že nemá nic společného, ​​ale Matrjoška ho dokonale popisuje a jeho poznávání je rychlejší a snazší. Což je důležité vzhledem k jeho důležitosti pro web – jídelní cestu moderního programování. A kde je MySQL, tam jsou další SQL. No a všemožné Fortran-Pascal-Pythony popisuje i Matrjoška, ​​jakmile se jim dostane do rukou.

Čekají nás tedy skvělé věci - aplikovaný popis jazyka C a jednotný popis jazyků, které na něj navazují. „Naše cíle jsou jasné, naše úkoly jsou definované. Do práce, soudruzi! (Bouřlivý, dlouhotrvající potlesk, přecházející v ovace. Všichni vstanou.)“

Vaše názory budou naslouchány s velkou pozorností, vaše pomoc při tvorbě webu hnízdících panenek bude přijata s velkou vděčností. Podrobnější informace o knize jsou na webu, chytře ukrytém v Matrjoška C.

Zdroj: www.habr.com

Přidat komentář