Matryoshka C. Lagdelt programsprogssystem

Lad os prøve at forestille os kemi uden Mendeleevs periodiske system (1869). Hvor mange elementer skulle man huske på, og uden særlig rækkefølge... (Dengang - 60.)

For at gøre dette skal du bare tænke på et eller flere programmeringssprog på én gang. Samme følelser, samme kreative kaos.

Og nu kan vi genopleve det XNUMX. århundredes kemikeres følelser, da de blev tilbudt al deres viden, og lidt mere, i ét periodisk system.

Matryoshka C. Lagdelt programsprogssystem


Bogen "Matryoshka C. Lagdelt system af programsprog" præsenterer alle enheder i C-sproget på et øjeblik. Dette giver dig mulighed for at organisere dem, rette forældede oplysninger og endda præcisere selve konceptet for programmet.

I dag kræver programmeringsinformation systematisering endnu mere, end kemiske grundstoffer gjorde for 150 år siden.

Den første nødvendighed er undervisning. Mendeleev begyndte at skabe sit system, da han stod over for spørgsmålet om, hvilket element han skulle begynde at forelæse med: O, H, N, He, Au... Samtidig var det lettere for ham - han underviste i kemi til de bedste - studerende i St. Petersborg Universitet. Og programmering bliver allerede undervist i skolen og vil snart begynde i børnehaven.

Det andet behov er en videnskabelig tilgang. Ved hjælp af det periodiske system blev nye grundstoffer opdaget, og oplysninger om gamle blev rettet. Hun hjalp med at skabe modellen for atomet (1911). Og så videre.

Det tredje behov er at afklare konceptet for et program.

Moderne programmering har en fod fast i 50'erne af det XNUMX. århundrede. Dengang var programmer enkle, men maskiner og maskinsprog var komplekse, så alt kredsede om maskiner og sprog.

Nu er alt omvendt: programmer er komplekse og primære, sprog er enkle og sekundære. Dette kaldes den anvendte tilgang, som alle synes at være bekendt med. Men studerende og udviklere er fortsat overbevist om, at alt er det samme.

Hvilket bringer os tilbage til den første forelæsning af Privatdozent Mendeleev. Hvad skal man fortælle nybegyndere? Hvor er sandheden? Det er spørgsmålet.

Bogen "Matryoshka C" giver sit svar på dette spørgsmål. Lagdelt system af programsprog". Desuden henvender det sig ikke kun til studerende, men også til uddannede programmører, da det er dem, det vil sige os, der skal søge sandheden og ændre verdensbilledet.

Det følgende er et resumé af bogen.

1. Introduktion

I 1969 blev C-sproget skabt, som blev det grundlæggende programmeringssprog og har været det i 50 år. Hvorfor er det sådan? Først og fremmest fordi C er anvendt det sprog, der gav programmet human se i stedet maskine. Denne præstation blev sikret af sprog fra C-familien: C++, JavaScript, PHP, Java, C# og andre. For det andet er det et kort og smukt sprog.

Men selve C-sproget er normalt blandet med machine assembler, hvilket komplicerer og forvrænger dets opfattelse. Den anden yderlighed er påtvingelsen af ​​en vis "filosofi" på sproget: proceduremæssig, objekt, funktionel, kompileret, fortolket, maskinskrevet og så videre. Dette tilføjer følelser, men hjælper ikke med at beskrive sproget bedre.

Sandheden er i midten, og for C-sproget er den strengt taget i midten mellem filosofisk og maskinel opfattelse.

C-sproget er ikke selvstændigt, det adlyder almindeligt skriftsprog, og det styrer samtidig selve samlesproget. Denne stilling beskriver Tale model af programmet, hvorefter programmet er opdelt i tre underordnede typer: tale, kode, kommando. C-sproget er ansvarlig for den anden kodetype.

Efter at have bestemt stedet for sproget i programmet, kan du organisere information om det, hvilket gør Lagdelt programsprogssystem, der repræsenterer C-sproget i det periodiske systems ånd - på én side.

