Tsev > Exhibition > Ntsiab lus

Zaub register los yog cov ntaub ntawv qauv, rau kev nrhiav lub teeb ntas ntawm nested zog nyob rau hauv computer programming

Apr 22, 2017

Hu rau pawg

Nyob rau hauv computer science , ib tug hu pawg yog ib tug teeb qauv ntaub ntawv no uas stores ntaub ntawv hais txog lub active subroutines ntawm ib tug computer program . Qhov no zoo ntawm pawg no kuj hu ua ib tug tua pawg, qhov kev pab cuam pawg, tswj pawg, mus dhia-lub sij hawm teeb, los yog tshuab pawg, thiab yog feem ntau zog rau "lub teeb". Txawm tias txij nkawm ntawm lub hu pawg yog ib qho tseem ceeb rau cov hauj lwm ntawm feem ntau software , lub ntsiab lus yog feem ntau muab zais thiab tsis siv neeg nyob rau hauv high-theem programming lus . Muaj ntau computer qhia poob lawm muab tshwj xeeb cov lus qhia rau manipulating sib tsub sib nias.

Ib tug hu pawg yog siv rau ob peb yam hom phiaj, tab sis lub ntsiab yog vim li cas rau qhov muaj ib tug yog mus kom khiav ntawm tus taw tes uas txhua yam kom nquag plias subroutine yuav tsum rov qab tswj thaum nws finishes executing. Ib tug active subroutine yog ib tug uas tau raug hu ua, tiam sis yog tsis tau ua kom tiav tiav tom qab uas tswj yuav tsum muab cev rov qab mus rau lub point ntawm hu. Tej activations ntawm subroutines tej zaum yuav nested rau txhua qib (recursive raws li ib tug tshwj xeeb cov ntaub ntawv), li no cov pawg qauv. Yog hais tias, piv txwv li, ib tug subroutine DrawSquare hu ib tug subroutine DrawLine los ntawm plaub qhov chaw sib txawv, DrawLine yuav tsum paub tias qhov twg mus rov qab thaum nws tiav tiav. Yuav kom ua tau li no, lub chaw nyob nram qab no rau tus hu qhia , lub chaw xa rov qab , yog thawb mus rau tus hu pawg nrog txhua hu.


txheem

[ Hide ]


Hauj lwm [ edit ]

Txij li thaum lub hu pawg yog lub koom haum raws li ib tug pawg , ib tus neeg hu pushes chaw xa rov qab mus rau lub teeb, thiab lub hu ua subroutine, thaum nws qhia tag lawm, cia li nkaum kiag los yog pops lub chaw xa rov qab tawm lub hu pawg thiab kev hloov tsheb tswj rau qhov chaw nyob. Yog hais tias ib tug hu ua subroutine hu rau tsis tau lwm subroutine, nws yuav thawb lwm chaw xa rov qab mus rau lub hu pawg, thiab hais txog, cov ntaub ntawv uas stacking thiab unstacking li qhov kev pab cuam dictates. Yog hais tias lub thawb noj tag nrho ntawm qhov chaw faib rau tus hu pawg, ib qho yuam kev hu ua ib tug pawg txeej no tshwm sim, feem ntau yuav ua tau rau qhov kev pab cuam rau tsoo . Ntxiv ib subroutine tus nkag mus rau lub hu pawg yog tej zaum hu ua "winding"; conversely, tshem nkag yog "unwinding".

Muaj feem ntau yog raws nraim ib hu pawg txuam nrog ib tug khiav qhov kev pab cuam (los yog ntau tshaj meej, nrog txhua ua hauj lwm los yog xov ntawm ib tug txheej txheem ), txawm hais tias ntxiv sib tsub sib nias tej zaum yuav yog tsim rau lub teeb liab tuav los yog koom tes multitasking (raws li nrog setcontext ). Txij li thaum muaj no tsuas muaj ib nyob rau hauv no tseem ceeb cov ntsiab lus teb, nws yuav raug xa mus rau raws li qhov teeb (implicitly, "ntawm neeg ua hauj lwm"); Txawm li cas los, nyob rau hauv lub Forth lub cajmeem lus cov ntaub ntawv pawg los yog parameter pawg yog nkag ntau ntsees tshaj hu pawg thiab yog feem ntau xa mus rau raws li qhov teeb (saib hauv qab).

