Matryoshka C. Programspråkssystem i lager

Låt oss försöka föreställa oss kemi utan Mendeleevs periodiska system (1869). Hur många element måste man ha i åtanke, och i ingen speciell ordning... (Då - 60.)

För att göra detta, tänk bara på ett eller flera programmeringsspråk på en gång. Samma känslor, samma kreativa kaos.

Och nu kan vi återuppleva känslorna hos XNUMX-talets kemister när de erbjöds all sin kunskap, och lite till, i ett periodiskt system.

Matryoshka C. Programspråkssystem i lager


Boken "Matryoshka C. Layered system of program language" presenterar alla enheter i C-språket på ett ögonkast. Detta låter dig organisera dem, korrigera föråldrad information och till och med förtydliga själva konceptet med programmet.

Idag behöver programmeringsinformation systematiseras ännu mer än vad kemiska grundämnen gjorde för 150 år sedan.

Den första nödvändigheten är undervisning. Mendeleev började skapa sitt system när han stod inför frågan om vilket element han skulle börja föreläsa med: O, H, N, He, Au... Samtidigt var det lättare för honom - han lärde ut kemi till de bästa - studenter av St Petersburgs universitet. Och programmering lärs redan ut i skolan och börjar snart på dagis.

Det andra behovet är ett vetenskapligt förhållningssätt. Med hjälp av det periodiska systemet upptäcktes nya grundämnen och information om gamla korrigerades. Hon hjälpte till att skapa modellen för atomen (1911). Och så vidare.

Det tredje behovet är att klargöra begreppet program.

Modern programmering har en fot fast på 50-talet av XNUMX-talet. Då var program enkla, men maskiner och maskinspråk var komplexa, så allt kretsade kring maskiner och språk.

Nu är allt tvärtom: program är komplexa och primära, språk är enkla och sekundära. Detta kallas det tillämpade tillvägagångssättet, som alla verkar vara bekanta med. Men studenter och utvecklare fortsätter att vara övertygade om att allt är sig likt.

Vilket för oss tillbaka till den första föreläsningen av Privatdozent Mendeleev. Vad ska man berätta för förstaårsstudenter? Var är sanningen? Det är frågan.

Boken "Matryoshka C" ger sitt svar på denna fråga. Programspråkssystem i lager". Dessutom riktar det sig inte bara till studenter utan också till utbildade programmerare, eftersom det är de, det vill säga vi, som måste söka sanningen och förändra världsbilden.

Det som följer är en sammanfattning av boken.

1. Introduktion

1969 skapades språket C, som blev det grundläggande programmeringsspråket och har varit så i 50 år. Varför är det så? Först och främst eftersom C är det applicerad språket som gav programmet human se istället maskin. Denna prestation säkrades av språk från C-familjen: C++, JavaScript, PHP, Java, C# och andra. För det andra är det ett kort och vackert språk.

Men själva C-språket blandas vanligtvis med maskinmontör, vilket komplicerar och förvränger dess uppfattning. Den andra ytterligheten är införandet av en viss "filosofi" på språket: processuellt, objekt, funktionellt, sammanställt, tolkat, maskinskrivet och så vidare. Detta tillför känslor, men hjälper inte att beskriva språket bättre.

Sanningen ligger i mitten, och för C-språket är det strikt mitt emellan filosofisk och maskinell uppfattning.

C-språket är inte självständigt, det lyder vanligt skriftspråk, och samtidigt styr det själva assemblerspråket. Denna position beskriver Talmodell av programmet, enligt vilken programmet är uppdelat i tre underordnade typer: tal, kod, kommando. C-språket är ansvarigt för den andra kodtypen.

Efter att ha bestämt platsen för språket i programmet kan du organisera information om det, vilket gör Programspråksystem i lager, som representerar C-språket i det periodiska systemets anda - på en sida.

Systemet är byggt med hänsyn tagen gemenskaper av tillämpade språk, som härrör från deras talunderordning. En uppsättning Matryoshka C-enheter låter dig beskriva och jämföra olika språk, skapa en serie Matryoshkas: C++, PHP, JavaScript, C#, MySQL, Python och så vidare. Det är värt och korrekt att olika språk beskrivs av enheter av det grundläggande språket.