Systemet er bygget under hensyntagen fællesskaber af anvendte sprog, der opstår som følge af deres taleunderordning. Et sæt Matryoshka C-enheder giver dig mulighed for at beskrive og sammenligne forskellige sprog og skabe en række Matryoshka'er: C++, PHP, JavaScript, C#, MySQL, Python og så videre. Det er værdigt og korrekt, at forskellige sprog er beskrevet af enheder af det grundlæggende sprog.

2. KAPITEL 1. Talemodel af programmet. Ryd C

Det første kapitel præsenterer talemodel af programmet, hvilket afspejler en anvendt tilgang. Ifølge ham har programmet tre åbenlyse sekventielle typer:

  1. tale - direkte tale fra programmøren, der løser problemet,
  2. kodet - indkodning af en løsning til en matematisk form i C-sprog (eller et hvilket som helst andet)
  3. og kommando - direkte maskinkommandoer.

Talemodellen forklarer, hvorfor C er et enkelt og forståeligt sprog. Xi er bygget i billedet og ligheden af ​​menneskelig tale, som er velkendt for os.

Den første type program er programmørens direkte tale. Tale svarer til menneskelig tænkning. Begyndende programmører skriver programmer ved hjælp af tale - først på russisk, derefter trin for trin oversætter handlingerne til et kodesprog. Og det er netop på denne model, at C-sproget blev skabt.

Programmørens konklusioner, udtrykt i tale, konverteres til en kodet numerisk form. Denne transformation bør kaldes afspejling, da tale og kode har samme karakter (refleksion - fødsel - køn). Dette er ret indlysende, hvis vi sammenligner tale (til venstre) og kode (til højre) typer af programmet.

Matryoshka C. Lagdelt programsprogssystem

Det er mærkeligt, at refleksion opstår meget enkelt - med kun to typer udtryk.

Den moderne beskrivelse af C-sproget (fra 1978) indeholder dog ikke en tilstrækkelig navneliste hverken til at beskrive sproget generelt, eller til refleksionsopgaven i særdeleshed. Derfor er vi tvunget til at være kreative og introducere disse navne.

Ordvalget skal være præcist og klart. Dette krævede en særlig tilgang, kort udtrykt som følger: streng brug af modersmålet. For englænderne ville det være engelsk, men vi er ikke englændere. Så vi vil bruge det, vi har, og prøve at tale russisk.

Refleksion udføres af to typer udtryk:

  1. beregning (HF) - afspejler en ændring i et objekts egenskaber. Et objekts egenskab er udtrykt ved et tal, så er en handling på en egenskab en handling på et tal - en operation.
  2. underordning (Pch) - afspejler en ændring i rækkefølgen af ​​handlinger. Prototypen af ​​Pch er en talekompleks sætning, derfor begynder de fleste typer Pch med underordnede konjunktioner "hvis", "ellers", "mens", "for". Andre typer pc'er supplerer dem.

Kan du forresten tro, at der i C-beskrivelsen ikke er noget navn for beregningsudtryk - de kaldes simpelthen "udtryk"? Herefter vil det ikke længere være overraskende, at der ikke er noget navn og association for typen af ​​underordning, og faktisk mangel på navne, definitioner og generaliseringer generelt. Dette skyldes, at det berømte K/R ("The C Language", Kernighan/Ritchie, 1978) ikke er en beskrivelse, men en guide til at bruge sproget.

Jeg vil dog stadig gerne have en beskrivelse af sproget. Derfor bliver han tilbudt Lagdelt programsprogssystem.

3. KAPITEL 2. Lagsystem. Kort C

Enhver beskrivelse skal være nøjagtig og yderst kortfattet. I tilfælde af et programsprog er en frontal beskrivelse vanskelig.

Her har vi et program. Den består af moduler. Moduler består af subrutiner og samlinger (struktur). Underrutiner består af individuelle udtryk: erklæringer, beregninger, underordning. Der er hele ti typer underordning. Underordning forbinder underniveauer og underrutiner. Der er også flere annoncer. Deklarationer indgår dog ikke kun i underrutiner og underniveauer, men også i moduler og samlinger. Og de fleste udtryk består af ord, der er så svære at beskrive, at de som regel blot gives i to lister – originale og afledte ord, som du vil blive fortrolig med gennem indlæringen og brugen af ​​sproget. Lad os tilføje tegnsætningstegn og en række andre udtryk til dette.

