WeakMap este o colectie care urmeaza sa fie introdusa in JavaScript cu EcmaScript 6. Ofera o mapare de la obiecte la valori, dar permite ca orice intrare sa fie colectata la gunoi daca cheia este probabil pierduta.
Pentru a fi posibil ca o cheie sa se piarda in mod probabil, hartile slabe nu ofera o modalitate de a accesa lista de chei.
Acesta este un Node Packaged Module (NPM) care ofera un shim si un patch pentru implementarile WeakMap lipsa sau rupte adecvate pentru utilizare in Node.js si browsere care furnizeaza interfetele de descriere a proprietatii EcmaScript 5, cu conditia sa fie gazduit de un incarcator CommonJS sau de un pachet ca Browserify , Montage, Mr. sau Mop.
Consultati MDN pentru detalii API.
La momentul scrierii, implementarile prototipului WeakMap exista in V8 si Spidermonkey. Prototipul este disponibil in Node.js v0.10 cu optiunea –harmony_collections V8. In v0.8, era disponibil cu –harmony_weakmaps. Scopul acestui pachet este de a permite dependetilor sa utilizeze harti slabe, indiferent daca acestea sunt implementate de motorul de baza, desi intr-un mod care pierde memoria in unele cazuri neevidente.
Scop si limitare
Acest shim depinde si modifica metodele legate de descriptorul proprietatii ECMAScript 5, Object.defineProperty, Object.getOwnPropertyNames, Object.isExtensible, Object.freeze si Object.seal.
Pe scurt, shimul WeakMap emuleaza un WeakMap prin adaugarea unei proprietati ascunse la cheie care asociaza harta slaba cu obiectul retinut. Shimul suprascrie metodele ECMAScript 5 pentru a-si acoperi urmele.
Luati in considerare un scenariu care include doar o harta slaba, o cheie si o valoare corespunzatoare prin harta slaba. Cu un WeakMap adecvat, incorporat in motorul JavaScript, care se afla in interiorul colectorului de gunoi, valoarea va fi pastrata fie de cheie, fie de harta slaba. Daca fie cheia sau harta slaba sunt elligible pentru colectarea gunoiului, valoarea este elligible.
Acest lucru este in contrast cu o harta simpla.
videos pornos de abuelas videos putas maduras
sex porne coños de viejas
porno casero en españa porno madres peludas
sexo casero españa porno traducido español
pornotrans como folla mi mujer
incesto ruso hentaihd
maduras españolas camara oculta madura cabalgando
españolas amater paja en el coche
incesto lesbianas videosgays
videos porno gay de españoles caras llenas de semen
videos chicas gratis folladas extremas
cerdas com gratis porno casero real español
mamada de rodillas orgia bisexual
video sexo gratis tetudas españolas
mi primera follada videos de chicas gratis
abuelas españolas xxx parejas pilladas en la calle
miakalifa maduras por dinero
cartoon xxx www rubias
como folla mi mujer tetudas jovenes
Intr-un scenariu cu o harta, o cheie si o valoare corespunzatoare cheii prin harta, nici cheia, nici valoarea nu vor fi eligibile pentru colectarea gunoiului pana cand harta care le contine nu este eligibila. Astfel, daca o harta este utilizata pentru a stabili o relatie intre cheile efemere si valori, aceasta va acumula gunoi.
Acest shim face tot posibilul sa aproximeze un WeakMap adecvat fara o relatie intima cu colectorul de gunoi. In acelasi scenariu, valoarea va deveni eligibila pentru colectarea gunoiului daca cheia este eligibila. Spre deosebire de o harta slaba corespunzatoare, daca harta slaba devine eligibila pentru colectarea gunoiului, dar cheia este retinuta de altceva, valoarea va fi pastrata. In acest scenariu, toate operatiunile hartii slabe dureaza constant.
Cu toate acestea, daca cheia este inghetata , harta slaba pastreaza atat cheia, cat si valoarea si niciuna dintre ele nu este eligibila pentru colectare pana cand harta slaba devine ea insasi eligibila. Din pacate, acest scenariu este identic cu comportamentul unei harti. In plus, toate operatiunile hartii slabe sufera timp liniar.
Dupa cum afirma Mark Miller in cod:
Ca si in cazul WeakMaps adevarat, in aceasta emulatie, o cheie nu retine hartile indexate de acea cheie si (in mod crucial) o harta nu retine cheile pe care le indexeaza. O harta de la sine nu pastreaza nici valorile asociate acelei harti.
Cu toate acestea, valorile asociate cu o cheie intr-o anumita harta sunt pastrate atat timp cat cheia este pastrata si asociatiile respective nu sunt suprascrise. De exemplu, atunci cand sunt folosite pentru a sustine membranele, toate valorile exportate dintr-o anumita membrana vor trai pe toata durata de viata pe care ar fi avut-o in absenta unei membrane interpuse. Chiar si atunci cand membrana este revocata, toate obiectele care ar fi fost accesibile in absenta revocarii vor fi in continuare accesibile, din cate poate spune GC, chiar daca acestea nu vor mai fi relevante pentru calculul in curs.
API-ul implementat aici este aproximativ API-ul implementat in FF6.0a1 si aprobat de MarkM, Andreas Gal si Dave Herman, mai degraba decat pagina de propuneri aprobata oficial.
Prima diferenta intre emulatia de aici si cea din FF6.0a1 este prezenta metodelor get enumerabile get___, has___, set___ si delete___} pe instantele WeakMap pentru a reprezenta care ar fi proprietatile interne ascunse ale unei implementari primitive. In timp ce metodele FF6.0a1 WeakMap.prototype necesita ca aceasta sa fie o instanta autentica WeakMap (adica un obiect al [[Class]] „WeakMap}), deoarece nu este nimic de neuitat in numele pseudo-interne ale metodelor utilizate aici, nimic impiedica aplicarea acestor metode prototip emulate pe non-WeakMaps cu metode pseudo-interne cu aceleasi nume.
O alta diferenta este ca prototipul nostru emulat WeakMap.nu este el insusi un WeakMap. O problema cu actualul FF6.0a1 API este ca WeakMap.prototype este el insusi un WeakMap care ofera mutabilitate ambientala si un canal de comunicatii ambientale. Astfel, daca un WeakMap este deja prezent si are aceasta problema, repairES5.js il infasoara intr-un ambalaj sigur pentru a impiedica accesul la acest canal. (Consultati PATCH_MUTABLE_FROZEN_WEAKMAP_PROTO in repairES5.js).
Aceasta se refera la repairES5.js, astfel cum este furnizat de Google Caja.
Origine si licenta
Implementarea canonica a WeakMap exista in depozitul Google Caja Subversion la adresa http://google-caja.googlecode.com/svn/trunk. A fost scris de Mark S. Miller. Este lansat de Google cu licenta Apache 2.0. Acest pachet este intretinut de Kris Kowal.
Aceasta lucrare a inceput cu propunerea lui Mark Miller pentru WeakMap catre TCMA-39 a ECMA, unde este dezvoltat standardul JavaScript.