2. KAPITEL 1. Talmodell av programmet. Rensa C

Det första kapitlet presenterar programmets talmodell, vilket återspeglar ett tillämpat tillvägagångssätt. Enligt honom har programmet tre uppenbara sekventiella typer:

  1. tal - direkt tal från programmeraren som löser problemet,
  2. kodad - koda en lösning till en matematisk form i C-språk (eller något annat)
  3. och kommando - direkta maskinkommandon.

Talmodellen förklarar varför C är ett enkelt och begripligt språk. Xi är byggd i bilden och likheten av mänskligt tal som är bekant för oss.

Den första typen av program är programmerarens direkta tal. Tal motsvarar mänskligt tänkande. Nybörjarprogrammerare skriver program med tal - först på ryska, sedan steg för steg översätter åtgärderna till ett kodspråk. Och det är just på denna modell som C-språket skapades.

Programmerarens slutsatser, uttryckta i tal, omvandlas till en kodad numerisk form. Denna omvandling bör kallas reflexion, eftersom tal och kod har samma karaktär (reflektion - födelse - kön). Detta är ganska uppenbart om vi jämför tal (till vänster) och kod (till höger) typer av programmet.

Matryoshka C. Programspråkssystem i lager

Det är konstigt att reflektion sker väldigt enkelt – med bara två typer av uttryck.

Den moderna beskrivningen av C-språket (från 1978) innehåller dock inte en tillräcklig namnlista vare sig för att beskriva språket i allmänhet, eller för reflektionsuppgiften i synnerhet. Därför är vi tvungna att vara kreativa och introducera dessa namn.

Ordvalet ska vara exakt och tydligt. Detta krävde ett speciellt tillvägagångssätt, kort uttryckt som följer: strikt användning av modersmålet. För engelsmännen skulle det vara engelska, men vi är inte engelsmän. Så vi använder det vi har och försöker prata ryska.

Reflektion utförs av två typer av uttryck:

  1. beräkning (HF) - återspeglar en förändring av egenskaperna hos ett objekt. Egenskapen för ett objekt uttrycks med ett tal, sedan är en åtgärd på en egenskap en åtgärd på ett tal - en operation.
  2. underordning (Pch) - återspeglar en förändring i ordningen på åtgärder. Prototypen av Pch är en talkomplex mening, därför börjar de flesta typer av Pch med underordnade konjunktioner "om", "annars", "medan", "för". Andra typer av datorer kompletterar dem.

Förresten, kan du tro att det i C-beskrivningen inte finns något namn för beräkningsuttryck - de kallas helt enkelt "uttryck"? Efter detta kommer det inte längre att vara förvånande att det inte finns något namn och samband för typen av underordning, och faktiskt bristen på namn, definitioner och generaliseringar i allmänhet. Detta beror på att det berömda K/R (”The C Language”, Kernighan/Ritchie, 1978) inte är en beskrivning, utan en guide till att använda språket.

Jag skulle dock fortfarande vilja ha en beskrivning av språket. Därför erbjuds han Programspråksystem i lager.

3. KAPITEL 2. Lagersystem. Kort C

Varje beskrivning måste vara korrekt och extremt kortfattad. När det gäller ett programspråk är en frontalbeskrivning svår.

Här har vi ett program. Den består av moduler. Moduler består av subrutiner och samlingar (struktur). Subrutiner består av individuella uttryck: deklarationer, beräkningar, underordning. Det finns så många som tio typer av underordning. Underordning kopplar samman undernivåer och underrutiner. Det finns också flera annonser. Deklarationer ingår dock inte bara i underrutiner och undernivåer, utan även i moduler och samlingar. Och de flesta uttryck består av ord som är så svåra att beskriva att de vanligtvis helt enkelt anges i två listor – originalord och härledda ord, som du kommer att bli bekant med under hela inlärningen och användningen av språket. Låt oss lägga till skiljetecken och ett antal andra uttryck till detta.