I sådan en præsentation er det ikke let at forstå, hvem der stod på hvem.

En direkte hierarkisk tilgang til at beskrive et sprog ville være alt for kompleks. En rundkørselssøgning fører til en beskrivelse af sprog baseret på dets talekarakter og kommandoside. Således blev lagsystemet født, delvist sammenfaldende med Mendeleevs periodiske system, som også er lag. Som det viste sig 42 år efter udgivelsen (1869), er systemets periodicitet forbundet med elektronisk lag (1911, Bohr-Rutherford model af atomet). Desuden er de lagdelte og periodiske systemer ens i tabelarrangementet af alle enheder på én side.

Beskrivelsen af ​​sprogenheder er kort - kun 10 typer udtryk og 8 typer af andre enheder, samt meningsfulde og visuelle. Selvom det er usædvanligt for det første bekendtskab.

Sprogenheder er opdelt i 6 niveauer:

  1. enheder - tabelrækker
  2. afdelinger - særlige grupper af slægter (dele af første linje)
  3. slægt - celler (hoveddelingsniveau)
  4. superarter - artsadskillere (sjældent niveau)
  5. typer - enhedsformler nederst i cellen eller separat
  6. mønstre - selve enhederne (kun for ord)

Eksempelord beskriver ordbog - et separat delsystem, der består af de samme seks niveauer.

Talekomponenten i C-sproget er ret indlysende, selvom den stadig fortjener beskrivelse. Men kommandodelen af ​​sproget er netop relateret til kompileringskontrol, hvor den tredje type program oprettes - kommando. Her kommer vi til det mest spændende aspekt af C-sproget: skønhed.

4. FØLGENDE KAPITEL. Smuk Si

C-sproget er grundlaget for moderne programmering. Hvorfor? For det første på grund af den største korrespondance til tale. For det andet fordi den på smuk vis omgik begrænsningerne ved behandling af maskinnummer.

Hvad foreslog Xi præcist? Billede og lag.

Ordet "image" er en oversættelse af det engelske ord "type", som kommer fra det græske "prototype" - "type". På det russiske sprog formidler ordet "type" ikke hjørnestenen i begrebet, der udtrykkes; desuden forveksles det med hjælpebetydningen "type".

I første omgang løste billedet et rent maskinelt beregningsproblem, og blev derefter en bane for fødslen af ​​objektsprog.

Laget løste med det samme flere problemer - både maskinelt og påført. Derfor vil overvejelsen begynde med et enkeltopgavebillede og gå videre til et multiopgavelag.

Et af de ubehagelige træk ved historisk programmering er, at de fleste begreber, inklusive de grundlæggende, er givet uden definitioner. "Programmeringssproget (navnet på floder) har heltal- og flydende taltyper..." og de kradsede videre. Det er ikke nødvendigt at definere, hvad en "type" (billede) er, fordi forfatterne selv ikke helt forstår dette og vil dæmpe det "for overskuelighedens skyld." Hvis de er fastgjort til væggen, vil de give en vag og ubrugelig definition. Det hjælper meget at gemme sig bag fremmedord: for russiske forfattere - bag engelsk (type), for englændere - bag fransk (subrutine), græsk (polymorfi), latin (indkapsling) eller deres kombinationer (ad-hoc polymorfisme).

Men dette er ikke vores skæbne. Vores valg er definitioner med hævet visir på rent russisk.

billede

billede er et præfigurativt navn på en mængde, der definerer 1) mængdens iboende egenskaber og 2) valget af operationer for mængden.

Ordet "type" (type) svarer til den første del af definitionen: "iboende egenskaber af en mængde." Men hovedbetydningen af ​​billedet er i anden del: "udvælgelse af operationer til mængder."

Udgangspunktet for at introducere et billede i C er en normal beregning, såsom additionsoperationen.

papir Matematik, uanset om det er skrevet i hånden eller trykt, skelner ikke meget mellem typer af tal, normalt forudsat at de er rigtige. Derfor er deres behandlingsoperationer utvetydige.

