Matryoshka C. Lagdelt programspråksystem

La oss prøve å forestille oss kjemi uten Mendeleevs periodiske system (1869). Hvor mange elementer måtte huskes, og uten spesiell rekkefølge... (Da - 60.)

For å gjøre dette, tenk bare på ett eller flere programmeringsspråk samtidig. Samme følelser, samme kreative kaos.

Og nå kan vi gjenoppleve følelsene til kjemikere fra XNUMX-tallet da de ble tilbudt all sin kunnskap, og litt mer, i ett periodisk system.

Matryoshka C. Lagdelt programspråksystem


Boken "Matryoshka C. Lagdelt system av programspråk" presenterer alle enheter i C-språket på et øyeblikk. Dette lar deg organisere dem, korrigere utdatert informasjon og til og med klargjøre selve konseptet til programmet.

I dag trenger programmeringsinformasjon systematisering enda mer enn kjemiske elementer gjorde for 150 år siden.

Den første nødvendigheten er undervisning. Mendeleev begynte å lage systemet sitt da han sto overfor spørsmålet om hvilket element han skulle begynne å forelese med: O, H, N, He, Au... Samtidig var det lettere for ham - han underviste i kjemi til de beste - studenter av St. Petersburg universitet. Og programmering læres allerede på skolen og begynner snart i barnehagen.

Det andre behovet er en vitenskapelig tilnærming. Ved hjelp av det periodiske systemet ble nye grunnstoffer oppdaget og informasjon om gamle ble korrigert. Hun var med på å lage modellen av atomet (1911). Og så videre.

Det tredje behovet er å klargjøre konseptet for et program.

Moderne programmering har en fot fast på 50-tallet av det XNUMX. århundre. Den gang var programmer enkle, men maskiner og maskinspråk var komplekse, så alt dreide seg om maskiner og språk.

Nå er alt omvendt: programmer er komplekse og primære, språk er enkle og sekundære. Dette kalles den anvendte tilnærmingen, som alle ser ut til å være kjent med. Men studenter og utviklere fortsetter å være overbevist om at alt er likt.

Noe som bringer oss tilbake til den første forelesningen til Privatdozent Mendeleev. Hva skal jeg fortelle førsteårsstudentene? Hvor er sannheten? Det er spørsmålet.

Boken "Matryoshka C" gir svaret på dette spørsmålet. Lagdelt system for programspråk". Dessuten henvender det seg ikke bare til studenter, men også til trente programmerere, siden det er de, det vil si vi, som må søke sannheten og endre verdensbildet.

Det som følger er et sammendrag av boken.

1. Introduksjon

I 1969 ble C-språket opprettet, som ble det grunnleggende programmeringsspråket og har holdt seg slik i 50 år. Hvorfor er det slik? Først av alt, fordi C er anvendt språket som ga programmet human se i stedet maskin. Denne prestasjonen ble sikret av språk fra C-familien: C++, JavaScript, PHP, Java, C# og andre. For det andre er det et kort og vakkert språk.

Imidlertid er C-språket i seg selv vanligvis blandet med maskinmontør, og dermed komplisere og forvrenge oppfatningen. Den andre ytterligheten er påføringen av en viss "filosofi" på språket: prosedyremessig, objekt, funksjonell, kompilert, tolket, maskinskrevet, og så videre. Dette tilfører følelser, men hjelper ikke med å beskrive språket bedre.

Sannheten er i midten, og for C-språket er det strengt tatt midt mellom filosofisk og maskinell oppfatning.

C-språket er ikke selvstendig, det adlyder vanlig skriftspråk, og samtidig styrer det selve assembly-språket. Denne posisjonen beskriver Talemodell av programmet, ifølge hvilken programmet er delt inn i tre underordnede typer: tale, kode, kommando. C-språket er ansvarlig for den andre, kodetypen.

Etter å ha bestemt stedet for språket i programmet, kan du organisere informasjon om det, som gjør Lagdelt programspråksystem, som representerer C-språket i det periodiske systemets ånd - på én side.

