From: "mame (Yusuke Endoh) via ruby-core" Date: 2023-07-13T15:21:54+00:00 Subject: [ruby-core:114167] [Ruby master Bug#19726] Script loaded twice when requiring self Issue #19726 has been updated by mame (Yusuke Endoh). A few additional explanations. First, the importance of the stated problem is not clear. Circular require should be fixed. The OP should clearly state the background for wanting this resolved (if any). Also, a critical problem was noted that irb and many CLI tools would stop working with the proposed solution. For example, bin/irb does `require "irb"`. With the proposed workaround, `$LOADED_FEATRUES` will contain `"/path/to/bin/irb"` when the irb command is executed. Then `require "irb"` will not read `/path/to/lib/irb.rb`, instead return false immediately. Thus, this proposal will make irb and many other CLI tools inoperable. ---------------------------------------- Bug #19726: Script loaded twice when requiring self https://bugs.ruby-lang.org/issues/19726#change-103851 * Author: johannes (Johannes Krude) * Status: Rejected * Priority: Normal * ruby -v: ruby 3.3.0preview1 (2023-05-12 master a1b01e7701) [x86_64-linux] * Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN ---------------------------------------- The executed program is not added to `$LOADED_FEATURES` unexpectedly resulting in the program possibly being loaded twice: a.rb: ``` #!/usr/bin/env ruby require "./b" C = 42 return unless __FILE__ == $0 puts C ``` b.rb: ``` require "./a" ``` This results in: ``` $ ./a.rb ./a.rb:5: warning: already initialized constant C /home/johannes/t/a.rb:5: warning: previous definition of C was here 42 ``` Ruby version: ``` $ sudo docker run ruby:3.3.0-preview1 ruby --version ruby 3.3.0preview1 (2023-05-12 master a1b01e7701) [x86_64-linux] ``` **This could be solved by always adding the executed program to `$LOADED_FEATURES`.** As a workaround, executed programs can be prepended with: ``` require "pathname" if __FILE__ == $0 $LOADED_FEATURES << Pathname.new(__FILE__).expand_path.to_s end ``` -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/