Maskinrum Matematik opdeler strengt tal i heltal og brøker. Forskellige typer numre gemmes forskelligt i hukommelsen og behandles af forskellige processorinstruktioner. For eksempel er instruktionerne til at tilføje heltal og brøker to forskellige instruktioner, der svarer til to forskellige processorknudepunkter. Men der er ingen kommando til at tilføje heltals- og brøkargumenter.

Anvendt matematik, det vil sige C-sproget, adskiller taltyperne, men kombinerer operationer: addition for heltal og/eller brøker skrives med ét handlingstegn.

En klar definition af begrebsbilledet giver os mulighed for helt sikkert at tale om to andre begreber: værdi и operation.

Størrelse og drift

Value — nummeret, der behandles.

Operation — behandling af værdierne af de indledende værdier (argumenter) for at opnå det endelige tal (i alt).

Størrelse og drift hænger sammen. Hver operation er en mængde, fordi den har et numerisk resultat. Og hver værdi er resultatet af overførsel af en værdi til/fra processorregisteret, det vil sige resultatet af operationen. På trods af dette forhold er det vigtigste muligheden for deres separate beskrivelse, dog med gentagelse af et ord i forskellige sektioner af ordbogen, hvilket er, hvad der sker i MA3.

Maskintilgangen inddelte alle de tal, som programmøren brugte, i hold и data. Tidligere var de begge tal, for eksempel blev kommandoer skrevet i numeriske koder. Men i anvendte sprog ophørte kommandoer med at være tal og blev til ord и handlingstegn. Kun "data" forbliver som tal, men det er absurd at fortsætte med at kalde dem på den måde, for i overgangen fra en maskine til et matematisk synspunkt er tal mængder, der er divideret med originalen (data) og sidste (påkrævet). "Ukendt datum" vil lyde dumt.

Holdene blev også opdelt i to typer handlinger: matematisk og service. Matematiske handlinger - operationer. Vi kommer til de officielle ting senere.

I C-sprogene bliver de sædvanlige papir- og maskinentydige, eller enkelte, matematiske operationer næsten universelt multiple.

Flere operationer er flere operationer af samme navn med forskellige typer argumenter og forskellige handlinger med samme betydning.

Heltalsargumenter svarer til en hel operation, og brøkargumenter svarer til en brøkoperation. Denne forskel er især tydelig under divisionsoperationen, når udtrykket 1/2 giver en total på 0, ikke 0,5. En sådan notation svarer ikke til papirmatematikkens regler, men C-sproget stræber ikke efter at overholde dem (i modsætning til Fortran) - det spiller efter sine egne anvendt regler.

Ved blanding af heltal og brøker er det eneste rigtige inkluderet støbning af argumentværdier — selektiv transformation af en værdi fra et billede til et andet. Faktisk, når man tilføjer et heltal og et brøktal, er resultatet brøktal, så billedet af operationen samler op operationen med at konvertere et heltalsargument til en brøkværdi.

Der er en række operationer tilbage mangeOg enkelt. Sådanne operationer er kun defineret for én type argumenter: divisionsrest - heltalsargumenter, stabling (bitvise operationer) - naturlige heltal. Ma3 angiver mangfoldigheden af ​​operationer med tegn (#^), der angiver de billeder, som operationen er defineret for. Dette er en vigtig, men tidligere overset egenskab ved enhver operation.

Alle funktioner er vilkårlige enhedsoperationer. Undtagelsen er operatørerne - ikke-beslagsfunktioner, indbygget i sproget (originale operationer).

Hjælp

Hjælp - handling, der ledsager operationen.

Hvis vi betragter operationen som hovedhandlingen, kan vi skelne mellem to ledsagende, der udfører operationen og adskiller sig fra den. Disse er 1) variabel kontrol og 2) underordning. Denne handling kaldes hjælp.