Systemet er bygget med hensyn til fellesskap av anvendte språk, som oppstår fra deres taleunderordning. Ett sett med Matryoshka C-enheter lar deg beskrive og sammenligne forskjellige språk, og lage en serie Matryoshka: C++, PHP, JavaScript, C#, MySQL, Python og så videre. Det er verdig og riktig at forskjellige språk er beskrevet av enheter av det grunnleggende språket.

2. KAPITTEL 1. Talemodell av programmet. Fjern C

Det første kapittelet presenterer talemodell av programmet, som gjenspeiler en anvendt tilnærming. Ifølge ham har programmet tre åpenbare sekvensielle typer:

  1. tale - direkte tale fra programmereren som løser problemet,
  2. kodet - koding av en løsning til en matematisk form på C-språk (eller et annet)
  3. og kommando - direkte maskinkommandoer.

Talemodellen forklarer hvorfor C er et enkelt og forståelig språk. Xi er bygget i bildet og likheten til menneskelig tale som er kjent for oss.

Den første typen program er programmererens direkte tale. Tale tilsvarer menneskelig tenkning. Begynnende programmerere skriver programmer ved hjelp av tale - først på russisk, deretter trinn for trinn oversetter handlingene til et kodespråk. Og det er nettopp på denne modellen at C-språket ble skapt.

Programmererens konklusjoner, uttrykt i tale, konverteres til en kodet numerisk form. Denne transformasjonen bør kalles speilbilde, siden tale og kode har samme natur (refleksjon - fødsel - kjønn). Dette er ganske åpenbart hvis vi sammenligner tale (til venstre) og kode (til høyre) typene av programmet.

Matryoshka C. Lagdelt programspråksystem

Det er merkelig at refleksjon skjer veldig enkelt - med bare to typer uttrykk.

Den moderne beskrivelsen av C-språket (fra 1978) inneholder imidlertid ikke en tilstrekkelig navneliste verken for å beskrive språket generelt, eller for refleksjonsoppgaven spesielt. Derfor er vi tvunget til å være kreative og introdusere disse navnene.

Ordvalget skal være presist og tydelig. Dette krevde en spesiell tilnærming, kort uttrykt som følger: streng bruk av morsmålet. For engelskmennene ville det vært engelsk, men vi er ikke engelskmenn. Så vi bruker det vi har og prøver å snakke russisk.

Refleksjon utføres av to typer uttrykk:

  1. beregning (HF) - reflekterer en endring i egenskapene til et objekt. Egenskapen til et objekt uttrykkes med et tall, så er en handling på en egenskap en handling på et tall - en operasjon.
  2. underordning (Pch) - reflekterer en endring i rekkefølgen av handlinger. Prototypen av Pch er en talekompleks setning, derfor begynner de fleste typer Pch med underordnede konjunksjoner "hvis", "ellers", "mens", "for". Andre typer PC-er utfyller dem.

Forresten, kan du tro at det i C-beskrivelsen ikke er noe navn for beregningsuttrykk - de kalles ganske enkelt "uttrykk"? Etter dette vil det ikke lenger være overraskende at det ikke er noe navn og assosiasjon for typen underordning, og faktisk mangelen på navn, definisjoner og generaliseringer generelt. Dette er fordi den berømte K/R («The C Language», Kernighan/Ritchie, 1978) ikke er en beskrivelse, men en guide til bruk av språket.

Men jeg vil fortsatt gjerne ha en beskrivelse av språket. Derfor blir han tilbudt Lagdelt programspråksystem.

3. KAPITTEL 2. Lagsystem. Kort C

Enhver beskrivelse må være nøyaktig og ekstremt kortfattet. Når det gjelder et programspråk, er en frontal beskrivelse vanskelig.

Her har vi et program. Den består av moduler. Moduler består av subrutiner og samlinger (struktur). Underrutiner består av individuelle uttrykk: erklæringer, beregninger, underordning. Det er så mange som ti typer underordning. Underordning kobler sammen undernivåer og underrutiner. Det er også flere annonser. Deklarasjoner er imidlertid inkludert ikke bare i underrutiner og undernivåer, men også i moduler og samlinger. Og de fleste uttrykk består av ord som er så vanskelige å beskrive at de som regel rett og slett oppgis i to lister – originale og avledede ord, som du vil bli kjent med gjennom hele innlæringen og bruken av språket. La oss legge til skilletegn og en rekke andre uttrykk til dette.

