Rather than face this software engineering challenge, scripting language implementors have often chosen reference counting or conservative garbage collection (GC). For example, AppleScript, Perl, Python, and PHP all use reference counting and Ruby ini- tially used conservative GC. Reference counting is appealing be- cause it is relatively simple to engineer. However, because refer- ence counting is incomplete, implementors must (a) also implement tracing to detect cyclic garbage, or (b) prohibit cyclic data structures, or (c) never reclaim cyclic garbage. PHP chose (a), Ap- pleScript chose (b), and Perl chose (c).