Nyob rau hauv high-theem programming lus , lub specifics ntawm qhov hu rau pawg no feem ntau yog muab zais los ntawm cov programmer. Lawv yuav muab kev nkag tau mus xwb mus rau ib tug set ntawm kev khiav dej num, thiab tsis yog tus nco nyob rau pawg nws tus kheej. Qhov no yog ib qho piv txwv ntawm abstraction . Feem ntau cov los ua ke lus , rau lwm cov tes, yuav tsum tau programmers yuav tsum tau muab kev koom tes nrog manipulating cov pawg. Lub sij paub meej txog cov teeb nyob rau hauv ib tug programming lus nyob ntawm seb raws li qhov compiler , operating system , thiab cov muaj kev qhia ntawv txheej .

Tso cai ntawm qhov hu rau pawg [ edit ]

Raws li sau tseg saum toj no, lub hom phiaj ntawm ib tug hu pawg yog cia tus rov qab chaw nyob. Thaum ib tug subroutine yog hu ua, qhov chaw (chaw nyob) ntawm cov kev qhia ntawv uas nws muaj peev xwm tom qab rov pib dua xav tau kev pab tau txais kev cawmdim qhov chaw. Siv ib pawg kom txuag tau tus chaw xa rov qab muaj ib qho tseem ceeb zoo dua lwm txoj hauj lwm dab tsi cov rooj sib txoos . Ib tug yog hais tias txhua tus neeg ua hauj lwm yuav muaj nws tus kheej pawg, thiab li tus subroutine yuav ua tau reentrant , uas yog, muaj peev xwm ua tau ntau yam txhij rau yam ua tej yam txawv. Lwm cov kev pab yog hais tias recursion yog txiav txaus siab. Thaum ib tug muaj nuj nqi hu nws tus kheej recursively, ib tug rov qab chaw nyob xav tau kev pab yuav tsum tau khaws cia rau txhua kom ntawm cov nuj nqi thiaj li hais tias nws yuav tom qab yuav siv tau los rov qab los ntawm cov nuj nqi kom. Tshooj lug muab no muaj peev xwm txiav.

Nyob rau cov lus, kev khiav hauj lwm-system, thiab siv tshuab los ib puag ncig, ib tug hu pawg yuav ua ntxiv cov hom phiaj, xws li piv txwv:

Local cov ntaub ntawv cia


Ib tug subroutine nquag xav tau kev pab nco qhov chaw rau khaws cia rau qhov tseem ceeb ntawm lub zos variables , lub zog uas paub xwb nyob rau hauv lub active subroutine thiab tsis khaws qhov tseem ceeb tom qab nws rov. Nws yog feem ntau yooj yim rau faib chaw rau no siv los ntawm tsuas yog mus rau sab saum toj ntawm lub teeb los ntawm txaus los muab qhov chaw. Qhov no yog heev ceev ceev thaum piv rau dynamic nco qee , uas siv cov heap qhov chaw . Nco ntsoov tias txhua cais kom ib tug subroutine txais nws tus kheej cais qhov chaw nyob rau hauv lub teeb rau neeg hauv zos.


parameter dhau


Subroutines feem ntau yuav tsum tau hais tias qhov tseem ceeb rau tsis tau nkag mus rau lawv los ntawm lub code uas hu lawv, thiab nws yog tsis yooj yim dua uas qhov chaw rau cov tsis yuav tsum tau pw tawm nyob rau hauv lub hu pawg. Feem ntau, yog hais tias muaj tsuas yog ib tug ob peb me me tsis, processor sau yuav siv tau los dhau qhov tseem ceeb, tab sis, yog hais tias muaj ntau ntau cov tsis tshaj yuav muaj leej twg ua li no, nco qhov chaw yuav tsum tau. Tus hu pawg ua hauj lwm zoo raws li ib qho chaw rau cov tsis, tshwj xeeb tshaj yog txij thaum txhua hu mus rau ib tug subroutine, uas yuav muaj differing qhov tseem ceeb rau tsis, yuav tsum tau muab cais qhov chaw nyob rau hauv lub hu pawg rau cov neeg tseem ceeb.


