Matryoshka C. Vrstevnatý systém jazyka programu

Představme si chemii bez Periodické tabulky prvků Mendělejeva (1869). Kolik prvků by bylo třeba mít na paměti, navíc v libovolném pořadí... (Tehdy - 60.)

K tomu stačí myslet na jeden nebo více programovacích jazyků najednou. Ty samé pocity, ten samý tvůrčí chaos.

A nyní můžeme prožít pocity chemiků 19. století, když jim byla nabídnuta veškerá jejich znalost, ba i něco navíc, v jedné Periodické tabulce.

Matryoshka C. Vrstevnatý systém jazyka programu


Kniha „Matryoshka C. Vrstevnatý systém programovacího jazyka“ představuje všechny jednotky jazyka C jako na dlani. To umožňuje je uspořádat, opravit zastaralé informace a dokonce upřesnit samotný pojem programu.

Dnes potřebují informace o programování systematizaci ještě více než chemické prvky před 150 lety.

První potřebou je výuka. Mendělejev začal vytvářet svůj systém, když stál před otázkou – od kterého prvku začít přednášet: O, H, N, He, Au... Bylo to pro něj jednodušší - učil chemii nejlepší studenty z Petrohradské univerzity. Programování se již učí ve školách a brzy začne i v mateřských školách.

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

Třetí potřebou je upřesnění pojmu programu.

Současné programování se jednou nohou zaseklo v 50. letech 20. století. Tehdy byly programy jednoduché, zatímco stroje a strojové jazyky - složité, takže vše se točilo kolem strojů a jazyků.

Teď je vše naopak: programy jsou složité a primární, jazyky jsou jednoduché a sekundární. Tomu se říká aplikovaný přístup, který je všem jaksi známý. Ale studenty a vývojáře stále přesvědčují, že je vše stejně jako dříve.

Co nás vrací k první přednášce privat-docenta Mendělejeva. Co říkat prvákům? Kde je pravda? To je otázka.

Svoje odpovědi přináší kniha „Matryoshka C. Vrstevnatý systém programovacího jazyka“. Přičemž je určena nejen studentům, ale i připraveným programátorům, protože pravdu hledat a převracet světové názory by právě měli oni, tedy my.

Následuje stručný obsah knihy.

1. Úvod

V roce 1969 byl vytvořen jazyk C, který se stal základním programovacím jazykem a už 50 let jím zůstává. Proč tomu tak je? V první řadě proto, že C je aplikovaný jazyk, který dodává programu lidský vzhled namísto strojového. Tento úspěch potvrdily jazyky z rodiny C: C++, JavaScript, PHP, Java, C# a další. Za druhé, je to stručný a krásný jazyk.

Nicméně, samotný jazyk C je obvykle zaměňován se strojovým assemblerem, čímž se komplikuje a zkresluje jeho vnímání. Druhým extrémem je vnucování k jazyku jakési 'filozofie': procedurální, objektové, funkční, kompilované, interpretované, typované a tak dále. To přidává emoce, ale nepomáhá lépe popsat jazyk.

Pravda leží uprostřed, a to pro jazyk C - přesně uprostřed mezi filosofickým a strojovým vnímáním.

Jazyk C není autonomní, podřizuje se běžnému písemnému projevu, a zároveň – sám řídí jazyk assembleru. Tento stav popisuje Modell programové řeči, podle které je program rozdělen do tří podřízených typů: řečový, kódový, příkazový. Jazyk C odpovídá za druhý, kódový typ.

Definováním místa jazyka v programu je možné uspořádat informace o něm, což tvoří Systém vrstevného jazyka programu, který představuje jazyk C ve stylu Mendělejevovy soustavy - na jedné stránce.

Systém je postaven s ohledem na společnost aplikovaných jazyků, vyplývající z jejich jazykové podřízenosti. Jedna sada jednotek Matryoshky C umožňuje popisovat a porovnávat různé jazyky, vytvářející řadu Matryoshk: C++, PHP, JavaScript, C#, MySQL, Python a tak dále. Je správné a vhodné, že různé jazyky jsou popisovány jednotkami základního jazyka.

