Использование 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 — это интерфейсная функция компилятора, а не средство выполнения. Не является серверной частью LLVM.

Концептуально ARC представляет собой автоматическое создание кода ручного подсчета ссылок в соответствии с правилами и соглашениями владельца Objective-C. Фактический RC управляется средой выполнения objc.

person eonil    schedule 29.11.2012