_If you wish to report errors or suggest improvements for this FAQ,
please go to our
[GitHub repository](https://github.com/ruby/www.ruby-lang.org/)
and open an issue or pull request._


## Бібліотеки розширень

### Як використовувати Ruby інтерактивно?
{: #irb}

<div class="not-prose bg-ruby-100 dark:bg-ruby-800 rounded-lg p-8 my-6">
  <div class="flex items-start gap-3">
    <svg class="w-6 h-6 text-ruby-700 dark:text-ruby-200 flex-shrink-0 mt-0.5" fill="currentColor" viewBox="0 0 20 20">
      <path fill-rule="evenodd" d="M8.485 2.495c.673-1.167 2.357-1.167 3.03 0l6.28 10.875c.673 1.167-.17 2.625-1.516 2.625H3.72c-1.347 0-2.189-1.458-1.515-2.625L8.485 2.495zM10 5a.75.75 0 01.75.75v3.5a.75.75 0 01-1.5 0v-3.5A.75.75 0 0110 5zm0 9a1 1 0 100-2 1 1 0 000 2z" clip-rule="evenodd"/>
    </svg>
    <p class="text-sm text-ruby-700 dark:text-ruby-200 italic">
      This section or parts of it might be out-dated or in need of confirmation.
    </p>
  </div>
</div>


Спробуйте використати `irb`. Далі наведено переказ зі слів Kentaro Goto
(Gotoken), який уперше з’явився у [\[ruby-talk:444\]][ruby-talk:444].

1. Завантажте найсвіжіший tarball `irb` із
   [contrib directory](ftp://ftp.netlab.co.jp/pub/lang/ruby/contrib/)
   в архіві Ruby.
2. Розпакуйте дерево каталогу `irb`.
3. Додайте шлях до каталогу `irb/` у змінну середовища `$RUBYLIB`.
4. Створіть символічне посилання з `$RUBYLIB/irb/irb.rb` на файл `irb`
   десь у вашому `PATH`.
5. `chmod +x $RUBYLIB/irb/irb.rb`
6. Можливо, використайте `rehash`, щоб повідомити вашу оболонку
   про нову команду.
7. Наберіть `irb`.

Якщо модуль розширення readline працює з вашим інтерпретатором,
`irb` стане набагато приємнішим у використанні.

У каталозі `samples/` дистрибутива Ruby також є проста програма `eval`.
Вона дозволяє вводити вирази та переглядати їхні значення.
Ви можете скопіювати `eval` у каталог `site_ruby` у дереві Ruby і
запускати так:

~~~
ruby -r eval -e0
~~~

[ruby-talk:444]: https://blade.ruby-lang.org/ruby-talk/444

### Чи є налагоджувач для Ruby?

Є налагоджувач на кшталт gdb для Ruby.

~~~
ruby -r debug your_program
~~~

### Як використовувати бібліотеку, написану на C, з Ruby?

З усіх скриптових мов Ruby, мабуть, найпростіше розширювати. Тут немає
проблем із підрахунком посилань і типами змінних, і потрібно вивчити дуже
мало інтерфейсів. Ба більше, C-код для розширення Ruby часто дивовижно
нагадує сам Ruby-код.

Спочатку прочитайте файл `doc/extension.rdoc` у вихідному коді Ruby
або перегляньте [extension.rdoc на docs.ruby-lang.org][extension-rdoc].
Це хороший документ не лише для написання бібліотек розширень, але й для
глибшого розуміння Ruby.

Далі сайт RubyGems пропонує
[гід зі створення gem із розширеннями][rubygems-guide].
Він показує, як налаштувати gem із C-розширеннями, що збираються під час
встановлення. Також там є посилання на деякі наявні gem, які обгортають
бібліотеки C, і на додаткові матеріали.

Також варто подивитися на вихідний код інтерпретатора та на різні
постачувані розширення в каталозі `ext/`
(ви можете переглянути [репозиторій Ruby на GitHub][ruby-github]).

[extension-rdoc]: https://docs.ruby-lang.org/en/master/extension_rdoc.html
[rubygems-guide]: http://guides.rubygems.org/gems-with-extensions/
[ruby-github]:    https://github.com/ruby/ruby

### Чи можу я використовувати Tcl/Tk у Ruby?

<div class="not-prose bg-ruby-100 dark:bg-ruby-800 rounded-lg p-8 my-6">
  <div class="flex items-start gap-3">
    <svg class="w-6 h-6 text-ruby-700 dark:text-ruby-200 flex-shrink-0 mt-0.5" fill="currentColor" viewBox="0 0 20 20">
      <path fill-rule="evenodd" d="M8.485 2.495c.673-1.167 2.357-1.167 3.03 0l6.28 10.875c.673 1.167-.17 2.625-1.516 2.625H3.72c-1.347 0-2.189-1.458-1.515-2.625L8.485 2.495zM10 5a.75.75 0 01.75.75v3.5a.75.75 0 01-1.5 0v-3.5A.75.75 0 0110 5zm0 9a1 1 0 100-2 1 1 0 000 2z" clip-rule="evenodd"/>
    </svg>
    <p class="text-sm text-ruby-700 dark:text-ruby-200 italic">
      This section or parts of it might be out-dated or in need of confirmation.
    </p>
  </div>
</div>


У стандартному дистрибутиві є два інтерфейси до Tcl/Tk. Один розміщений
у `ext/tcltk/` і завантажується через `require "tcltk"`. Синтаксис дуже
близький до Tcl, який передається інтерпретатору Tcl. На жаль, опис цієї
бібліотеки написаний японською.

Інший розміщений у `ext/tk/` і завантажується через `require "tk"`.
Його синтаксис ближчий до стилю інтерфейсу Tk, який надають інтерфейси
Perl і Python.

### Tk не працює. Чому?

<div class="not-prose bg-ruby-100 dark:bg-ruby-800 rounded-lg p-8 my-6">
  <div class="flex items-start gap-3">
    <svg class="w-6 h-6 text-ruby-700 dark:text-ruby-200 flex-shrink-0 mt-0.5" fill="currentColor" viewBox="0 0 20 20">
      <path fill-rule="evenodd" d="M8.485 2.495c.673-1.167 2.357-1.167 3.03 0l6.28 10.875c.673 1.167-.17 2.625-1.516 2.625H3.72c-1.347 0-2.189-1.458-1.515-2.625L8.485 2.495zM10 5a.75.75 0 01.75.75v3.5a.75.75 0 01-1.5 0v-3.5A.75.75 0 0110 5zm0 9a1 1 0 100-2 1 1 0 000 2z" clip-rule="evenodd"/>
    </svg>
    <p class="text-sm text-ruby-700 dark:text-ruby-200 italic">
      This section or parts of it might be out-dated or in need of confirmation.
    </p>
  </div>
</div>


Ваша версія Tk може бути застарілою, спробуйте новішу.

### Чи можу я використовувати інтерфейси gtk+ або xforms у Ruby?

<div class="not-prose bg-ruby-100 dark:bg-ruby-800 rounded-lg p-8 my-6">
  <div class="flex items-start gap-3">
    <svg class="w-6 h-6 text-ruby-700 dark:text-ruby-200 flex-shrink-0 mt-0.5" fill="currentColor" viewBox="0 0 20 20">
      <path fill-rule="evenodd" d="M8.485 2.495c.673-1.167 2.357-1.167 3.03 0l6.28 10.875c.673 1.167-.17 2.625-1.516 2.625H3.72c-1.347 0-2.189-1.458-1.515-2.625L8.485 2.495zM10 5a.75.75 0 01.75.75v3.5a.75.75 0 01-1.5 0v-3.5A.75.75 0 0110 5zm0 9a1 1 0 100-2 1 1 0 000 2z" clip-rule="evenodd"/>
    </svg>
    <p class="text-sm text-ruby-700 dark:text-ruby-200 italic">
      This section or parts of it might be out-dated or in need of confirmation.
    </p>
  </div>
</div>


Ви знайдете `ruby-gtk-x.xx.tar.gz` і `ruby-forms-x.x.tar.gz`
у `contrib/` на Ruby FTP-сайтах.

### Як виконувати арифметику дат?

<div class="not-prose bg-ruby-100 dark:bg-ruby-800 rounded-lg p-8 my-6">
  <div class="flex items-start gap-3">
    <svg class="w-6 h-6 text-ruby-700 dark:text-ruby-200 flex-shrink-0 mt-0.5" fill="currentColor" viewBox="0 0 20 20">
      <path fill-rule="evenodd" d="M8.485 2.495c.673-1.167 2.357-1.167 3.03 0l6.28 10.875c.673 1.167-.17 2.625-1.516 2.625H3.72c-1.347 0-2.189-1.458-1.515-2.625L8.485 2.495zM10 5a.75.75 0 01.75.75v3.5a.75.75 0 01-1.5 0v-3.5A.75.75 0 0110 5zm0 9a1 1 0 100-2 1 1 0 000 2z" clip-rule="evenodd"/>
    </svg>
    <p class="text-sm text-ruby-700 dark:text-ruby-200 italic">
      This section or parts of it might be out-dated or in need of confirmation.
    </p>
  </div>
</div>


Об’єкт `Time` може виражати лише дати між 1 січня 1970 та 19 січня 2038.

Доступні два модулі бібліотек розширень:
`require "date"`, який простий і використовує англійський календар,
і `require "date2"`, який є більш загальним.

Також дивіться `sample/cal.rb`.
