Hvad gør ' under emhætten ' mener i programmering?

Bedste svar

Tænk på en bil. Vi kan (og ofte) køre en bil uden at forstå, hvordan det fungerer. De fleste mennesker ser aldrig på motoren i bilen, der lever under emhætten (vi kalder det emhætte i Amerika, men for eksempel kalder britiske folk det motorhjelm ).

Ud over motoren er der en transmission , som tager kraften genereret af motoren og transmitterer den til drivlinjen , som i sidste ende tager den kraft og drejer hjulene. De fleste mennesker forstår ikke nogen af ​​disse detaljer, og det er heller ikke nødvendigt for at betjene en bil.

Som programmør er det ofte nyttigt at vide, hvad der sker under emhætten, fordi det giver dig indsigt. i ting, du ikke kan se.

To Python-eksempler, der kan vise sig nyttige:

Variabler i Python forklares ofte til begyndende programmører som navngivne felter , hvor du kan placere data. Så når du skriver

x = 1

opretter du faktisk en boks og navngiver den x og sætte en 1 i kassen. Når du senere inspicerer boksen, finder du, at der er en 1 i den.

Det er dog ikke det, der foregår under emhætten . Variablen x er en reference eller etiket, der fortæller dig, hvor 1 faktisk er gemt i hukommelsen. Tænk på en klistermærke med en x på den, der sidder fast på kassen med 1. Hvis du beslutter dig for at sætte noget andet i kassen, måske en 2, opretter Python en helt ny kasse og flytter den klæbrige note fra det første felt til det andet. Dette er let at demonstrere ved hjælp af Pythons id() -funktion, som effektivt fortæller mig, hvor et objekt lever i Pythons hukommelse (det er ikke strengt sandt, men det kræver en afvigelse, der ikke længere er nyttig til besvarelse af spørgsmålet).

>>> x = 1

>>> id(x)

4501308752

>>> x = 2

>>> id(x)

4501308784

Du kan se, at x var et bestemt sted, og hvornår Jeg ændrede dets indhold, x flyttede faktisk. Hvorfor dette sker er en anden afvigelse, der heller ikke er vigtig her. Faktum er, at x flyttes i den forstand, at de data, som x henviser til, nu er et andet sted.

Begyndende Python-programmører ved det ikke og vigtigere, de behøver ikke at vide dette . Det er helt fint at bruge analogien med et navngivet felt.

Det andet eksempel er mere komplekst og vil potentielt være vanskeligt for nybegyndere at forstå.

Python Data Model kortlægger et antal såkaldte indbyggede funktioner til klassemetoder under emhætten . Jeg kan godt lide at forklare det ved hjælp af tv-showet Stranger Things som referencepunkt. I det show er der en opad nede , som er som et alternativt univers, hvor ting er genkendelige, men rodet op. Overvej Python len() -funktionen. Dette er angivet i manualen som en Indbygget funktion , som returnerer antallet af elementer i noget. Du kan beregne længden af ​​en string (som er en container ), en list (også en container) osv.

Begyndende Python-programmører læres typisk, at len() simpelthen er en indbygget funktion, og den fungerer på enhver container. Hvad der sker under emhætten er faktisk, at Python oversætter et opkald til len() til en metode i på hovedet kaldet \_\_len\_\_(). Hvis det objekt, du sender til len(), har en \_\_len\_\_() -metode, fungerer det. Hvis ikke, vil det ikke. Derfor kan man for eksempel ikke ringe til len() på et heltal:

>>> len(5)

Traceback (most recent call last):

File "", line 1, in

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

Python-programmørens begyndelse forstår dette til at betyde, at et heltal ikke er en beholder, og derfor ikke noget at tælle.Men det er nemt at oprette en heltalstype, som vi kan kalde len() -funktionen 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 oprettede en ny type kaldet MyInt, definerede en variabel x af typen MyInt og kunne kalde len(). Min len() er ret ubrugelig (), men det viser, at len() kan kaldes til ethvert objekt, ikke kun en “container. ” I praksis opretter jeg som programmerer mit eget objekt Organization, der repræsenterer en virksomhed eller en anden organisation. og jeg vil muligvis kunne kalde len() på et Organization objekt og få det tilbage det antal år, som organisationen har eksisteret .

Så ved at forstå, hvad der foregår under emhætten, kan vi gå længere som programmører.

Svar

Jeg tror, ​​andre har givet gode forklaringer på, hvad “ under emhætten ”betyder generelt.

Nogle bemærkninger, der skal præciseres: en computer er i sin enkleste form processor og hovedhukommelse. Processorer læser meget specielle instruktioner og flytter værdierne i hukommelsen omkring. Hukommelsen er opdelt i utallige celler, hver celle har en adresse.

“Under emhætten” ser din computers hukommelse sådan ud:

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

Når du arbejder på et højt sprog (jeg formoder, at du arbejder med Java eller Python eller noget lignende) er det svært at forstå, hvorfor tingene er som de er. Lad os f.eks. Overveje en linket liste. Du har muligvis vist et billede af bobler med tal i dem med en pil, der peger på en anden boble ved siden af.

Noget lignende:

Dette er alt sammen godt og godt for at forstå, hvordan sammenkædede lister fungerer i forhold til f.eks. en matrix; dog “under emhætten” er det meget anderledes.

Som vi sagde, er alt i computeren hukommelsesceller med værdier. En linket knudepunktsnode kan, mens den visualiseres nær sin nabo, være hundreder eller tusinder af bytes væk fra sin nabo. Under hætten er pilene, du ser på billedet, faktisk pegepinde, og en markør kan henvise til enhver celle i hukommelsen. Især henviser markøren til adressen på den næste node på listen.

Håber dette eksempel hjælper med at afklare, hvad han taler om.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *