<!DOCTYPE html>
<html dir="ltr" lang="ru">

  <head>
    <title>Ruby - Rubinius</title>
  	<meta charset="UTF-8">
  	<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

    <meta content='ru' http-equiv='content-language'>
    <meta content='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.' name='description'>
    <link href='/' rel='home'>
    <link href='/' rel='start'>
    <link href='/doc/ru/contributing/style-guide' rel='prev' title='Стиль программирования'>
    <link href='/doc/ru/ruby/scripts'         rel='next' title='Скрипты'>
    
    <!--[if IE]><script src="http://html5shiv.googlecode.com/svn/trunk/html5.js" type="text/javascript"></script><![endif]-->
    <script src="/javascripts/jquery-1.3.2.js"></script>
    <script src="/javascripts/paging_keys.js"></script>
    
    <script src="/javascripts/application.js"></script>
    <style>article, aside, dialog, figure, footer, header, hgroup, menu, nav, section { display: block; }</style>

    <link href="/stylesheets/blueprint/screen.css" media="screen" rel="stylesheet" />
    <link href="/stylesheets/application.css"      media="screen" rel="stylesheet" />
    <link href="/stylesheets/blueprint/print.css"  media="print"  rel="stylesheet" />
    <!--[if IE]><link href="/stylesheets/blueprint/ie.css" media="screen" rel="stylesheet" type="text/css" /><![endif]-->
    <!--[if IE]><link href="/stylesheets/ie.css"           media="screen" rel="stylesheet" type="text/css" /><![endif]-->
    <link href="/stylesheets/pygments.css" media="screen" rel="stylesheet" />

    <link href="/favicon.ico"                 rel="shortcut icon"    type="image/vnd.microsoft.icon" />
    <link href="/images/apple-touch-icon.png" rel="apple-touch-icon" type="image/png" />
    <link href="/images/apple-touch-icon.png" rel="apple-touch-icon" type="image/png" sizes="72x72"   />
    <link href="/images/apple-touch-icon.png" rel="apple-touch-icon" type="image/png" sizes="114x114" />
  </head>

  <body>
    <div class='container'>
  <div class='span-21 doc_menu'>
    <header>
      <nav>
  <ul>
    <li><a href="/">Home</a></li>
    <li><a id="blog" href="/blog">Blog</a></li>
    <li><a id="documentation" href="/doc/en">Documentation</a></li>
    <li><a href="/projects">Projects</a></li>
    <li><a href="/roadmap">Roadmap</a></li>
    <li><a href="/releases">Releases</a></li>
  </ul>
</nav>

    </header>
  </div>
  <div class='span-3 last'>
  <div id='version'>
    <a href="/releases/1.2.4">1.2.4</a>
  </div>
</div>

</div>


<div class="container languages">
  <nav>
  <span class="label">Языки:</span>
  <ul>
    
    
    
    <li><a href="/doc/de/ruby/"
      
      >de</a></li>
    
    
    
    <li><a href="/doc/en/ruby/"
      
      >en</a></li>
    
    
    
    <li><a href="/doc/es/ruby/"
      
      >es</a></li>
    
    
    
    <li><a href="/doc/fr/ruby/"
      
      >fr</a></li>
    
    
    
    <li><a href="/doc/it/ruby/"
      
      >it</a></li>
    
    
    
    <li><a href="/doc/ja/ruby/"
      
      >ja</a></li>
    
    
    
    <li><a href="/doc/pl/ruby/"
      
      >pl</a></li>
    
    
    
    <li><a href="/doc/pt-br/ruby/"
      
      >pt-br</a></li>
    
    
    
    <li><a href="/doc/ru/ruby/"
      
      class="current"
      
      >ru</a></li>
    
  </ul>
  </nav>
</div>


<div class="container doc_page_nav">
  
    
    <span class="label">Назад:</span>
    <a href="/doc/ru/contributing/style-guide">Стиль программирования</a>
    

    <span class="label">Выше:</span>
    <a href="/doc/ru/">Содержание</a>

    
    <span class="label">Вперед:</span>
    <a href="/doc/ru/ruby/scripts">Скрипты</a>
    
  
</div>


<div class="container documentation">
  <h2>Ruby</h2>

  

  
    <div class="review">
  <p>This topic has missing or partial documentation. Please help us improve it.</p>

  <p>
    See <a href="/doc/ru/how-to/write-documentation">How-To - Write Documentation</a>
  </p>
</div>

  

    <p>Один из способов приблизиться к пониманию Rubinius-реализации языка Ruby &mdash;
