Nim beralih ke model manajemen memori yang lebih efisien: ARC dan ORC. Mari kita cari tahu persis bagaimana mereka akan mengubah cara kerjanya dengan memori.

pengantar
Halo! Pada artikel ini, saya akan mencoba menjelaskan apa itu ARC dan ORC dan bagaimana pengaruhnya terhadap kinerja atau bagian Nim lainnya. Saya tidak akan mendalami aspek-aspek dari bagian perangkat lunak, tetapi saya akan mencoba memberikan penjelasan tingkat tinggi yang kurang lebih.
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. .
! — , !
/ :