I en slik presentasjon er det ikke lett å forstå hvem som sto på hvem.

En direkte hierarkisk tilnærming til å beskrive et språk ville være altfor kompleks. Et rundkjøringssøk fører til en beskrivelse av språk basert på dets talenatur og kommandoside. Dermed ble lagsystemet født, delvis sammenfallende med det periodiske systemet til Mendeleev, som også er lag. Som det viste seg 42 år etter publiseringen (1869), er periodisiteten til systemet assosiert med elektronisk lag (1911, Bohr-Rutherford modell av atomet). Dessuten er de lagdelte og periodiske systemene like i tabellformingen av alle enheter på én side.

Beskrivelsen av språkenheter er kort - kun 10 typer uttrykk og 8 typer andre enheter, samt meningsfulle og visuelle. Selv om det er uvanlig for det første bekjentskapet.

Språkenheter er delt inn i 6 nivåer:

  1. enheter - tabellrader
  2. avdelinger - spesielle grupper av slekter (deler av første linje)
  3. slekt - celler (hoveddelingsnivå)
  4. superarter - artsskillere (sjeldent nivå)
  5. typer - enhetsformler nederst i cellen eller separat
  6. mønstre - selve enhetene (kun for ord)

Eksempelord beskriver ordbok - et separat delsystem som består av de samme seks nivåene.

Talekomponenten i C-språket er ganske åpenbar, selv om den fortsatt fortjener beskrivelse. Men kommandodelen av språket er nettopp relatert til kompileringskontroll, der den tredje typen program opprettes - kommando. Her kommer vi til det mest spennende aspektet ved C-språket: skjønnhet.

4. FØLGENDE KAPITTEL. Kjekk Si

C-språket er grunnlaget for moderne programmering. Hvorfor? For det første på grunn av den største korrespondansen til tale. For det andre fordi den på en vakker måte omgikk begrensningene ved behandling av maskinnummer.

Hva var det egentlig Xi foreslo? Bilde og lag.

Ordet "image" er en oversettelse av det engelske ordet "type", som kommer fra det greske "prototype" - "type". På det russiske språket formidler ikke ordet "type" hjørnesteinen i konseptet som blir uttrykt; dessuten forveksles det med hjelpebetydningen "type".

Opprinnelig løste bildet et rent maskinelt beregningsproblem, og ble deretter en rullebane for fødselen av objektspråk.

Laget løste umiddelbart flere problemer - både maskinelt og påført. Derfor vil vurderingen begynne med et enkeltoppgavebilde og gå videre til et fleroppgavelag.

Et av de ubehagelige trekkene ved historisk programmering er at de fleste konsepter, inkludert grunnleggende, er gitt uten definisjoner. "Programmeringsspråket (navnet på elver) har heltalls- og flytende talltyper..." og de skrapte videre. Det er ikke nødvendig å definere hva en "type" (bilde) er, fordi forfatterne selv ikke helt forstår dette og vil stille det ned "for klarhetens skyld." Hvis de festes til veggen, vil de gi en vag og ubrukelig definisjon. Det hjelper mye å gjemme seg bak fremmedord: for russiske forfattere - bak engelsk (type), for engelskmenn - bak fransk (subrutine), gresk (polymorfisme), latin (innkapsling) eller deres kombinasjoner (ad-hoc polymorfisme).

Men dette er ikke vår skjebne. Vårt valg er definisjoner med hevet visir på ren russisk.

bilde

bilde er et prefigurativt navn på en mengde, som definerer 1) kvantitetens iboende egenskaper og 2) valg av operasjoner for kvantiteten.

Ordet "type" (type) tilsvarer den første delen av definisjonen: "iboende egenskaper til en mengde." Men hovedbetydningen av bildet er i den andre delen: "utvalg av operasjoner til mengder."

Utgangspunktet for å introdusere et bilde i C er en normal beregning, for eksempel addisjonsoperasjonen.

Papir Matematikk, enten skrevet for hånd eller trykt, skiller ikke mye mellom typer tall, vanligvis forutsatt at de er reelle. Derfor er behandlingsoperasjonene deres entydige.

