When developer add something to $LOAD_PATH and require once again the same file ruby should not require it once again. Example: Rubinius have lib/racc/parser.rb file. And this file will require after bootstrap. require 'racc/parser' After require 'rubygems' $LOAD_PATH will change and now we have access to two version on 'racc/parser' (from Rubinius /lib and /gems/racc). When user try to require once again rubinius will search via $LOAD_PATH and hit racc/parser from _RUBYGEMS_. In ruby 1.9 mode all paths are expanded so rubinius will require once again 'racc/parser'. This is because in $LOADED_FEATURES we can find only "[rubinius_path]/lib/racc/parser.rb". When CodeLoader will find file in $LOAD_PATH ([rubygems]/racc/parser.rb) and full path is not part of $LOADED_FEATURES this file will be load once again.
This was a difficult name choice but it is consistent with CompiledCode and (not yet used) SourceCode. The CompiledCode is an abstraction of computation that is the focal point around which much revolves. MachineCode is a representation of computation specialized for our (virtual) machine. While there is possible ambiguity against the idea of JIT'd machine code, our MachineCode is a proper data structure, not just the format of bits resulting from the JIT compilation process. Also, our MachineCode is properly scoped differently than any such class/concept in LLVM (or more generally, the JIT). Regarding naming of instances of MachineCode, the following rationale is used: * parameters/variables have been named 'mcode' since the use of the variable is elaborated by the surrounding code (ie making ambiguity less an issue) and long variable names can sometimes make code unweildy. * attributes/fields/accessors have been name 'machine_code' because they have less context to disambiguate.
… also used afterwards for the real compilation and linking.