Kan någon förklara vad ARC (Automatic Reference Counting) innebär på svenska

Permalänk
Medlem

Kan någon förklara vad ARC (Automatic Reference Counting) innebär på svenska

Ja skulle någon vilja förklara vad ARC (Automatic Reference Counting) innebär på svenska?

Permalänk
Datavetare

Automatisk referensräkning

Det är en metod för att avgöra om det fortfarande är någon del i programmet som fortfarande har en referens till ett visst objekt. Termen ARC ser man nog oftast i samband med iOS idag, men referensräkning används även under huven i språk som VB och Python.

Ett alternativ till ARC är GC (garbage collection), "skräpsamlare" användes som svensk term när jag gick på KTH. Rent teoretiskt är GC bättre än ARC då den senare kan orsaka minnesläckor i samband med bl.a. cirkulära strukturer, är upp till programmeraren att markera minst en referens i cirkeln som "svag" så den inte ökar referensen på objektet den pekar på.

Fördelen med ARC är att det är relativt lätt att implementera + livslängden på objekt är deterministiskt. Men har man ett system med mycket minne och framförallt många CPU-kärnor så blir däremot oftast GC mer effektivt, men det blir ganska komplicerat att hantera för den som skriver runtime-miljön, men enkelt för den som programmerar.

Ex på ARC:

x = new Obj # objektet som x refererar till har nu referensvärde 1 y = x # objektet som y och x pekar på har nu referensvärde 2 då det nås via två variabler x = None # objektet har nu referensvärde 1 då x inte längre pekar på objektet y = None # resurserna som objektet använde lämnas tillbaka till systemet då ingen längre kan nå det

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk

Garbage collection är ett mer generellt begrepp. Reference counting är ett sätt att implementera GC.

Permalänk
Hedersmedlem

Fördelen med referensräkning som de flesta glömmer bort är att du kan referensräkna vad somhelst, det kan vara grafiktexturer, nätverksklienter, diskresurser, molnresurser...

Garbage collection är såvitt jag vet oftast specialiserat på att hålla rent vad gäller dynamiskt allokerat minne.

Använd verktyget som passar ditt ändamål bäst. Nu kanske jag låter som ett C++-fan här, men.. Jag föredrar faktiskt java/scala med GC för det mesta ;).

Visa signatur

Every time you create an iterator: God kills a kitten.