I en sådan presentation är det inte lätt att förstå vem som stod på vem.

En direkt hierarkisk metod för att beskriva ett språk skulle vara alltför komplex. En rondellsökning leder till en beskrivning av språket utifrån dess talkaraktär och kommandosida. Således föddes lagersystemet, delvis sammanfallande med Mendeleevs periodiska system, vilket också är lager. Som det visade sig 42 år efter publiceringen (1869), är systemets periodicitet förknippad med elektronisk skikten (1911, Bohr-Rutherfords modell av atomen). Dessutom är de skiktade och periodiska systemen lika i tabellarrangemanget för alla enheter på en sida.

Beskrivningen av språkenheter är kortfattad - endast 10 typer av uttryck och 8 typer av andra enheter, samt meningsfulla och visuella. Även om det är ovanligt för den första bekantskapen.

Språkenheter är indelade i 6 nivåer:

  1. enheter - tabellrader
  2. avdelningar - särskilda grupper av släkten (delar av första raden)
  3. släkte - celler (huvudnivå av division)
  4. superarter - artavskiljare (sällsynt nivå)
  5. typer - enhetsformler längst ner i cellen eller separat
  6. mönster - själva enheterna (endast för ord)

Exempelord beskriver dictionary - Ett separat delsystem som består av samma sex nivåer.

Talkomponenten i C-språket är ganska uppenbar, även om den fortfarande förtjänar beskrivning. Men kommandodelen av språket är exakt relaterad till kompileringskontroll, under vilken den tredje typen av program skapas - kommando. Här kommer vi till den mest spännande aspekten av C-språket: skönhet.

4. FÖLJANDE KAPITEL. Snygg Si

C-språket är grunden för modern programmering. Varför? För det första på grund av den största korrespondensen till tal. För det andra för att den på ett vackert sätt kringgick begränsningarna för bearbetning av maskinnummer.

Vad exakt föreslog Xi? Bild och lager.

Ordet "bild" är en översättning av det engelska ordet "type", som kommer från grekiskan "prototyp" - "typ". På det ryska språket förmedlar ordet "typ" inte hörnstenen i begreppet som uttrycks; dessutom förväxlas det med den extra betydelsen "typ".

Till en början löste bilden ett rent maskinellt beräkningsproblem, och blev sedan en bana för födelsen av objektspråk.

Skiktet löste genast flera problem – både maskinellt och applicerat. Därför kommer övervägandet att börja med en enuppgiftsbild och gå vidare till ett fleruppgiftslager.

En av de obehagliga egenskaperna hos historisk programmering är att de flesta begrepp, inklusive grundläggande, ges utan definitioner. "Programmeringsspråket (namnet på floder) har heltals- och flytande taltyper..." och de skrapade vidare. Det är inte nödvändigt att definiera vad en "typ" (bild) är, eftersom författarna själva inte helt förstår detta och kommer att tysta det "för tydlighetens skull." Om de fästs på väggen kommer de att ge en vag och värdelös definition. Det hjälper mycket att gömma sig bakom främmande ord: för ryska författare - bakom engelska (typ), för engelsmän - bakom franska (subrutin), grekiska (polymorfism), latin (inkapsling) eller deras kombinationer (ad-hoc polymorfism).

Men detta är inte vårt öde. Vårt val är definitioner med upphöjt visir på ren ryska.

bild

bild är ett prefigurativt namn på en kvantitet, som definierar 1) kvantitetens inneboende egenskaper och 2) valet av operationer för kvantiteten.

Ordet "typ" (typ) motsvarar den första delen av definitionen: "en kvantitets inneboende egenskaper." Men huvudinnebörden av bilden är i den andra delen: "val av operationer till kvantiteter."

Utgångspunkten för att introducera en bild i C är en normal beräkning, såsom additionsoperationen.

Papper Matematik, vare sig den är skriven för hand eller tryckt, gör inte mycket skillnad mellan typer av tal, vanligtvis förutsatt att de är verkliga. Därför är deras bearbetningsoperationer entydiga.

