Introduction à ARC / ORC dans Nim

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.



: Nim (GC). GC , ( ) .



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' )



  • — hard realtime



  • (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. .



! — , !



/ :






All Articles