это умение разобраться в том, как устроены базовые элементы самого Ruby. Смысл
настоящей статьи &mdash; представить особенности Rubinius на примере понятий
Ruby, которые, как ожидается, уже известны нашему читателю. В документации
Rubinius мы предполагаем, что Вы знакомы либо с Ruby, либо с принципами работы
компиляторов и виртуальных машин.</p>

<p>В центр каждого из последующих разделов поставлено понятие
<em>области видимости</em>. В синтаксисе Ruby область видимости &mdash; это, как правило,
производное понятие. Иначе говоря, в языке нет синтаксических элементов,
первоначально отвечающих за ограничение или обозначение области видимости.
Из-за этого разговор о видимости может оказаться весьма путаным. Возьмем, к
примеру, обыкновенное определение метода:</p>

<pre><code>a = 5

def diligent(a)
  puts a * 2
end
</code></pre>

<p>Здесь метод <code>#diligent</code> сообщает нам имя, по которому можно сослаться на
вычисление <code>puts a * 2</code>. Однако метод также определяет замкнутый лексический
контекст, область видимости, для переменной <code>a</code>. Область замкнута, поскольку
<code>a = 5</code> строкой выше не имеет никакого отношения к переменной <code>a</code> в
<code>#diligent</code>.</p>

<p>Принято считать, что в Ruby все сущности &mdash; объекты. Это не совсем так. В
Ruby <em>большинство</em> сущностей являются объектами, тогда как некоторые вещи,
исключительно важные для работы кода, вовсе не есть доступные для манипуляции
объекты.  Более того, какие именно из этих сущностей среды выполнения
программы являются объектами Ruby, кардинально зависит от конкретной
реализации. Область видимости &mdash; одна из таких сущностей.</p>

<p>По существу, область видимости как идея &mdash; это контекст, в котором возможны
ответы на вопросы из ряда: &laquo;Каково сейчас значение <code>self</code>?&raquo; &laquo;Какие
переменные сейчас локальны?&raquo; &laquo;Какое значение константа <code>APPLE</code> будет иметь
вот в этой точке кода?&raquo;</p>

<p>Каждый из последующих элементов Ruby обсуждается с точки зрения их реализации
в Rubinius и того, каким образом принцип видимости в этом участвует.</p>

<ol>
  <li><a href="/doc/ru/ruby/scripts/">Скрипты</a></li>
  <li><a href="/doc/ru/ruby/methods/">Методы</a></li>
  <li><a href="/doc/ru/ruby/constants/">Константы</a></li>
  <li><a href="/doc/ru/ruby/classes-and-modules/">Классы и модули</a></li>
  <li><a href="/doc/ru/ruby/blocks-and-procs/">Блоки и процедуры</a></li>
  <li><a href="/doc/ru/ruby/local-variables/">Локальные переменные</a></li>
  <li><a href="/doc/ru/ruby/instance-variables/">Переменные экземпляра</a></li>
  <li><a href="/doc/ru/ruby/class-variables/">Переменные класса</a></li>
  <li><a href="/doc/ru/ruby/global-variables/">Глобальные переменные</a></li>
</ol>



</div>

<div class="container doc_page_nav">
  
    
    <span class="label">Назад:</span>
    <a href="/doc/ru/contributing/style-guide">Стиль программирования</a>
    

    <span class="label">Выше:</span>
    <a href="/doc/ru/">Содержание</a>

    
    <span class="label">Вперед:</span>
    <a href="/doc/ru/ruby/scripts">Скрипты</a>
    
  
</div>


<div class="container">
  <div id="disqus_thread"></div>
<script type="text/javascript">
  var disqus_shortname  = 'rubinius';
  var disqus_identifier = '/doc/ru/ruby/';
  var disqus_url = 'http://rubini.us/doc/ru/ruby/';

  (function() {
    var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
    dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
  })();
</script>
<noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>

</div>

<footer>
  <div class='container'>
    <nav>
      <ul>
        <li><a rel="external" href="http://twitter.com/rubinius">Follow Rubinius on Twitter</a></li>
        <li><a rel="external" href="http://github.com/rubinius/rubinius">Fork Rubinius on github</a></li>
        <li><a rel="external" href="http://engineyard.com">An Engine Yard project</a></li>
      </ul>
    </nav>
  </div>
</footer>

<script>
  var _gaq=[['_setAccount','UA-12328521-1'],['_trackPageview']];
  (function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.async=1;
  g.src=('https:'==location.protocol?'//ssl':'//www')+'.google-analytics.com/ga.js';
  s.parentNode.insertBefore(g,s)}(document,'script'));
</script>


  </body>
</html>