Her er vi nødt til at afvige og sige separat om russiske oversættelser af programmeringslærebøger. Et nyt ord blev introduceret i teksten til K/R for at registrere handlinger erklæring (udtryk), som forsøgte at opdele begreberne for en maskinkommando i forskellige handlinger: 1) drift, 2) erklæring og 3) underordning (kaldet "kontrolkonstruktioner"). Dette forsøg blev begravet af russiske oversættere og erstattede "udtryk" med ordet "operatør", som:

  1. er blevet synonymt med maskinordet "kommando",
  2. viste sig at være synonymt med udtrykket "tegn på handling",
  3. og modtog også et ubegrænset antal ekstra værdier. Det vil sige, at det er blevet til noget, der ligner den engelske artikel "uhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh"

Overvej de ledsagende handlinger, eller hjælp.

Variabel styring

Variabel styring (UP) - oprettelse/sletning af variable celler.
UE opstår implicit, når man erklærer en variabel, som allerede er skrevet af en anden grund - for at angive billedet af værdien. Kun én visning administreres eksplicit yderligere variabler ved at bruge funktionerne malloc() og free().

Det skal bemærkes, at implicitte handlinger er mere bekvemme at skrive, da de slet ikke kræver at skrive noget, men de er sværere at forstå - de er sværere at tage hensyn til og fortolke.

Underordning

Underordning — tilslut/deaktiver lagsektioner.

C-sproget tilbød en anvendt metode til at kontrollere rækkefølgen af ​​handlinger, forskellig fra assembler - underordning. Den afspejler og udvikler en talekompleks sætning med en klar opdeling i hoveddelen (underordningssætning) og den underordnede del (underniveau/underrutineafsnit).

Både erklæring og indsendelse er helt bygget på konceptet lag.

Lag

Lag er et begrænset selektivt sæt udtryk på et niveau.

Laget påtog sig eksplicit og implicit flere opgaver på én gang:

  1. tilrettelæggelse af programmet
  2. begrænser synligheden af ​​navne (implicit),
  3. styring af variabler (hukommelsesceller) (implicit),
  4. definition af underordnede klausuler for underordning,
  5. definitioner af funktioner og valg og andre.

Der var ikke noget lagbegreb i maskinsprog, så det optrådte ikke i K/R, og hvis noget ikke var der, så ville det være kætteri og fritænkning at introducere det i efterfølgende bøger. Derfor dukkede konceptet med et lag slet ikke op, selvom det er yderst brugbart og ret indlysende.

Uden et lag er det umuligt kort og tydeligt at forklare mange af programmets handlinger og regler. For eksempel, hvorfor er goto så simpelt som tre kopek dårligt, og den vanskelige stund er god. Du kan kun bande hjælpeløst, som Dijkstra gjorde ("programmørernes dygtighed er en funktion, der omvendt afhænger af hyppigheden af ​​forekomsten af ​​goto-udsagn i deres programmer." Kort sagt, kun geder bruger goto. Niveauet af retfærdiggørelse er Gud.) Sandt nok er dette ikke så skræmmende, hvis dine bøger Vi ikke behøver at forklare noget som helst, men som vi allerede har sagt, er dette ikke vores skæbne.

Det kan i øvrigt antages, at Dan Ritchie forlod goto netop som en nøgle til at søge efter et eller andet unavngivet begreb, fordi der ikke var behov eller skønhed i udtrykket goto. Men der var behov for en enkel og forståelig forklaring på de nye sprogprincipper, som Richie ikke selv ønskede at give, og som netop bygger på begrebet. lag.

Afvigelse

Afvigelse — ændring af det nye navns sædvanlige egenskaber.

Den vigtigste afvigelse er netop relateret til programmets lagegenskaber og beskrives med ét ord "statisk", som har forskellig betydning i hver type lag.

5. DET SIDSTE KAPITEL. Fælles for anvendte sprog

Anvendte sprog er figurativ sprog (med et billede, "indskrevet"). De er baseret på eksplicit eller implicit brug af billedet. Desuden opstår der igen en selvmodsigelse: et eksplicit billede er mere forståeligt, men mindre bekvemt, og omvendt.

Matryoshka C. Lagdelt programsprogssystem

(Bordlayoutet er endnu ikke leveret, så bordet er vist med billede.)