maskin Matematik delar strikt in tal i heltal och bråk. Olika typer av nummer lagras olika i minnet och bearbetas av olika processorinstruktioner. Till exempel är instruktionerna för att addera heltal och bråk två olika instruktioner som motsvarar två olika processornoder. Men det finns inget kommando för att lägga till heltals- och bråkargument.

Applicerad matematik, det vill säga C-språket, separerar taltyperna, men kombinerar operationer: addition för heltal och/eller bråk skrivs med ett åtgärdstecken.

En tydlig definition av begreppsbilden gör att vi definitivt kan prata om två andra begrepp: värde и drift.

Storlek och funktion

Värde — numret som behandlas.

Operation — bearbeta värdena för de initiala värdena (argument) för att erhålla det slutliga numret (totalt).

Storlek och drift hänger ihop. Varje operation är en kvantitet eftersom den har ett numeriskt resultat. Och varje värde är resultatet av att överföra ett värde till/från processorregistret, det vill säga resultatet av operationen. Trots detta förhållande är det viktigaste möjligheten till deras separata beskrivning, om än med upprepning av ett ord i olika delar av ordboken, vilket är vad som händer i MA3.

Maskinmetoden delade upp alla siffror som används av programmeraren i kommandon и uppgifter. Tidigare var båda siffror, till exempel skrevs kommandon i numeriska koder. Men i tillämpade språk upphörde kommandon att vara siffror och blev ord и åtgärdstecken. Endast "data" finns kvar som siffror, men det är absurt att fortsätta att kalla dem så, för i övergången från en maskin till en matematisk synvinkel är tal kvantiteter som delas med originalet (uppgifter) och sista (nödvändig). "Okänd datum" kommer att låta dumt.

Teamen delades också in i två typer av åtgärder: matematisk och service. Matematiska handlingar - operationer. Vi kommer till det officiella senare.

I C-språken blir de vanliga pappers- och maskinentydiga, eller enstaka, matematiska operationerna nästan universellt multipla.

Flera operationer är flera operationer med samma namn med olika typer av argument och olika, liknande innebörd, åtgärder.

Heltalsargument motsvarar en hel operation och bråkargument motsvarar en bråkdeloperation. Denna skillnad är särskilt tydlig under divisionsoperationen, när uttrycket 1/2 ger totalt 0, inte 0,5. En sådan notation motsvarar inte reglerna för pappersmatematik, men C-språket strävar inte efter att följa dem (till skillnad från Fortran) - det spelar enligt sina egna applicerad regler.

Vid blandning av heltal och bråk ingår det enda korrekta gjutning av argumentvärden — Selektiv omvandling av ett värde från en bild till en annan. Faktum är att när man lägger till ett heltal och ett bråktal blir resultatet bråktal, så bilden av operationen hämtar upp operationen att konvertera ett heltalsargument till ett bråktalsvärde.

Ett antal operationer återstår flertalOch enda. Sådana operationer definieras endast för en typ av argument: division rest - heltalsargument, stapling (bitvisa operationer) - naturliga heltal. Ma3 indikerar mångfalden av operationer med tecken (#^) som indikerar bilderna för vilka operationen är definierad. Detta är en viktig men tidigare förbisedd egenskap för varje verksamhet.

Alla funktioner är godtyckliga enhetsoperationer. Undantaget är operatörerna - icke-parentes funktioner, inbyggt i språket (ursprungliga operationer).

Bistånd

Bistånd - Åtgärder som åtföljer insatsen.

Om vi ​​betraktar operationen som huvudåtgärden, kan vi urskilja två medföljande som tillhandahåller operationen och skiljer sig från den. Dessa är 1) variabel styrning och 2) underställning. Denna åtgärd kallas bistånd.

