Skip to content

Instantly share code, notes, and snippets.

@havenwood
Last active September 14, 2021 04:22
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save havenwood/3c5a5e1476c811460992 to your computer and use it in GitHub Desktop.
Save havenwood/3c5a5e1476c811460992 to your computer and use it in GitHub Desktop.
A #require_relative_with_tco that's like #require_relative but with tail call optimization
module Kernel
def require_relative_with_tco file
absolute_path = File.absolute_path file, __dir__
realpath = File.realpath "#{absolute_path.chomp '.rb'}.rb"
if $LOADED_FEATURES.include? realpath
false
else
RubyVM::InstructionSequence.compile_file(
realpath,
tailcall_optimization: true,
trace_instruction: false
).eval
$LOADED_FEATURES << realpath
true
end
rescue Errno::ENOTDIR, Errno::ENOENT
raise LoadError, "cannot load such file -- #{absolute_path}"
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment