The runtime recovers unused memory using reference counting, which depends on variables passing out of scope or being set to "Nothing", avoiding the problem of memory leaks that are possible in other languages. There is a large library of utility objects, and the language provides basic support for object-oriented programming. Unlike many other programming languages, Visual Basic is generally not case-sensitive—though it transforms keywords into a standard case configuration and forces the case of variable names to conform to the case of the entry in the symbol table. String comparisons are case sensitive by default. The Visual Basic compiler is shared with other Visual Studio languages (C, C++). Nevertheless, by default the restrictions in the IDE do not allow creation of some targets (Windows model DLLs) and threading models, but over the years, developers have bypassed these restrictions.