Kev luj xyuas pawg


Operands rau xam los yog cov zajlus kom ua hauj lwm yog feem ntau muab tso rau hauv sau thiab ua rau muaj. Txawm li cas los, nyob rau hauv tej lub sijhawm operands tej zaum yuav teem mus rau ib tug arbitrary tob, uas txhais tau tias ib yam dab tsi ntau tshaj li sau yuav tsum tau siv (qhov no yog cov ntaub ntawv ntawm register pheej ua dej txeej ). Cov pawg ntawm xws operands, es zoo li hais tias nyob rau hauv ib tug RPN tswvyim , yog hu ua kev ntsuam xyuas pawg, thiab tej zaum yuav nyob qhov chaw nyob rau hauv lub hu pawg.


Pointer rau tam sim no txwv


Ib txhia yam khoom-taw qhia kom paub hom lus (eg, C ++ ), cia cov no pointer nrog nuj nqi nqe lus nyob rau hauv lub hu pawg thaum invoking txoj kev. Cov no pointer ntsiab lus mus rau tus kwv Piv txwv txuam nrog rau txoj kev yuav tsum tau invoked.


Muab subroutine ntsiab lus teb


Ib txhia programming lus (piv txwv li, Pascal thiab Ada ) kev pab txhawb nqa kev tshaj tawm ntawm nested subroutines , uas yog tso cai mus saib tau lub ntsiab lus teb ntawm lawv muab txhua hnub, xws li, cov tsis thiab lub zos tsis pub dhau lub Scope ntawm cov txheej txhua hnub. Tej zoo li qub zes yuav rov - ib tug muaj nuj nqi tshaj tawm hais tias nyob rau hauv ib muaj nuj nqi tshaj tawm hais tias nyob rau hauv ib muaj nuj nqi ... Lub siv yuav tsum muab ib tug txhais tau tias los ntawm uas ib tug hu ua muaj nuj nqi thaum twg muab zoo li qub zes theem yuav reference muab ncej nyob rau txhua muab ua zes theem. Feem ntau qhov no reference yog siv los ntawm ib tug pointer mus rau lub thav duab ntawm lub feem ntau tsis ntev los no tshuab txais lom ntawm lub muab nuj nqi, hu ua ib tug "downstack link" los yog "zoo li qub link", kom paub qhov txawv nws los ntawm qhov "dynamic link" uas yog hais txog mus rau lub tam sim ntawd hu ( uas yuav tsum tau yuav tsis yog tus zoo li qub niam txiv muaj nuj nqi).


Es tsis txhob zoo li qub txuas, lub chiv keeb mus rau lub muab zoo li qub ntas yuav tau sau rau hauv ib qho array ntawm pointers paub raws li ib tug zaub uas yog indexed los nrhiav ib yam ncej. Lub qhov tob ntawm ib tug niaj hnub tus lexical zes yog ib tug paub tsis tu ncua, kom qhov luaj li cas ntawm ib tug niaj hnub lub zaub tsau. Tsis tas li ntawd, tus xov tooj ntawm muaj scopes rau traverse yog lub npe hu, lub Performance index rau hauv cov zaub no kuj tsau. Feem ntau ib tug niaj hnub lub zaub nyob rau hauv nws tus kheej pawg ncej, tab sis lub Burroughs B6500 siv xws li ib tug zaub nyob rau hauv kev kho vajtse uas txhawb mus txog 32 theem ntawm zoo li qub zes.