2. KAPITOLA 1. Modello programové řeči. Srozumitelné C

V první kapitole je představena model programové řeči, který odráží aplikační přístup. Podle něj má program tři očividné sekvenční typy:

  1. řečový – přímá řeč programátora, který řeší úlohu,
  2. kódový – kódování řešení do matematické podoby v jazyce C (nebo v jakémkoli jiném)
  3. a příkazový – bezprostřední strojové příkazy.

Model programové řeči vysvětluje, proč je C jednoduchý a srozumitelný jazyk. C je postaven na obraz a podobu běžné lidské řeči.

První typ programu — 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é postupně převádějí činnosti do kódového jazyka. A podle tohoto vzoru byl vytvořen jazyk C.

Úvahy programátora, vyjádřené řečí, se transformují do kódového číselného vyjádření. Tuto transformaci bychom měli nazvat odrazem, protože řeč a kód mají jednu podstatu (odraz — zrození — druh). To je zcela zřejmé, pokud porovnáme řečový (vlevo) a kódový (vpravo) typ programu.

Matryoshka C. Vrstevnatý systém jazyka programu

Je zajímavé, že odraz probíhá velmi jednoduše — pouhými 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 úkol odrazu konkrétně. Proto se musíme pustit do tvoření a zavést tyto názvy.

Výběr slov musí být přesný a jasný. K tomu byl zapotřebí zvláštní přístup, stručně vyjádřený takto — přísné používání rodného jazyka. Pro Angličany by to byla angličtina, ale my nejsme Angličané. Takže použijme to, co máme, a budeme se snažit mluvit rusky.

Odraz provádějí dva typy výrazů:

  1. výpočet (Vč) — odráží změnu vlastností předmětu. Vlastnost předmětu je vyjádřena číslem, pak akce nad vlastností — to je akce nad číslem — operace.
  2. podřízení (Pč) — odráží změnu pořadí akcí. Prototypem Pč je věta složená uvedená pomocí podřadících spojek "pokud", "jinak", "zatímco", "pro". Ostatní typy Pč je doplňují.

Mimochodem, můžete uvěřit, že v popisu jazyka C není název pro výrazy výpočet — nazývají se prostě "výrazy"? Po tom už nepřekvapí absence názvu a sjednocení pro typ podřízení, a vůbec chudost, co se názvů, definic a generalizací týče. Je to proto, že slavný K/R ("Jazyk C", Kernighan/Ritchie, 1978) není popisem, ale příručkou pro použití jazyka.

Nicméně mít popis jazyka by bylo přece jen žádoucí. Proto ho nabízí Systém vrstevného jazyka programu.

3. KAPITOLA 2. Složený systém. Stručný C

Jakýkoli popis by měl být přesný a maximálně stručný. V případě programového jazyka je přímý popis obtížný.

Máme program. Skládá se z modulů. Moduly se skládají z podprogramů a výběrů (structure). Podprogramy se skládají z jednotlivých výrazů: deklarací, výpočtů, podřízených frází. Podřízených frází je celkem deset typů. Podřízení připojují podúrovně a podprogramy. Deklarací je také několik. Navíc, deklarace jsou zahrnuty nejen do podprogramů a podúrovní, ale i do modulů a výběrů. Většina výrazů se skládá ze slov, která je tak složité popsat, že se obvykle poskytují ve dvou seznamech – základní a odvozená slova, se kterými se bude seznamovat během celého studia a používání jazyka. Přidáme k tomu interpunkční znaménka a další řadu výrazů.

V takovém vyjádření je těžké pochopit, kdo na kom stál.

