Nim évolue vers des modèles de gestion de mémoire plus efficaces: ARC et ORC. Découvrons exactement comment ils vont changer la façon dont cela fonctionne avec la mémoire.
introduction
salut! Dans cet article, je vais essayer d'expliquer ce que sont ARC et ORC et comment ils affecteront les performances ou d'autres parties de Nim. Je ne vais pas approfondir les aspects de la partie logicielle, mais je vais essayer de donner une explication plus ou moins de haut niveau.
GC Nim refc
( mark & sweep ), , markAndSweep
, boehm
, go
, regions
.
Nim' , , (owned ref) :
, Nim ARC
ARC?
ARC , (Automatic Reference Counting) (move semantics). , ARC Nim , ARC Swift, — Nim ARC .
. ( runtime) , . , .
ARC GC Nim , ARC — (, , , .), . ARC C++ (RAII)
, , ARC expandArc
, Nim 1.4.
Nim:
proc main =
let mystr = stdin.readLine()
case mystr
of "":
echo "!"
of "":
echo "!"
quit()
else:
discard
main()
nim c --gc:arc --expandArc:main example.nim
.
--expandArc: main
var mystr
try:
mystr = readLine(stdin)
case mystr
of "":
echo ["!"]
of "":
echo ["!"]
quit(0)
else:
discard
finally:
`=destroy`(mystr)
-- end of expandArc ------------------------
— Nim main
try: finally
( finally
, try
) =destroy
mystr
, .
ARC: (scope-based MM). — . , , , . Nim' : , , , , block
, for
while
.
ARC hooks — , , // . , , , FFI.
refc
ARC ( ):
( ) — .
— , .
—
refc
, (thread-local heap), ARC . — . RFC , ARC.
FFI — ,
refc
"" (.. ) , ARC. , ARC , (.dll, .so, Python' )
-
(copy elision), Nim (cursor inference) — ()
, ARC Nim , , , .
, ARC , , , --gc:arc
, (.nims
.cfg
).
! - ? ARC , , , . — , , . : 3 (A, B, C), , :
, , — , , .
Nim' mark & sweep refc
GC, ARC - . :
ORC — Nim
ORC , ARC. GC, (local tracing phase) GC, (global tracing).
async Nim ORC, Nim' , .
ORC ARC () — ORC , hard realtime ( ) — .
ORC --gc:orc
, , ORC GC Nim'
! ?
— — Nim 1.4. .
! — , !
/ :
- Introducing --gc:arc
- Update on --gc:arc
- New garbage collector --gc:orc is a joy to use.
- Documentation officielle sur les destructeurs et la sémantique des mouvements
- FOSDEM 2020 - Déplacer la sémantique pour Nim
- NimConf 2020 - Nim ARC / ORC
- Communauté Nim
- RFC: Combinez les options de gestion GC / mémoire dans Nim