Cov zaub nkag denoting muaj scopes yog tau los ntawm qhov kev tsim nyog prefix ntawm tus neeg lub zaub. Ib tug puab niaj hnub uas recurses tsim cais hu ntas rau txhua invocation. Nyob rau hauv cov ntaub ntawv no, tag nrho cov puab niaj hnub tus zoo li qub mus kis tau rau tib txheej niaj hnub ntsiab lus teb.


Lwm yam rov qab lub xeev


Ntawm ib sab lub chaw xa rov qab, nyob rau hauv ib co chaw tej zaum yuav muaj lwm yam tshuab los yog software xeev uas yuav tsum tau yuav tsum tau rov qab los thaum ib tug subroutine rov qab. Qhov no tej zaum muaj xws li tej yam uas zoo li lub sam xeeb theem, kos-kov ntaub ntawv, xam hom, thiab li ntawm. Yog hais tias xav tau, qhov no tej zaum yuav muab cia rau hauv lub hu pawg li lub chaw xa rov qab yog.


Cov raug hu pawg yog siv rau cov chaw xa rov qab, neeg hauv zos, thiab tsis (paub raws li ib tug hu ncej). Nyob rau hauv ib co chaw tej zaum yuav muaj ntau dua los yog tsawg dua lub zog ua hauj lwm rau tus hu pawg. Nyob rau hauv lub Forth lub cajmeem lus , piv txwv li, yus tsuas yog tus rov qab qhov chaw nyob, suav voj tsis thiab indexes, thiab tejzaum nws lub zos variables yog khaws tseg rau tus hu pawg (uas nyob rau hauv uas ib puag ncig yog npe hu ua cov rov qab pawg), txawm hais tias tej ntaub ntawv yuav tsum mus ib ntus tso muaj siv tshwj xeeb rov qab-pawg tuav code li ntawd, ntev li cov kev xav tau ntawm kev hu thiab rov qab yog respected; tsis yog tias yus muab cia rau hauv ib tug nyias muaj nyias ib cov ntaub ntawv pawg los yog parameter pawg, feem ntau hu ua lub teeb nyob rau hauv Forth terminology txawm tias muaj yog ib tug hu pawg txij thaum nws yog feem ntau accessed ntau ntsees. Ib txhia Forths kuj muaj ib tug thib peb pawg rau floating-point tsis.

Qauv [ edit ]

Hu rau pawg layout

Ib tug hu pawg yog tsim los ntawm cov pawg ntas (kuj hu ua kom cov ntaub ntawv los yog ua kom ntas). Cov no yog cov tshuab nyob thiab ABI -dependent ntaub ntawv lug muaj subroutine xeev xwm. Qhov no cov ntaub ntawv yog tej zaum raug xa mus rau raws li CFI (Hu Ncej Information). [1] Txhua pawg ncej raws li ib tug hu mus rau ib tug subroutine uas twb tsis tau haujlwm nrog ib tug rov qab. Piv txwv li, yog tias ib tug subroutine npe DrawLine yog tam sim no khiav, tau raug kev hu ua los ntawm ib tug subroutine DrawSquare , rau sab saum toj ib feem ntawm qhov hu rau pawg yuav tsum tau pw tawm ib yam li nyob rau hauv daim duab nyob rau sab xis.

Ib tug daim duab zoo li no yuav tsum kos nyob rau hauv yog kev taw qhia raws li ntev raws li qhov kev tso kawm ntawm sab saum toj, thiab thiaj li cov kev taw qhia ntawm pawg txoj kev loj hlob, yog to taub. Tsis tas li ntawd, nws tus kheej ntawm no, architectures txawv raws li seb hu sib tsub sib nias loj hlob ntawm ntau dua chaw nyob los yog ntawm sab chaw nyob. Lub logic ntawm daim duab yog ywj siab ntawm lub hais xaiv.

Cov pawg ncej ntawm lub sab saum toj ntawm lub teeb yog rau tam sim no executing niaj hnub ua. Cov pawg ncej feem ntau muaj xws li ntawm tsawg kawg yog cov nram qab no cov khoom (nyob rau hauv laub thiaj):

  • cov nqe lus (parameter qhov tseem ceeb) dhau mus rau lub niaj zaus (yog tias muaj);

  • lub chaw xa rov qab rov qab mus rau lub niaj zaus txoj kev hu (xws li nyob rau hauv lub DrawLine pawg ncej, ib qho chaw nyob rau hauv DrawSquare 's code); thiab

  • qhov chaw rau lub zos variables ntawm lub niaj zaus (yog tias muaj).

Tshooj thiab ncej pointers [ edit ]

Thaum pawg ncej ntau thiab tsawg pab yuav txawv, xws li sib txawv zog los yog nruab nrab invocations ntawm ib tug muaj nuj nqi, popping ib tug ncej tawm lub teeb tsis roos ib tug tsau decrement ntawm lub teeb pointer. Thaum muaj nuj nqi rov qab, lub teeb pointer yog es tsis txhob rov qab los rau tus ncej pointer, tus nqi ntawm cov pawg pointer cia li ua ntej cov nuj nqi twb hu ua. Txhua pawg ncej muaj ib pawg pointer mus rau lub sab saum toj ntawm tus ncej tam sim ntawd hauv qab no. Cov pawg pointer yog ib tug mutable register qhia ntawm tag nrho cov invocations. Ib tug ncej pointer ntawm ib tug muab invocation ntawm ib tug muaj nuj nqi yog ib daim qauv ntawm cov pawg pointer raws li nws yog ua ntej cov nuj nqi twb invoked. [2]

Cov chaw zov me tag nrho lwm cov teb nyob rau hauv tus ncej yuav muab txhais txheeb ze tog twg los rau sab saum toj ntawm tus ncej, tsis zoo li offsets ntawm lub teeb pointer, los yog tus txheeb ze mus rau sab saum toj ntawm tus ncej hauv qab no, raws li zoo offsets rau ntawm tus ncej pointer. Lub chaw rau ntawm tus ncej pointer nws tus kheej yuav tsum inherently muab txhais raws li ib tug tsis zoo offset ntawm lub teeb pointer.

Khaws cia rau qhov chaw nyob rau tus neeg lub ncej [ edit ]

Nyob rau hauv feem ntau systems ib pawg ncej muaj ib tug teb kom muaj lub yav dhau los tus nqi rau ntawm tus ncej pointer register, tus nqi nws muaj thaum tus neeg hu tau executing. Piv txwv li, lub teeb ncej ntawm DrawLine yuav muaj ib tug cim xeeb qhov chaw tuav tus ncej pointer nqi uas DrawSquare siv (tsis muaj nyob rau hauv daim duab saum toj no). Tus nqi yog rua thaum nkag mus rau lub subroutine thiab rov qab los raws li qhov rov qab. Muaj xws li ib tug teb nyob rau hauv ib tug lub npe hu qhov chaw nyob rau hauv lub teeb ncej enables code mus saib ib kablus successively hauv qab tam sim no executing niaj hnub tus ncej, thiab kuj tso cai rau lub niaj zaus mus tau yooj yim los tus ncej pointer rau tus neeg lub ncej, cia li ua ntej nws rov.

Lexically nested hnub [ edit ]

Kev qhia ntxiv: Nested muaj nuj nqi thiab Non-hauv zos nce mus nce los

Programming lus uas txhawb nested subroutines kuj muaj ib daim teb nyob rau hauv lub hu ncej uas taw mus rau lub teeb ncej ntawm qhov tseeb ua kom cov cov txheej txheem uas feem ntau zoo encapsulates lub callee, piv txwv li lub tam sim ntawd uas muaj lub callee. Qhov no yog hu ua ib tug nkag txuas los yog zoo li qub txuas (raws li nws yuav khiav ntawm zoo li qub zes thaum lub sij hawm dynamic thiab recursive hu) thiab muab cov niaj hnub (raws li tau zoo raws li lwm yam niaj hnub ua nws tej zaum yuav ua tau rau tus) nkag tau mus rau hauv lub zos cov ntaub ntawv ntawm nws encapsulating uake hauv txhua txhua zes theem. Ib txhia architectures, compilers, los yog optimization mob khw ib qhov txuas rau txhua muab theem (tsis yog tus tam sim ntawd muab), yog li ntawd heev nested hnub uas nkag ntiav cov ntaub ntawv tsis tas yuav traverse ob peb mus; lub tswv yim no yog feem ntau hu ua ib tug "zaub". [3]

Access mus yuav tau optimized tam sim ntawd thaum ib puab muaj nuj nqi tsis nkag tej (uas tsis yog-qhov) hauv zos cov ntaub ntawv nyob rau hauv lub encapsulation, raws li yog cov ntaub ntawv nrog ntshiab zog sib txuas lus xwb ntawm cov lus thiab rov qab qhov tseem ceeb, piv txwv li. Ib txhia keeb kwm computers, xws li cov Burroughs loj systems , tau tshwj xeeb "zaub sau" los pab txhawb nested zog, thaum compilers rau feem ntau niaj hnub cav (xws li lub ubiquitous x 86) tsuas muaj ib tug ob peb lo lus rau pawg rau cov pointers, raws li xav tau.

Sib tshooj [ edit ]

Rau tej hom phiaj, lub teeb ncej ntawm ib tug subroutine thiab hais tias ntawm nws cov kev hem yuav muab suav hais tias sib tshooj, cov tshooj muaj qhov chaw uas tus tsis yog dhau los ntawm ib tus neeg hu mus rau lub callee. Nyob rau hauv ib co chaw, ib tus neeg hu pushes txhua sib cav mus rau lub teeb, yog li txuas rau nws pawg ncej, ces thov lub callee. Nyob rau hauv lwm yam kev kawm, tus neeg hu muaj ib tug preallocated cheeb tsam nyob rau saum toj ntawm nws pawg ncej los tuav cov nqe lus nws khoom siv rau lwm yam subroutines nws hu. Qhov no cheeb tsam yog tej zaum ib cov ntsaws cov lus sib cav cheeb tsam los yog callout cheeb tsam. Nyob rau hauv no mus kom ze, qhov loj ntawm lub cheeb tsam no yog muab los xam los ntawm cov compiler rau yuav loj tshaj plaws uas yuav tsum tau los ntawm tej yam hu ua subroutine.

Siv [ edit ]

Hu rau qhov chaw ua [ edit ]

Feem ntau cov hu pawg manipulation yuav tsum tau nyob rau hauv lub qhov chaw ntawm ib tug hu mus rau ib tug subroutine yog tsawg heev (uas yog zoo txij li thaum muaj yuav ua tau ntau hu qhov chaw rau txhua subroutine yuav tsum tau hu ua). Lub qhov tseem ceeb rau lub txoos nqe lus yog soj ntsuam nyob rau hu site, txij thaum lawv yog cov kev mus rau lub kev hu, thiab tog twg los raug thawb mus rau lub teeb los yog muab tso rau hauv sau, raws li txiav txim los ntawm lub siv hu convention . Lub sij hu qhia ntawv, xws li "ceg thiab link", no ces feem ntau tua mus rau cov hloov kev tswj rau cov code ntawm lub hom phiaj subroutine.

Subroutine nkag ua [ edit ]

Nyob rau hauv lub hu ua subroutine, thawj code tua feem ntau yog ua ib lub subroutine prologue , txij li thaum nws cov kev tsim nyog saib xyuas vaj tse ua ntej lub code rau cov nqe lus ntawm lub niaj zaus yog pib.

Lub prologue yuav kheev txuag lub chaw xa rov qab tshuav nyob rau hauv ib tug register los ntawm qhov hu rau kev qhia ntawv los ntawm thawb tus nqi mus rau tus hu pawg. Ib yam li ntawd, tam sim no pawg pointer thiab / los yog tus ncej pointer qhov tseem ceeb tej zaum yuav tau raug thawb. Xwb, ib co kev qhia ntawv txheej architectures txiav muab piv functionality raws li ib feem ntawm qhov kev txiav txim ntawm qhov hu rau kev qhia ntawv nws tus kheej, thiab nyob rau hauv xws li ib puag ncig lub prologue yuav tsum tsis txhob ua li no.

Yog hais tias ncej pointers yog siv, cov prologue yuav feem ntau muab cov nqi tshiab rau ntawm tus ncej pointer register los ntawm cov pawg pointer. Chaw nyob rau cov tshooj rau qhov chaw tsiaj ces yuav faib los ntawm incrementally hloov lub teeb pointer.

Lub Forth lub cajmeem lus tso cai qhia tau meej heev winding ntawm qhov hu rau pawg (hu ua muaj lub "rov qab pawg").

Rov qab ua [ edit ]

Thaum ib tug subroutine yog npaj txhij rau rov qab los, nws executes ib epilogue uas undoes cov kauj ruam ntawm lub prologue. Qhov no yuav feem ntau los cawm tau register qhov tseem ceeb (xws li tus ncej pointer tus nqi) los ntawm cov pawg ncej, pop tag nrho cov teeb ncej tawm lub teeb los hloov tus pawg pointer nqi, thiab thaum kawg ceg rau cov kev qhia ntawv nyob rau lub chaw xa rov qab. Nyob rau hauv muaj ntau yam hauj lwm dab tsi cov rooj sib txoos cov khoom plaws tom tawm lub teeb los ntawm lub epilogue muaj xws li tus thawj sib cav qhov tseem ceeb, nyob rau hauv uas cov ntaub ntawv muaj feem ntau yog tsis muaj ntxiv teeb manipulations uas yuav tsum tau ua los ntawm ib tus neeg hu. Muaj ib co hauj lwm dab tsi cov rooj sib txoos, txawm li cas los, nws yog tus neeg lub luag hauj lwm rau tshem tawm cov nqe lus los ntawm cov pawg tom qab rov qab los.

Unwinding [ edit ]

Rov qab los ntawm tus hu ua muaj nuj nqi yuav pop rau sab saum toj ncej off of lub teeb, tej zaum tawm hauv ib tug rov qab nqi. Qhov ntau general ua los ntawm kev popping ib los yog ntau tshaj ntas tawm lub teeb mus rov pib dua tua lwm qhov nyob rau hauv qhov kev pab cuam no yog hu ua pawg unwinding thiab yuav tsum ua thaum uas tsis yog-lub zos tswj lug siv, xws li cov neeg siv rau kev zam tuav . Nyob rau hauv cov ntaub ntawv no, lub teeb ncej ntawm ib tug muaj nuj nqi muaj ib los yog ntau tshaj nkag specifying kos handlers. Thaum ib qho kev zam yog muab pov tseg, lub teeb yog unwound kom txog thaum ib tug handler yog pom tias yog npaj rau lis (catch) lub hom ntawm cov pov kos.

Ib co lus muaj lwm yam kev tswj lug uas yuav tsum tau kev unwinding. Pascal tso cai ib tug ntiaj teb no goto daim ntawv mus rau cov hloov tswj tawm ntawm ib tug nested muaj nuj nqi thiab mus rau hauv ib tug yav tas los invoked txheej muaj nuj nqi. Qhov no lub lag luam yuav tsum tau rau cov pawg yuav tsum tau unwound, tshem raws li ntau pawg ntas raws li tsim nyog los muab cov ntsiab lus teb mus rau cov hloov kev tswj rau cov phiaj nqe lus nyob rau hauv lub muab txheej muaj nuj nqi. Ib yam li ntawd, C muaj setjmp thiab longjmp zog uas ua raws li uas tsis yog-lub zos gotos. Common Lisp tso cai tswj ntawm dab tsi tshwm sim thaum lub teeb yog unwound los ntawm kev siv lub unwind-protect tshwj xeeb xov tooj.

Thaum ua ntawv thov ib tug continuation , lub teeb yog (txawj) unwound thiab ces rewound nrog lub teeb ntawm lub txuas ntxiv. Qhov no tsis yog tsuas yog txoj kev los mus siv continuations; piv txwv li, siv ntau yam, qhia tau meej heev sib tsub sib nias, daim ntawv thov ntawm ib tug continuation muaj peev xwm tsuas qhib nws pawg thiab poob ib tug nqi yuav tsum tau dhau. Lub Scheme programming lus tso cai arbitrary thunks yuav tsum tau tua nyob rau hauv qee cov ntsiab lus nyob rau hauv "unwinding" los yog "Rewinding" ntawm cov kev tswj teeb thaum ib tug continuation yog invoked.

Soj ntsuam [ edit ]

Saib kuj: Racial (computer programming)

Tus hu pawg tau tej zaum kuj yuav ntsuam xyuas raws li qhov kev pab cuam yuav khiav. Nyob ntawm seb yuav ua li cas qhov kev pab cuam yog sau thiab muab tso ua ke, cov ntaub ntawv nyob rau hauv lub teeb yuav siv tau los mus txiav txim intermediate qhov tseem ceeb thiab muaj nuj nqi hu ib co kua nplaum. Qhov no twb tau muab siv los ua kom muaj zoo-grained cia li ntsuam xyuas, [4] thiab nyob rau hauv tus neeg mob zoo li Ruby thiab Smalltalk, siv first-class continuations. Raws li ib qho piv txwv, cov GNU Debugger (GDB) siv kev sib tham sib kev soj ntsuam ntawm qhov hu rau pawg ntawm ib tug khiav, tab sis txawm nres, C cov kev pab cuam. [5]

Noj tsis tu ncua lub sij hawm kuaj ntawm qhov hu rau pawg yuav pab tau nyob rau hauv profiling qhov kev kawm ntawm cov kev pab cuam, vim hais tias yog ib tug subroutine lub pointer tshwm rau hauv lub hu pawg zauv cov ntaub ntawv ntau lub sij hawm, nws yog tej zaum yuav muaj code bottleneck thiab yuav tsum tau ntsuam xyuas rau kev kawm ntawv tej teeb meem.

Security [ edit ]

Main tsab xov xwm: Tshooj tsis phwj

Nyob rau hauv ib hom lus nrog dawb pointers los yog uas tsis yog-soj ntsuam array sau (xws li nyob rau hauv C), cov mixing tswj txaus ntaub ntawv uas muaj feem xyuam rau cov tua ntawm code (rov qab chaw nyob los yog cov uas raug cawm ncej pointers) thiab yooj yim kev pab cuam cov ntaub ntawv (tsis los yog rov qab qhov tseem ceeb ) nyob rau hauv ib tug hu pawg yog muaj kev ruaj ntseg yuav raug, tejzaum exploitable los ntawm pawg tsis overflows li cov feem ntau hom tsis overflows .

Ib tug ntawm xws tawm tsam yuav sau ib tsis nrog arbitrary executable code, thiab ces xos cov qub los yog ib txhia lwm tsis mus overwrite ib co chaw xa rov qab nrog ib tug nqi uas taw ncaj qha mus rau lub executable code. Raws li ib tug tshwm sim, thaum cov nuj nqi rov, lub computer executes uas code. Qhov no zoo ntawm ib tug nres yuav muab tau yooj yim sim nrog W ^ X . [ Citation ntxiv ] Zoo li tawm tsam yuav kawm tau ntawv zoo txawm nrog W ^ X tiv thaiv enabled, nrog rau cov rov qab-rau-libc nres los yog cov kev tawm tsam los ntawm rov qab-taw qhia kom paub programming . Ntau mitigations tau npaj siab, xws li khaws cia arrays nyob rau hauv ib tug kiag li nyias muaj nyias ib qhov chaw los ntawm qhov rov qab pawg, raws li yog cov ntaub ntawv nyob rau hauv lub Forth programming lus. [6]