Използване на ARC в LLVM без Obj-C

Възможно ли е да използвам функцията ARC на LLVM, за да направя преброяването на референциите за моя собствен език, който прилагам (без да насочвам Obj-C като бекенд)

Това би било много полезно, тъй като количеството усилия за писане на GC ще бъде значително намалено


person Michael    schedule 27.11.2012    source източник
comment
ARC не е традиционен събирач на боклук. Той не преминава през графики на собственост и не намира цикли.   -  person Nikolai Ruhe    schedule 27.11.2012
comment
Мога само да подкрепя @NikolaiRuhe. Ако искате GC, използвайте GC. Преброяването на препратките може да служи като отправна точка за това (има разширения, които могат да обработват цикли, въпреки че не съм ги изучавал задълбочено и все още не съм виждал имплементации), но вероятно не можете разумно да използвате повторно силно Специфична за ObjC реализация в LLVM. Ако искате GC, може би използвайте Boehm за прототипиране и добавете правилна маркировка и почистване на GC по-късно.   -  person    schedule 27.11.2012
comment
@NikolaiRuhe Въпросът (за мен) е, че наличието на някаква форма на преброяване на реф означава, че не е нужно да се притеснявам от изчерпване на паметта при стартиране на компилатора + стандартна библиотека, преди да напиша събирача на отпадъци.   -  person Michael    schedule 27.11.2012
comment
Също така имайте предвид, че самото преброяване на препратки всъщност не се извършва от ARC, а е внедрено във Foundation (?). ARC просто автоматично вмъква увеличения и намаления към съществуващата архитектура за броене на референтни данни. Освен това ARC е тясно свързан с Objective-C, тъй като извлича своите правила от фамилиите имена на методи.   -  person Nikolai Ruhe    schedule 27.11.2012


Отговори (1)


Накратко, не.

ARC е предна част на компилатора, а не средство за изпълнение. Не е back-end част на LLVM.

Концептуално, ARC е автоматично генериране на ръчен код за преброяване на препратки чрез правила и конвенции за собственост на Objective-C. Действителният RC се управлява от objc runtime.

person eonil    schedule 29.11.2012