Přímý hierarchický přístup k popisu jazyka by byl nadměrně složitý. Hledání obchvatných cest vede k popisu jazyka na základě jeho řečové povahy a příkazové stránky. Tak se zrodil Svrstvený systém, který částečně koresponduje s Periodickou soustavou prvků, jež také je vrstvený. Jak se ukázalo 42 let po svém vydání (1869), periodičnost soustavy souvisí s elektronickými vrstvami (1911, model Bohr-Rutherfordova atomu). Také Svrstvený a Periodický systém spojuje tabulkové uspořádání všech jednotek na jedné stránce.

Popis jazykových jednotek je stručný - pouze 10 rodů výrazů a 8 rodů dalších jednotek, a přitom obsahový a názorný. I když poněkud nezvyklý pro první seznámení.

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

  1. třídy – řádky tabulky
  2. oddělení – zvláštní skupiny rodů (části první řady)
  3. rody – buňky (hlavní úroveň dělení)
  4. nadzdroje – oddělovače typů (vzácná úroveň)
  5. typy – vzorce jednotek ve spodní části buňky nebo samostatně
  6. vzory – samotné jednotky (pouze pro slova)

Vzory slov popisuje slovník – samostatná podpůrná soustava složená ze stejných šesti úrovní.

Rétorická složka jazyka C je zcela zřejmá, i když stále zasluhuje popis. Příkazová část jazyka je ale spojena s řízením kompilace, během níž vzniká třetí typ programu – příkazový. Tím se dostáváme k té nejzajímavější stránce jazyka C – kráse.

4. NÁSLEDNÍ KAPITOLY. Krásný C

Jazyk C leží v základech moderního programování. Proč? Za prvé kvůli největší shodě s mluveným jazykem. Za druhé, protože elegantně obchází omezení strojového zpracování čísel.

Co konkrétně C nabídlo? Typ a vrstvu.

Slovo „typ“ je překlad anglického slova „type“, které pochází z řeckého „protótipos“ — „předobraz“. V češtině slovo „typ“ nevyjadřuje klíčovost pojmu a navíc se míchá se služebním významem „druh“.

Původně typ řešil čistě strojovou úlohu výpočtu, a pak se stal odrazovým můstkem pro vznik objektových jazyků.

Vrstva okamžitě řešila několik úloh — jak strojových, tak aplikovaných. Proto bude zkoumání zahájeno s jednou úlohou a přejde k vícero úlohám.

Jednou z nepříjemných vlastností historického programování je, že většina pojmů, včetně základních, je podávána bez definic. „Programovací jazyk (název řek) má celé a plovoucí typy čísel...“ — a pokračujeme dál. Co je „typ“ (typ) — definovat není nutné, protože autoři sami to nepochopili a zamotají to „pro jasnost“. Pokud je přitlačíme ke zdi, poskytnou vágní a k ničemu užitečné definice. Velmi pomáhá schovat se za cizími slovy: pro ruské autory — za anglickými (typ), pro Angličany — za francouzskými (subroutine), řeckými (polymorfismus), latinskými (enkapsulace) nebo jejich kombinacemi (polymorfismus ad-hoc).

Ale to není náš osud. Naší volbou jsou definice s vyzdviženým štítem v čisté češtině.

Obraz

Obraz — je to předobrazné jméno veličiny, které určuje 1) vlastní vlastnosti veličiny a 2) výběr operací k veličině.

Slovu „typ“ odpovídá první část definice: „vlastní vlastnosti veličiny“. Ale hlavní smysl typu je ve druhé části: „výběr operací k veličinám“.

Výchozí bod pro zavedení typu v jazyce C je běžný výpočet, například operace sčítání.

Papírová matematika, zapisovaná ručně nebo tiskem, nedělá žádné zvláštní rozlišení mezi druhy čísel, obvykle je považuje za reálná. Proto jsou operace jejich zpracování jednoznačné.

Strojová Matematika striktně dělí čísla na celá a zlomek. Různé typy čísel se v paměti ukládají různě a zpracovávají se různými instrukcemi procesoru. Například instrukce pro sčítání celých a zlomkových čísel jsou dvě různé instrukce, které odpovídají dvěma různým uzlům procesoru. Na druhou stranu instrukce pro sčítání celého a zlomek argumentů chybí.