Maskin Matematikk deler strengt tall inn i heltall og brøker. Ulike typer tall lagres forskjellig i minnet og behandles av forskjellige prosessorinstruksjoner. For eksempel er instruksjonene for å legge til heltall og brøker to forskjellige instruksjoner som tilsvarer to forskjellige prosessornoder. Men det er ingen kommando for å legge til heltalls- og brøkargumenter.

Anvendt matematikk, det vil si C-språket, skiller talltypene, men kombinerer operasjoner: addisjon for heltall og/eller brøker skrives med ett handlingstegn.

En klar definisjon av konseptbildet lar oss definitivt snakke om to andre konsepter: verdi и operasjon.

Størrelse og drift

verdi — nummeret som behandles.

Operasjon — behandle verdiene til startverdiene (argumenter) for å få det endelige tallet (totalt).

Størrelse og drift henger sammen. Hver operasjon er en mengde fordi den har et numerisk resultat. Og hver verdi er resultatet av å overføre en verdi til/fra prosessorregisteret, det vil si resultatet av operasjonen. Til tross for dette forholdet, er det viktigste muligheten for deres separate beskrivelse, om enn med repetisjon av ett ord i forskjellige deler av ordboken, som er det som skjer i MA3.

Maskintilnærmingen delte alle tallene som ble brukt av programmereren inn i kommandoer и data. Tidligere var begge tall, for eksempel ble kommandoer skrevet i numeriske koder. Men på anvendte språk sluttet kommandoer å være tall og ble i ord и handlingstegn. Bare "data" gjenstår som tall, men det er absurd å fortsette å kalle dem på den måten, fordi i overgangen fra en maskin til et matematisk synspunkt, er tall mengder som er delt på originalen (data) og siste (nødvendig). "Ukjent datum" vil høres dumt ut.

Teamene ble også delt inn i to typer handlinger: matematisk og service. Matematiske handlinger - operasjoner. Vi kommer til de offisielle sakene senere.

I C-språkene blir de vanlige papir- og maskinentydige, eller enkle, matematiske operasjonene nesten universelt multiple.

Flere operasjoner er flere operasjoner med samme navn med forskjellige typer argumenter og forskjellige, like i betydning, handlinger.

Heltallsargumenter tilsvarer en hel operasjon, og brøkargumenter tilsvarer en brøkoperasjon. Denne forskjellen er spesielt tydelig under divisjonsoperasjonen, når uttrykket 1/2 gir totalt 0, ikke 0,5. En slik notasjon samsvarer ikke med reglene for papirmatematikk, men C-språket streber ikke etter å overholde dem (i motsetning til Fortran) - det spiller i henhold til sine egne anvendt regler.

Ved blanding av heltall og brøker er det eneste riktige inkludert casting av argumentverdier — selektiv transformasjon av en verdi fra ett bilde til et annet. Faktisk, når du legger til et heltall og et brøktall, er resultatet brøk, så bildet av operasjonen plukker opp operasjonen med å konvertere et heltallsargument til en brøkverdi.

En rekke operasjoner gjenstår flereOg enkelt. Slike operasjoner er definert bare for én type argumenter: divisjonsrest - heltallsargumenter, stabling (bitvise operasjoner) - naturlige heltall. Ma3 indikerer mangfoldet av operasjoner med tegn (#^) som indikerer bildene som operasjonen er definert for. Dette er en viktig, men tidligere oversett egenskap ved enhver operasjon.

Alle funksjoner er vilkårlige enhetsoperasjoner. Unntaket er operatørene - funksjoner uten brakett, innebygd i språket (originale operasjoner).

Assistanse

Assistanse - handling som følger med operasjonen.

Hvis vi anser operasjonen som hovedhandlingen, kan vi skille to medfølgende som gir operasjonen og skiller seg fra den. Disse er 1) variabel kontroll og 2) underordning. Denne handlingen kalles assistanse.