Här måste vi avvika och säga separat om ryska översättningar av programmeringsläroböcker. Ett nytt ord infördes i texten till K/R för att registrera handlingar meddelandet (uttryck), som försökte dela upp begreppen för ett maskinkommando i olika åtgärder: 1) operation, 2) deklaration och 3) underordning (kallade "kontrollkonstruktioner"). Detta försök begravdes av ryska översättare och ersatte "uttryck" med ordet "operatör", vilket:

  1. har blivit synonymt med maskinordet "kommando",
  2. visade sig vara synonymt med frasen "tecken på handling",
  3. och fick även ett obegränsat antal ytterligare värden. Det vill säga, det har blivit något som liknar den engelska artikeln "uhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh"

Tänk på de medföljande åtgärderna, eller bistånd.

Variabel styrning

Variabel styrning (UPP) - skapa/ta bort variabla celler.
UE uppstår implicit när man deklarerar en variabel, som redan är skriven av en annan anledning - för att indikera bilden av värdet. Endast en vy hanteras explicit ytterligare variabler med funktionerna malloc() och free().

Det bör noteras att implicita handlingar är mer bekväma att skriva, eftersom de inte kräver att skriva någonting alls, men de är svårare att förstå - de är svårare att ta hänsyn till och tolka.

Underordning

Underordning — ansluta/avaktivera lagersektioner.

C-språket erbjöd en tillämpad metod för att kontrollera ordningsföljden på åtgärder, annorlunda än assembler - underordning. Den speglar och utvecklar en talkomplex mening med en tydlig uppdelning i huvuddelen (underordningssats) och underordnad del (undernivå/subrutinsektioner).

Både deklaration och inlämning bygger helt på konceptet skikt.

Lager

Lager är en begränsad selektiv uppsättning uttryck på en nivå.

Lagret tog explicit och implicit på flera uppgifter samtidigt:

  1. organisera programmet
  2. begränsar synligheten av namn (implicit),
  3. hantering av variabler (minnesceller) (implicit),
  4. definition av underordnade klausuler för underställning,
  5. definitioner av funktioner och urval och andra.

Det fanns inget begrepp för lager i maskinspråk, så det förekom inte i K/R, och om något inte fanns där skulle det vara kätteri och fritt tänkande att införa det i efterföljande böcker. Därför dök inte konceptet med ett lager upp alls, även om det är extremt användbart och ganska uppenbart.

Utan ett lager är det omöjligt att kort och tydligt förklara många av programmets åtgärder och regler. Till exempel, varför är goto så enkelt som tre kopek dåligt, och den knepiga stunden är bra. Du kan bara svära hjälplöst, som Dijkstra gjorde ("förmågan hos programmerare är en funktion som omvänt beror på frekvensen av förekomsten av goto-satser i deras program." Kort sagt, bara getter använder goto. Nivån av rättfärdigande är Gud.) Det är sant, det här är inte så skrämmande om dina böcker Vi behöver inte förklara någonting alls, men, som vi redan har sagt, detta är inte vårt öde.

För övrigt kan det antas att Dan Ritchie lämnade goto just som en nyckel för att söka efter något namnlöst begrepp, eftersom det inte fanns något behov eller skönhet i uttrycket goto. Men det behövdes en enkel och begriplig förklaring av de nya språkprinciperna, som Richie själv inte ville ge, och som är just baserade på konceptet. skikt.

Avvikelse

Avvikelse — ändring av det nya namnets vanliga egenskaper.

Den viktigaste avvikelsen är exakt relaterad till programmets lageregenskaper och beskrivs med ett ord "statisk", som har olika betydelse för varje typ av lager.

5. DET SISTA KAPITLET. Gemensamt för tillämpade språk

Tillämpade språk är bildlig språk (har en bild, "skrivet"). De är baserade på explicit eller implicit användning av bilden. Dessutom uppstår här igen en motsägelse: en explicit bild är mer förståelig, men mindre bekväm, och vice versa.

Matryoshka C. Programspråkssystem i lager

(Bordlayouten har ännu inte levererats, så bordet visas med bild.)