Aplikovaná matematika, tedy jazyk C, rozdělí typy čísel, ale sjednocuje operace: sčítání pro celá a/nebo zlomková čísla se zapisuje jedním operátorem.

Jasné definování pojmu obraz nám umožňuje určitě mluvit o dvou dalších pojmech: magnitude a operace.

Měřítko a operace

Měřítko — zpracovávané číslo.

Operace — zpracování hodnot původních veličin (argumentů) s cílem získat konečné číslo (výsledek).

Měřítko a operace jsou vzájemně propojeny. Každá operace je měřítkem, protože má číselný výsledek. A každé měřítko je výsledkem přenosu hodnoty do registru procesoru/z procesoru, tedy — výsledkem operace. Navzdory této vzájemné vazbě je však hlavní možnost jejich odděleného popisu, i když se jedno slovo opakuje v různých oddílech slovníku, což se také děje v ma3.

Strojový přístup rozděloval všechna čísla používaná programátorem na příkazů. a data. Dříve byla obě čísla skutečně čísly, například instrukce byly psány číselnými kódy. Nicméně v aplikačních jazycích přestaly být instrukce čísly a staly se slovy a operátory. Z čísly zůstaly pouze „data“, ale pokračovat v jejich nazývání takto je směšné, protože z pohledu strojové matematiky jsou čísla veličinami, které se dělí na vstupní (data) a výstupní (hledané). „Neznámá data“ - to by znělo hloupě.

Instrukce se také rozdělily do dvou typů akcí: matematické a servisní. Matematické akce - operace. Na servisní se podíváme později.

V jazyce C konvenční papírové a strojové jednoznačné, nebo jednoduché, matematické operace téměř výhradně přecházejí na mnohonásobné.

Mnohonásobné operace – několik operací se stejným názvem s různými obrazy argumentů a různými, smyslově blízkými, akcemi.

Celým argumentům odpovídá celá operace, ředným — ředná. Tento rozdíl je obzvlášť patrný při operaci dělení, kdy výraz 1/2 dává výsledek 0, a ne 0,5. Takový zápis neodpovídá pravidlům papírové matematiky, ale jazyk C se o to ani nesnaží (na rozdíl od Fortranu) — hraje podle svých aplikovaných pravidel.

V případě smíchání celých a ředných čísel se aktivuje jediné správné přizpůsobení hodnot argumentů — výběrová konverze hodnoty z jednoho formátu do jiného. Opravdu, při sčítání celého a ředného čísla je výsledek — ředný, takže forma operace se přizpůsobuje operaci konverze celého argumentu na řednou hodnotu.

Řada operací zůstává ne množná, a jednotná. Takové operace jsou definovány pouze pro jeden typ argumentů: zbytek dělení — celá čísla, bitové operace — přirozená celá. Ma3 označuje množnost operací znakem (#^) s vyznačením forem, 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é jednotné operace. Výjimku tvoří operátory — bezokrajové funkce, integrované do jazyka (původní operace).

Podpora

Podpora — doprovodná akce operace.

Pokud považujeme operaci za hlavní akci, lze vyčlenit dvě doprovodné, které zajišťují operaci a liší se od ní. To je 1) řízení proměnné a 2) podřízenost. Taková akce se nazývá podpora.

Zde je třeba se odchýlit a zvlášť hovořit o ruských překladech učebnic programování. V textu K/R bylo zavedeno nové slovo pro zápis akcí statement (výraz), které se pokusilo oddělit pojmy strojového příkazu na různé akce: 1) operaci, 2) deklaraci a 3) podřízenost (nazvanou „řídící konstrukce“). Tento pokus zrušili ruští překladatelé, kteří nahradili „výraz“ slovem „operátor“, které:

  1. se stalo synonymem strojového slova „příkaz“
  2. , stalo se synonymem slovního spojení „znak akce“
  3. a také získalo neomezený počet dalších významů. To znamená, že se proměnilo na něco podobného anglickému článku „ehhh…“.