Her må vi avvike og si separat om russiske oversettelser av programmeringslærebøker. Et nytt ord ble introdusert i teksten til K/R for å registrere handlinger uttalelse (uttrykk), som forsøkte å dele begrepene maskinkommando inn i forskjellige handlinger: 1) operasjon, 2) erklæring og 3) underordning (kalt "kontrollkonstruksjoner"). Dette forsøket ble begravet av russiske oversettere, og erstattet "uttrykk" med ordet "operatør", som:

  1. har blitt synonymt med maskinordet "kommando",
  2. viste seg å være synonymt med uttrykket "tegn på handling",
  3. og fikk også et ubegrenset antall tilleggsverdier. Det vil si at det har blitt til noe som ligner på den engelske artikkelen «uhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

Vurder de medfølgende handlingene, eller assistanse.

Variabel kontroll

Variabel kontroll (UP) - opprette/slette variable celler.
UE oppstår implisitt når du erklærer en variabel, som allerede er skrevet av en annen grunn - for å indikere bildet av verdien. Bare én visning administreres eksplisitt tilleggsvariabler ved å bruke funksjonene malloc() og free().

Det skal bemerkes at implisitte handlinger er mer praktisk å skrive, siden de ikke krever å skrive noe i det hele tatt, men de er vanskeligere å forstå - de er vanskeligere å ta hensyn til og tolke.

Underordning

Underordning — koble til/deaktivere lagseksjoner.

C-språket tilbød en anvendt metode for å kontrollere rekkefølgen av handlinger, forskjellig fra assembler - underordning. Den reflekterer og utvikler en talekompleks setning med en klar inndeling i hoveddelen (underordningssetning) og underordnet del (undernivå/underrutineavsnitt).

Både erklæring og innlevering bygger i sin helhet på konseptet sjiktet.

Lag

Lag er et begrenset enkeltnivå selektivt sett med uttrykk.

Laget tok eksplisitt og implisitt på seg flere oppgaver samtidig:

  1. organisere programmet
  2. begrenser synligheten av navn (implisitt),
  3. håndtering av variabler (minneceller) (implisitt),
  4. definisjon av underordnede ledd for underordning,
  5. definisjoner av funksjoner og utvalg og andre.

Det var ikke noe lagbegrep i maskinspråk, så det dukket ikke opp i K/R, og hvis noe ikke var der, ville det å introdusere det i påfølgende bøker være kjetteri og fritenkning. Derfor dukket ikke konseptet med et lag opp i det hele tatt, selv om det er ekstremt nyttig og ganske åpenbart.

Uten et lag er det umulig å kort og tydelig forklare mange av handlingene og reglene i programmet. For eksempel, hvorfor er goto så enkelt som tre kopek dårlig, og den vanskelige stunden er god. Du kan bare banne hjelpeløst, slik Dijkstra gjorde («ferdigheten til programmerere er en funksjon som omvendt avhenger av hyppigheten av forekomst av goto-utsagn i programmene deres.» Kort sagt, bare geiter bruker goto. Nivået av rettferdiggjørelse er Gud.) Riktignok er dette ikke så skummelt hvis bøkene dine Vi ikke trenger å forklare noe i det hele tatt, men som vi allerede har sagt, dette er ikke vår skjebne.

For øvrig kan det antas at Dan Ritchie forlot goto nettopp som en nøkkel for å søke etter et eller annet navnløst konsept, fordi det ikke var noe behov eller skjønnhet i uttrykket goto. Men det var behov for en enkel og forståelig forklaring på de nye språkprinsippene, som Richie selv ikke ønsket å gi, og som nettopp er basert på konseptet. sjiktet.

Avvik

Avvik — endre de vanlige egenskapene til det nye navnet.

Det viktigste avviket er nøyaktig relatert til lagegenskapene til programmet, og beskrives med ett ord "statisk", som har forskjellig betydning i hver type lag.

5. DET SISTE KAPITTEL. Felles for anvendte språk

Anvendte språk er figurativ språk (som har et bilde, "skrivet"). De er basert på eksplisitt eller implisitt bruk av bildet. Dessuten dukker det opp igjen en selvmotsigelse: et eksplisitt bilde er mer forståelig, men mindre praktisk, og omvendt.

Matryoshka C. Lagdelt programspråksystem

(Bordoppsettet er ennå ikke levert, så bordet er vist med bilde.)

