# Приложение A - Глоссарий - Rubinius
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.
Author: Less Than Three. <3. http://less.thanthree.com

1.2.3

## Приложение A - Глоссарий

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

See How-To - Write Documentation

Здесь даны определения терминов и фраз используемых в языке программирования Ruby и конкретно в этой реализации. Смотри также книгу “Язык программирования Ruby” авторов Флэнегана и Мацумото [O’Reilly 2008] и “Programming Ruby: The Pragmatic Programmer’s Guide” второе или третье издание автора Томаса и др. [The Pragmatic Programmers 2005-2008]

- метакласс

  Также известен как +синглетон+ и +eigenclass+. Каждый объект в Ruby может иметь один метакласс, который создается только при необходимости. Метакласс содержит таблицу методов и констант, которая принадлежит только определенному объекту. Например, описанный ниже метод +hello+ существует только в метаклассе объекта +obj+.

      obj = Object.new
      def obj.hello
        puts 'hi'
      end

  Так как все классы в Ruby также являются объектами, они тоже могут иметь метаклассы. Методы, которые называют “методами класса”, являются просто методами в таблице методов, принадлежащей метаклассу класса. Метод +honk+ существует в метаклассе класса +Car+.

      class Car
        def self.honk
        end
      end

  В Rubinius, метаклассы являются объектами класса MetaClass. Доступ к метаклассу объекта можно получить вызовом метода +metaclass+. Схему, описанную здесь, в целом иногда называют “Метаобъектный протокол” или +MOP+.

- поиск методов или разрешение методов

  Простое правило: взять объект, который находится в слоте класса этого объекта (это значение невсегда равнозначно результату вызова Object#class) и начать искать.

  Поиск идет по цепочке родительских классов, пока родитель не будет равен nil.

  В этом случае повторяется поиск для метода method_missing. Если и этот метод не будет найден – трагедия.

                                            +----------------+
                                            |      nil       |
                                            +----------------+
                                                    ^
                                                    | superclass
                                                    |
                                            +----------------+
                                            |     Object     |
                                            +----------------+
                                                    ^
                                                    | superclass
                                                    |
                                            +----------------+
                                            |     Module     |
                                            +----------------+
                                                    ^
                                                    | superclass
                                                    |
                                            +----------------+
                                            |     Class      |
                                            +----------------+
                                                    ^
                                                    | superclass
                                                    |
                                            +----------------+
                                            | SingletonClass |
                                            |    (Object)    |
                                            +----------------+
                                                    ^
                                                    | superclass
                                                    |
       +-------------+                      +----------------+
       |      F      |  ----------------->  | SingletonClass |
       +-------------+   singleton class    |      (F)       |
                                            +----------------+

      class Class
        def wanker
          puts 'you are'
        end
      end

      class F
        def self.bloke
          wanker
        end
      end

  1. Поиск метода ‘wanker’ будет произведен в таблицах методов:

     1. MetaClass(F)
     2. MetaClass(Object)
     3. Class

  Найден

- таблица методов

  Структура данных, присутствующая в каждом классе (и модуле), которая содержит список методов, определенных в этом классе.

  В Rubinius таблица методов класса – это объект класса LookupTable.

- MatzRuby

  Смотри MRI

- MRI

  Matz’s Ruby Interpreter или Matz’s Ruby Implementation. Аббревиатура для обозначения официальной реализации Ruby. Смотри http://ruby-lang.org.

- приватный вызов

  Вызов метода, у которого явно не указан получатель. Получатетелем является +self+. Например:

      class A
      private
        def you_are_mine
        end
      end

      class B < A
        def sunshine
          you_are_mine
        end
      end

      class C
        def dear
          today = B.new
          today.you_are_mine
        end
      end

  Вызов метода +you_are_mine+ в методе +sunshine+ назвается приватным вызовом. Вызвать +today.you_are_mine+ не удасться, потому что приватные методы не могут иметь явного получателя. В данном случае объект +today+ является явным получателем.

- родительский класс

  Это класс, от которого наследуется другой класс. Класс Object является родительским классом всех объектов, которые явно не наследуются от других классов.

      class A
      end

      class B < A
      end

  Класс A наследуется от класса Object. Иными словами A.superclass == Object. Класс B явно наследуется от класса A, таким образом B.superclass == A.