Efter C tog udviklingen af ​​anvendte sprog vejen til at øge deres figurativitet. Det vigtigste for at forstå højt billedsprog er den direkte efterkommer af C - C++ sproget. Han udvikler ideen om et vilkårligt udvalg af operationer for mængder og legemliggør det på grundlag af det syntetiske udtryksudvælgelse, som får et nyt navn - objekt. C++ er dog ikke så kortfattet og udtryksfuldt som C på grund af overbelastningen af ​​nye samlingstyper og deres tilhørende regler. Lad os forresten tale om "overbelastning".

Overbelastning og polymorfi

Ordet "overbelastning" er et forældet maskinlæringsbegreb for at skabe flere operationer.

Maskin (system) programmører pluralitet operationer kunne godt være irriterende: "Hvad betyder dette tegn (+): tilføje heltal, tilføje brøker eller endda skifte?! I vores tid skrev de ikke sådan!" Derfor den negative konnotation af det valgte ord ("overkill", "træt"). For en applikationsprogrammør er flere operationer hjørnestenen, den vigtigste præstation og arven fra C-sproget, så naturligt, at de ofte ikke genkendes.

I C++ sprog pluralitet udvidet ikke kun til de oprindelige operationer, men også til funktioner - både individuelle og kombinerede i klasser - metoder. Med flere metoder kom evnen til at tilsidesætte dem i udvidede klasser, hvilket vagt blev kaldt "polymorfi". Kombinationen af ​​polymorfi og overbelastning producerede en eksplosiv blanding, der delte sig i to polymorfismer: "sand" og "ad-hoc." Det er kun muligt at forstå dette på trods af de tildelte navne. Vejen til annonce er brolagt med udenlandske navne.

En erklæring af formen "overbelastning" er bedre udtrykt i ordet yderligere meddelelse — tilføjelse af en erklæring af en funktion af samme navn med argumenter for et andet billede.

En erklæring af formen "polymorfi" kaldes bedre genmeddelelse — en overlappende erklæring i et nyt udvidelseslag af en funktion af samme navn med argumenter af det samme billede.

Så vil det være let at forstå, at de samme metoder til forskellige billeder (argumenter) - yderligere annonceret, og et billede - meddelt igen.

Russiske ord bestemmer.

Landingsbane

Overvejelse af begreberne i meget figurative sprog bekræfter vigtigheden af ​​en klar definition af grundlæggende begreber. Med C korrekt beskrevet vil det være nemt og underholdende at lære højfigurative sprog.

Dette er især vigtigt for implicitte meget figurative sprog (PHP, JavaScript). For dem bliver betydningen af ​​objekter (sammensatte billeder) endnu højere end i C++, men selve konceptet om et billede bliver implicit og undvigende. Ud fra et bekvemmelighedssynspunkt er de blevet enklere, men ud fra et forståelsessynspunkt er de blevet sværere.

Derfor bør du begynde at lære programmeringssprog med C-sproget og gå videre i den rækkefølge, som sprogene i C-familien optræder.

Det samme gælder for at beskrive sprog. Forskellige sprog har det samme, eller mindre, sæt enhedskøn end C-sproget. Antallet af typer og eksempler kan variere i begge retninger: C++ har flere typer end C, mens JavaScript har færre.

MySQL-sproget fortjener særlig omtale. Det ser ud til, at der ikke er noget til fælles, men han er perfekt beskrevet af Matryoshka, og det bliver hurtigere og lettere at lære ham at kende. Hvilket er vigtigt i betragtning af dets betydning for nettet - spisevejen for moderne programmering. Og hvor der er MySQL, er der andre SQL'er. Nå, alle mulige Fortran-Pascal-Pythoner er også beskrevet af Matryoshka, så snart de får fingrene i det.

Så store ting venter os - en anvendt beskrivelse af C-sproget og en samlet beskrivelse af sprogene, der følger det. ”Vores mål er klare, vores opgaver er definerede. Kom på arbejde, kammerater! (Stormfulde, langvarige bifald, der bliver til ovationer. Alle rejser sig.)"

Dine meninger vil blive lyttet til med stor opmærksomhed, din hjælp til at skabe nesting dolls hjemmeside vil blive modtaget med stor taknemmelighed. Mere fuldstændig information om bogen er på hjemmesiden, smart skjult i Matryoshka C.

Kilde: www.habr.com

Tilføj en kommentar