Efter C tog utvecklingen av tillämpade språk vägen att öka deras figurativitet. Det viktigaste för att förstå högt bildspråk är den direkta ättlingen till C - språket C++. Han utvecklar idén om ett godtyckligt urval av operationer för kvantiteter och förkroppsligar den på basis av det syntetiska uttrycksvalet, som får ett nytt namn - objekt. C++ är dock inte lika kortfattad och uttrycksfull som C på grund av överbelastningen av nya samlingstyper och deras associerade regler. Förresten, låt oss prata om "överbelastning".

Överbelastning och polymorfism

Ordet "överbelastning" är en föråldrad maskinlärande term för att skapa flera operationer.

Maskin (system) programmerare mångfald operationer kan mycket väl vara irriterande: "Vad betyder detta tecken (+): lägga till heltal, lägga till bråk eller till och med skifta?! På vår tid skrev de inte så!" Därav den negativa klangen av det valda ordet ("overkill", "trött"). För en applikationsprogrammerare är flera operationer hörnstenen, C-språkets främsta prestation och arv, så naturliga att de ofta inte känns igen.

På språket C++ mångfald utvidgas inte bara till de ursprungliga operationerna, utan också till funktioner - både individuella och kombinerade till klasser - metoder. Med flera metoder kom möjligheten att åsidosätta dem i utökade klasser, vilket vagt kallades "polymorfism". Kombinationen av polymorfism och överbelastning producerade en explosiv blandning som splittrades i två polymorfismer: "sant" och "ad-hoc." Det är möjligt att förstå detta endast trots de tilldelade namnen. Vägen till annons är kantad med utländska namn.

En deklaration av formen "överbelastning" uttrycks bättre i ordet ytterligare tillkännagivande — lägga till en deklaration av en funktion med samma namn med argument för en annan bild.

En deklaration av formen "polymorfism" kallas bättre återannonsering — en överlappande deklaration i ett nytt tilläggslager av en funktion med samma namn med argument för samma bild.

Då blir det lätt att förstå att samma metoder för olika bilder (argument) - dessutom meddelats, och en bild - tillkännagavs på nytt.

Ryska ord avgör.

Landningsbana

Övervägande av begreppen mycket figurativa språk bekräftar vikten av en tydlig definition av grundläggande begrepp. Med C korrekt beskrivet blir det enkelt och roligt att lära sig högfigurativa språk.

Detta är särskilt viktigt för implicita högst figurativa språk (PHP, JavaScript). För dem blir betydelsen av objekt (sammansatta bilder) ännu högre än i C++, men själva konceptet med en bild blir implicit och svårfångat. Ur bekvämlighetssynpunkt har de blivit enklare, men ur förståelsens synvinkel har de blivit svårare.

Därför bör du börja lära dig programmeringsspråk med C-språket och gå vidare i den ordning som språken i C-familjen visas.

Detsamma gäller för att beskriva språk. Olika språk har samma, eller mindre, uppsättning enhetskön än C-språket. Antalet typer och exempel kan skilja sig åt i båda riktningarna: C++ har fler typer än C, medan JavaScript har färre.

MySQL-språket förtjänar särskilt omnämnande. Det verkar som att det inte finns något gemensamt, men han beskrivs perfekt av Matryoshka, och att lära känna honom blir snabbare och lättare. Vilket är viktigt med tanke på dess betydelse för webben - den moderna programmeringens matväg. Och där det finns MySQL finns det andra SQL-filer. Tja, alla möjliga Fortran-Pascal-Pythoner beskrivs också av Matryoshka, så fort de får tag på det.

Så stora saker väntar oss - en tillämpad beskrivning av C-språket och en enhetlig beskrivning av språken som följer det. ”Våra mål är tydliga, våra uppgifter är definierade. Kom till jobbet, kamrater! (Stormiga, långvariga applåder, övergår i ovationer. Alla reser sig.)"

Dina åsikter kommer att lyssnas på med stor uppmärksamhet, din hjälp med att skapa webbplatsen för häckande dockor kommer att tas emot med stor tacksamhet. Mer fullständig information om boken finns på hemsidan, skickligt gömd i Matryoshka C.

Källa: will.com

Lägg en kommentar