Etter C tok utviklingen av anvendte språk veien til å øke deres figurativitet. Det viktigste for å forstå høye bilder er den direkte etterkommeren av C - C++-språket. Han utvikler ideen om et vilkårlig utvalg av operasjoner for mengder og legemliggjør det på grunnlag av det syntetiske uttrykksutvalget, som får et nytt navn - objekt. C++ er imidlertid ikke så kortfattet og uttrykksfull som C på grunn av overbelastningen av nye samlingstyper og tilhørende regler. La oss forresten snakke om "overbelastning".

Overbelastning og polymorfisme

Ordet "overbelastning" er et utdatert maskinlæringsbegrep for å skape flere operasjoner.

Maskinprogrammerere (system). pluralitet operasjoner kan godt være irriterende: "Hva betyr dette tegnet (+): å legge til heltall, legge til brøker eller til og med skifte?! I vår tid skrev de ikke slik!» Derav den negative konnotasjonen til det valgte ordet ("overkill", "trøtt"). For en applikasjonsprogrammerer er flere operasjoner hjørnesteinen, hovedprestasjonen og arven til C-språket, så naturlig at de ofte ikke blir gjenkjent.

På C++ språk pluralitet utvidet ikke bare til de opprinnelige operasjonene, men også til funksjoner - både individuelle og kombinert i klasser - metoder. Med flere metoder kom muligheten til å overstyre dem i utvidede klasser, som vagt ble kalt "polymorfisme." Kombinasjonen av polymorfisme og overbelastning produserte en eksplosiv blanding som delte seg i to polymorfismer: «sann» og «ad-hoc». Det er bare mulig å forstå dette til tross for de tildelte navnene. Veien til annonse er brolagt med utenlandske navn.

En erklæring av formen "overbelastning" er bedre uttrykt i ordet tilleggskunngjøring — legge til en erklæring om en funksjon med samme navn med argumenter for et annet bilde.

En erklæring av formen "polymorfisme" kalles bedre ny kunngjøring — en overlappende erklæring i et nytt utvidelseslag av en funksjon med samme navn med argumenter for samme bilde.

Da vil det være lett å forstå at de samme metodene for forskjellige bilder (argumenter) - i tillegg annonsert, og ett bilde - kunngjort på nytt.

Russiske ord bestemmer.

Rullebane

Betraktning av begrepene svært figurative språk bekrefter viktigheten av en klar definisjon av grunnleggende begreper. Med C korrekt beskrevet, vil det være enkelt og morsomt å lære høyfigurative språk.

Dette er spesielt viktig for implisitte svært figurative språk (PHP, JavaScript). For dem blir betydningen av objekter (sammensatte bilder) enda høyere enn i C++, men selve konseptet med et bilde blir implisitt og unnvikende. Fra et bekvemmelighetssynspunkt har de blitt enklere, men fra et forståelsessynspunkt har de blitt vanskeligere.

Derfor bør du begynne å lære programmeringsspråk med C-språket og gå videre i den rekkefølgen som språkene i C-familien vises i.

Det samme gjelder for å beskrive språk. Ulike språk har samme, eller mindre, sett med enhetskjønn enn C-språket. Antall typer og eksempler kan variere i begge retninger: C++ har flere typer enn C, mens JavaScript har færre.

MySQL-språket fortjener spesiell omtale. Det ser ut til at det ikke er noe til felles, men han er perfekt beskrevet av Matryoshka, og det blir raskere og lettere å bli kjent med ham. Noe som er viktig, gitt dens betydning for nettet - spiseveien til moderne programmering. Og der det er MySQL, er det andre SQL-er. Vel, alle slags Fortran-Pascal-Pythoner er også beskrevet av Matryoshka, så snart de får tak i det.

Så store ting venter på oss - en anvendt beskrivelse av C-språket og en enhetlig beskrivelse av språkene som følger det. «Våre mål er klare, våre oppgaver er definert. Kom på jobb, kamerater! (Stormfull, langvarig applaus, går over til ovasjoner. Alle reiser seg.)"

Dine meninger vil bli lyttet til med stor oppmerksomhet, din hjelp til å lage nettsiden til hekkende dukker vil bli mottatt med stor takknemlighet. Mer fullstendig informasjon om boken er på nettstedet, smart skjult i Matryoshka C.

Kilde: www.habr.com

Legg til en kommentar