Project

General

Profile

Bug #17268

Updated by ko1 (Koichi Sasada) 6 months ago

Ractors can't access global variables, but some special global variables should be accessed. 
 There are several types. 

 ## Proposal 

 (1) Read-only global variables 

 ```ruby 
      # process-local (readonly): other commandline parameters 
      '$-p' => $-p, 
      '$-l' => $-l, 
      '$-a' => $-a, 

      # process-local (readonly): getpid 
      '$$'    => $$, 
 ``` 

 (2) scope local variables 

 ```ruby 
      # thread local: process result 
      '$?'    => $?, 

      # scope local: match 
      '$~'    => $~.inspect, 
      '$&'    => $&, 
      '$`'    => $`, 
      '$\''    => $', 
      '$+'    => $+, 
      '$1'    => $1, 

      # scope local: last line 
      '$_' => $_, 

      # scope local: last backtrace 
      '$@' => $@, 
      '$!' => $!, 
 ``` 

 (3) Ractor local variables 

 ```ruby 
      # ractor-local (derived from created ractor): debug 
      '$DEBUG' => $DEBUG, 
      '$-d' => $-d, 

      # ractor-local (derived from created ractor): verbose 
      '$VERBOSE' => $VERBOSE, 
      '$-w' => $-w, 
      '$-W' => $-W, 
      '$-v' => $-v, 

      # ractor local: stdin, out, err 
      '$stdin'    => $stdin.inspect, 
      '$stdout' => $stdout.inspect, 
      '$stderr' => $stderr.inspect, 
 ``` 

 Implementation: https://github.com/ruby/ruby/pull/3670 
  
 I'll merge it soon. 

 ## Discussion 

 * only accessible from main ractor? 
   * `$0`:  
   * ARGV, ARGF, `$.` 
 * only accessible from main ractor because they will be obsolete 
   * `$, $/ $; $\` 
 * So difficult: `$" / $LOADED_FEATURES` and `$: / $LOAD_PATH` 


Back