Глобальные переменные - Rubinius
Author: Less Than Three. <3. http://less.thanthree.com
Description: Rubinius is an implementation of the Ruby programming language. The Rubinius bytecode virtual machine is written in C++. The bytecode compiler is written in pure Ruby. The vast majority of the core library is also written in Ruby, with some supporting primitives that interact with the VM directly.

1.2.3

## Глобальные переменные

This topic has missing or partial documentation. Please help us improve it.

See How-To - Write Documentation

По правилам синтаксиса имя глобальной переменной должно начинаться с `$`. Ожидается, что глобальные переменные доступны из любого контекста Ruby-программы. Вместе с тем, существует три разновидности глобальных переменных:истинные, тред-локальные и псевдоглобальные.

Истинные глобальные переменные связывают некоторое значение с глобально-видимым именем. Пример: `$LOAD_PATH`.

Тред-локальные глобальные переменные записываются в нотации глобальных, но в запущенном процессе программы каждый тред имеет свою отдельную версию переменной. Примерами тред-локальных глобалей являются `$SAFE` и `$!`. Чтобы убедиться, что их величины зависят от контекста треда, выполним следующий код:

    puts $SAFE

    Thread.new do
      $SAFE = 2
      puts $SAFE
    end

    puts $SAFE

Псевдоглобальные переменные — это ограниченное подмножество имен, которые ссылаются не на глобальные значения, а на значения в текущей области видимости, подобно локальным переменным. Их по-прежнему называют глобальными из-за того, что их имена начинаются со значка доллара, что является источником недоразумений со стороны пользователей.

Все псевдоглобали построены на основе одной, первичной псевдоглобальной переменной: `$~`. Все они обеспечивают доступ к разным частям `$~`, и потому при изменении `$~` все они также изменяются.

Другими псевдоглобалями являются `$&`, `$`` (обратный апостроф), `$'` (простой апостроф), `$+` и группа `$1`, `$2`, `$3` и т.п.

Одна из хитростей этих величин состоит в том, что они строго привязаны к текущей области видимости, но Ruby позволяет создавать на них алиасы, как это сделано в `English.rb`.

Эти алиасы служат, в основном, способом добавить новые локальные переменные во все области видимости, в том числе и уже запущенные. По этой причине Rubinius не в полной мере их поддерживает. Вместо этого мы просто обеспечиваем алиасы, по умолчанию записанные в `English.rb`. Например, `$MATCH` можно использовать вместо `$~` как при включенном `English.rb`, так и без него.