Hva gjør ' under panseret ' mener i programmering?

Beste svaret

Tenk på en bil. Vi kan (og ofte kjøre) bil uten å forstå hvordan det fungerer. De fleste ser aldri på motoren til bilen, som lever under panseret (vi kaller det panseret i Amerika, men for eksempel kaller britiske folk det panser ).

I tillegg til motoren er det en girkasse , som tar kraften som genereres av motoren og overfører den til drivverk , som til slutt tar den kraften og snur hjulene. De fleste forstår ikke noen av disse detaljene, og de trenger heller ikke for å kunne betjene en bil.

Som programmerer er det ofte nyttig å vite hva som skjer under panseret, fordi det gir deg innsikt. i ting du ikke kan se.

To Python-eksempler som kan være nyttige:

Variabler i Python blir ofte forklart til begynnende programmerere som kasser der du kan plassere data. Så når du skriver

x = 1

, oppretter du faktisk en rute og navngir den x, og sette en 1 i boksen. Når du senere inspiserer boksen, vil du finne at det er en 1 i den.

Det er imidlertid ikke det som skjer under panseret . Variabelen x er en referanse eller etikett som forteller deg hvor 1 faktisk er lagret i minnet. Tenk på en klistrelapp med en x på, som sitter fast på esken som inneholder 1. Hvis du bestemmer deg for å legge noe annet i boksen, kanskje en 2, vil Python lage en helt ny boks og flytte den klissete merknad fra første boks til andre. Dette er enkelt å demonstrere ved hjelp av Pythons id() -funksjon, som effektivt forteller meg hvor et objekt lever i Pythons minne (det er ikke strengt sant, men det krever en digresjon som ikke lenger er nyttig for å svare på spørsmålet).

>>> x = 1

>>> id(x)

4501308752

>>> x = 2

>>> id(x)

4501308784

Du kan se at x var på et bestemt sted og når Jeg endret innholdet, x flyttet faktisk. Hvorfor dette skjer er en annen avvikelse som heller ikke er viktig her. Faktum er at x flyttes i den forstand at dataene som x refererer til, nå er på et annet sted.

Begynnende Python-programmerere vet ikke dette og enda viktigere, de trenger ikke vite dette . Det er helt greit å bruke analogien til en navngitt rute.

Det andre eksemplet er mer komplekst og vil potensielt være vanskelig for nybegynnere å forstå.

Python Data Model tilordner en rekke såkalte innebygde funksjoner til klassemetoder under panseret . Jeg liker å forklare det ved å bruke TV-programmet Stranger Things som referansepunkt. I det showet er det en oppside nede , som er som et alternativt univers der ting er gjenkjennelige, men rotet til. Tenk på Python len() -funksjonen. Dette er oppført i håndboken som en Innebygd funksjon som returnerer antall elementer i noe. Du kan beregne lengden på en string (som er en container ), en list (også en container) og så videre.

Begynnende Python-programmerere læres vanligvis at len() bare er en innebygd funksjon og den fungerer på hvilken som helst container. Det som faktisk skjer under panseret er at Python oversetter et kall til len() til en metode i opp ned kalt \_\_len\_\_(). Hvis objektet du sender til len() har en \_\_len\_\_() -metode, vil det fungere. Hvis ikke, vil det ikke. Dette er for eksempel at man ikke kan ringe len() på et helt tall:

>>> len(5)

Traceback (most recent call last):

File "", line 1, in

TypeError: object of type "int" has no len()

Python-programmereren begynner å forstå at dette betyr at et helt tall ikke er en beholder, og derfor ikke noe å telle.Men det er enkelt å lage en heltallstype som vi kan kalle len() -funksjonen for:

>>> class MyInt(int):

... # create an "upside down" method for len()

... def \_\_len\_\_(self):

... return 1

...

>>> x = MyInt(13)

>>> x

13

>>> len(x)

1

Jeg opprettet en ny type kalt MyInt, definerte en variabel x av typen MyInt, og kunne ringe len(). len() er ganske ubrukelig (), men det viser at len() kan kalles for ethvert objekt, ikke bare en «container. ” I praksis kan jeg som programmerer lage mitt eget objekt Organization, som representerer en bedrift eller en annen organisasjon. og jeg vil kanskje være i stand til å ringe len() på et Organization objekt og få den til å returnere antall år organisasjonen har eksistert .

Så ved å forstå hva som skjer under panseret, kan vi gå lenger som programmerere.

Svar

Jeg tror andre har gitt gode forklaringer på hva “ under panseret ”betyr generelt.

Noen merknader for å avklare: en datamaskin, i sin enkleste form, er prosessoren og hovedminnet. Prosessorer leser veldig spesielle instruksjoner og flytter verdiene i minnet. Minnet er delt inn i utallige celler, hver celle har en adresse.

“Under panseret” ser datamaskinens minne slik ut:

(Kilde: https://chortle.ccsu.edu/AssemblyTutorial/Chapter-10/memory01.gif)

Når du jobber på et høyt språk (jeg antar at du jobber med Java eller Python eller noe lignende) er det vanskelig å forstå hvorfor ting er slik de er. La oss for eksempel vurdere en koblet liste. Du kan ha blitt vist et bilde av bobler med tall i, med en pil som peker mot en annen boble ved siden av.

Noe sånt:

Dette er vel og bra for å forstå hvordan koblede lister fungerer sammenlignet med for eksempel en matrise; imidlertid, «under panseret» er det mye annerledes.

Som vi sa, alt i datamaskinen er minneceller med verdier. En koblet listeknute, mens den er visualisert i nærheten av naboen, kan være hundrevis eller tusenvis av byte unna naboen. Under panseret er pilene du ser på bildet faktisk pekepinner, og en peker kan referere til en hvilken som helst celle i minnet. Spesielt refererer pekeren til adressen til neste node i listen.

Håper dette eksemplet hjelper med å avklare hva han snakker om.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *