Gå til innhold

SWTransaction: Chumbawamba - Tubthumping!


Anbefalte innlegg

heisann,

poster for å vise til en liten sak jeg har kallt SWTransaction .. meningen med den er å få programmet til å komme seg på beina igjen (ref. emnetittel :)) etter noe går galt

 

et program utfører flere oppgaver.. måten man forklarer maskinen hvordan den skal utføre en oppgave er å representere oppgaven som flere underoppgaver som må gjøres ferdig før den store er klar i sin helhet.. når noe går galt med en av underoppgavene, er det greit at (side)effeketen av de underoppgavene som allerede er gjennomført kanseleres .. og det er slik man kan bruke SWTransaction (i Lisp kan man som et alternativ bruke en mer "functional programming"-stil fremfor side-effects, men det er ikke altid like hensiktsmessig)

 

her er et enkelt eksempel:

http://nostdal.org/~lars/programming/lisp/...tests/test.lisp

 

dette er så enkelt å bruke som det ser ut som (forhåpentligvis), og om du ruller litt ned på siden, så har jeg tatt med "Output when testing"; altså det som skjer når du kjører funksjonen

 

den 'revoker' også en transaksjon når en tråd kanseleres:

SWT> (withThread "test"
      (withTransaction nil
        (write-line "1") (finish-output)
        (revokable () ((write-line "revoking!")))
        (destroyThread *current-thread*)
        (write-line "2") (finish-output)))
1
revoking!

 

2 blir altså aldri skrevet ut, men den "passer på" å kalle alle `how-to-revoke'-formene (under `revoke'-former) i et `withTransaction'-kontekst (edit: som er evaluert til nå) selv når tråden kanseleres

 

kildekode her: http://nostdal.org/~lars/programming/lisp/swtransaction/

 

`withThread' og `*current-thread*' er en (selvstendig) del av Aromyxo, her: http://nostdal.org/~lars/programming/lisp/...xo/concurrency/

 

(wikien på hjemmesiden min er for tiden nede intill videre .. :roll: .. det er grunnen til at jeg ikke henviser direkte til denne her)

Endret av dayslepr
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...