Pojďme se podívat na doprovodné akce, nebo podpory.

Řízení proměnné

Řízení proměnné (UP) — vytvoření/odstranění buněk proměnné.
UP se provádí neexplicitně při deklaraci proměnné, která je již napsána za jiným účelem — pro určení podoby velikosti. Výhradně se spravuje pouze jeden typ přídavných proměnných pomocí funkcí malloc() a free().

Je třeba poznamenat, že neexplicitní akce jsou pohodlnější pro psaní, protože vlastně nevyžadují nic psát, ale jsou složitější k pochopení — hůře se zohledňují a vykládají.

Podřízenost

Podřízenost — připojení/odpojení vrstvených částí.

Jazyk C nabídl jiný než assembler, praktický způsob řízení pořadí akcí — podřízenost. Odráží a rozvíjí složené věty s jasným rozdělením na hlavní část (věta podřízenosti) a vedlejší část (části podúrovně/podprogramu).

I deklarace, i podřízenost jsou plně postaveny na pojmu vrstva.

Vrstva

Vrstva — to je omezená jednovrstvá selektivní sada výrazů.

Vrstva jasně a neexplicitně převzala na sebe provádění několika úloh:

  1. úprava programu,
  2. omezení viditelnosti jmen (neexplicitně),
  3. řízení proměnnými (buňkami paměti) (neexplicitně),
  4. určení vedlejších částí pro podřízenost,
  5. definování funkcí a výběrů a další.

V strojových jazycích neexistoval pojem vrstva, a proto se neobjevil ani v K/R, a pokud něco tam nebylo — zavádění to v následujících knihách by bylo herezí a volnomyslností. Proto pojem vrstva vůbec nevznikl, přestože je mimořádně užitečný a zcela zřejmý.

Bez vrstvy není možné krátce a jasně vysvětlit mnoho akcí a pravidel programu. Například proč je prosté jako tři haléře goto — špatné, zatímco složité while — dobré. Můžete pouze bezmocně nadávat, jak to dělal Dijkstra („kvalifikace programátorů — funkce, která se nepřímo odvíjí od četnosti výskytu příkazů goto v jejich programech“. Zkrátka, pouze kozy používají goto. Úroveň oprávnění — Bůh.) Právě to není tak hrozné, pokud vaše knihy nic nemusí vysvětlovat, ale jak jsme již řekli, to není náš osud.

Mimochodem lze předpokládat, že Den Ritchie zanechal goto právě jako klíč k hledání jakéhosi bezejmenného pojmu, protože v samotném výrazu goto nebylo žádné potřebné ani krásné. Místo toho byla potřeba jednoduchého a srozumitelného vysvětlení nových principů jazyka, které sám Ritchie nechtěl poskytnout, a které jsou právě založeny na pojmu vrstva.

Odchylka

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

Nejdůležitější odchylka se spojena se strukturovanými vlastnostmi programu a popisuje se jedním slovem „static“, které má různé významy v každém typu vrstvy.

5. POSLEDNÍ KAPITOLA. Obecnost aplikačních jazyků

Aplikační jazyky — to jsou obrazné jazyky (mající obraz, „typizované“). Jsou založeny na výslovném nebo nevyjádřeném použití obrazu. A opět se zde projevuje rozpor: výslovný obraz — je srozumitelnější, ale méně praktický, a naopak.

Matryoshka C. Vrstevnatý systém jazyka programu

(Rozvržení tabulky zatím nebylo dodáno, proto je tabulka uvedena jako obrázek.)

Po C se vývoj aplikačních jazyků ubíral cestou zvyšující se obraznosti. Nejdůležitějším pro pochopení vysoké obraznosti je přímý potomek C — jazyk C++. Rozvíjí myšlenku libovolného párování operací k hodnotám a realizuje ji na základě C-ového výrazu párování, který dostává nové jméno — objekt. Nicméně C++ není tak stručný a výstižný jako C, kvůli přetížení nových typů párování a s nimi spojených pravidel. Mimochodem, pojďme mluvit o „přetížení“.

