مقدمة إلى ARC / ORC في نيم

ينتقل Nim إلى نماذج إدارة ذاكرة أكثر كفاءة: ARC و ORC. دعنا نكتشف بالضبط كيف سيغيرون الطريقة التي يعمل بها مع الذاكرة.





المقدمة



مرحبا! سأحاول في هذه المقالة شرح ما هي ARC و ORC وكيف تؤثر على الأداء أو أجزاء أخرى من Nim. لن أتعمق في جوانب جزء البرنامج ، لكنني سأحاول تقديم شرح رفيع المستوى أكثر أو أقل.



لنبدأ من بعيد: لطالما كانت نيم لغة جامع القمامة (GC). بالطبع ، يمكن إيقاف تشغيل GC ، ولكن عند العمل مع معظم المكتبة القياسية ( وهي كبيرة نوعًا ما ) سوف تتسرب الذاكرة.



لطالما كان معيار GC في Nim عبارة عن refc(حساب مرجعي مؤجل مع مرحلة وضع العلامات والاكتساح لدورة التجميع) ، على الرغم من توفر خيارات أخرى ، مثل markAndSweep، boehm، go، regions.



على مدى السنوات القليلة الماضية ، كان لدى مطوري 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