Přetížení a polymorfismus

Slovo „přetížení“ (overload) — zastaralý termín strojového přístupu, označující vytváření vícečetných operací.

Strojových (systémových) programátorů množství operací mohlo skutečně rozčilovat: „Co znamená tento znak (+): sčítání celých čísel, sčítání zlomkových čísel nebo vůbec posun?! Za našich časů se takhle nepíšou!“ Odtud negativní nádech zvoleného slova („přetížení“, „unavený“). Pro aplikačního programátora jsou vícečetné operace základním kamenem, hlavním dosažením a dědictvím jazyka C, tak přirozené, že jsou často nevědomé.

V jazyce C++ množství rozšířila se nejen na základní operace, ale i na funkce — jak jednotlivé, tak sloučené do tříd — metody. Spolu s mnoha metodami se objevila možnost jejich přep definitions v rozšířených třídách, která byla vágně označena jako „polymorfismus“. Kombinace polymorfismu a přetížení vytvořila výbušnou směs, která se rozdělila na dva polymorfismy: „pravý“ a „ad-hoc“. Rozluštit to lze jen v rozporu s přiřazenými názvy. Cizí názvy vyšlapaly cestu k ad.

Oznámení typu „přetížení“ by bylo lépe vyjádřit slovem dodatečné oznámení — přidání oznámení stejnojmenné funkce s argumenty jiného typu.

Oznámení typu „polymorfismus“ by bylo lepší nazvat slovem přeobjednání — překrývající se oznámení v novém rozšiřujícím rámci stejnojmenné funkce s argumenty stejného typu.

Pak bude snadné pochopit, že stejnojmenné metody různých typů (argumentů) — dodatečně oznamovány, a jednoho typu — přeobjednávány.

Ruská slova to vyjasní.

Vstupní dráha

Zvažování pojmů vysoce typizovaných jazyků potvrzuje důležitost jasného vymezení základních pojmů. S dobře popsáným C bude studium vysoce typizovaných jazyků snadné a příjemné.

To je obzvlášť důležité pro implicitní vysoce typizované jazyky (PHP, JavaScript). Pro ně důležitost objektů (složených typů) stává ještě vyšší než v C++, ale samotný pojem typu se stává implicitním a obtížně uchopitelným. Z hlediska pohodlí se staly jednoduššími, ale z hlediska pochopení — složitějšími.

Proto byste měli začít studium programovacích jazyků jazykem C a pokračovat dál v pořadí vzniku jazyků rodiny C.

Totéž platí pro popis jazyků. Různé jazyky mají shodující se, nebo menší soubor rodin jednotek než jazyk C. Počet typů a vzorů může v obou směrech kolísat: u C++ je typů více než u C, u JavaScriptu — méně.

Zvláštní zmínku zaslouží jazyk MySQL. Připadá si to — nic společného, ale skvěle je popsán Matryoshkou, a seznámení s ním se stává rychlejším a jednoduším. Co je důležité, vzhledem k jeho významu pro web — rychlost moderního programování. A kde je MySQL, tam jsou i ostatní SQL. No, a všechny fortrany-pascaly-pythony také jsou popsány Matryoshkou, jakmile se na to dostanou ruce.

Takže nás čekají velké věci — praktický popis jazyka C a jednotné popisy dalších následujících jazyků. „Naše cíle jsou jasné, úkoly stanovené. Do práce, soudruzi! (Bouřlivý, dlouhý potlesk, přecházející v ovaci. Všichni vstávají.)“

Vaše názory budou vyslechnuty s velkou pozorností, vaše pomoc při vytváření webu matrjošek bude přijata s obrovskou vděčností. Podrobnější informace o knize naleznete na webu, tajně ukrytém v matrjošce C.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster