Расширения на C в Ruby

НАВИГАЦИЯ ПО СТРАНИЦЕ

Создание Ruby-расширений на C Интеграция с библиотеками на C

Ruby позволяет создавать расширения на C для повышения производительности или интеграции с существующими библиотеками на C.

Создание Ruby-расширений на C

  1. Создание файла исходного кода

    Создайте файл с исходным кодом на C для вашего расширения (например, my_extension.c).

    // my_extension.c
    
    #include <ruby.h>
    
    VALUE my_extension_hello(VALUE self) {
      return rb_str_new2("Hello from my_extension!");
    }
    
    void Init_my_extension() {
      VALUE MyExtensionModule = rb_define_module("MyExtension");
      rb_define_method(MyExtensionModule, "hello", my_extension_hello, 0);
    }
  2. Компиляция расширения

    Компилируйте ваше расширение с использованием команды ruby extconf.rb для создания Makefile, а затем выполните make.

    # Создание Makefile
    ruby extconf.rb
    
    # Компиляция
    make
  3. Подключение расширения в Ruby

    Подключите ваше расширение в Ruby-скрипте.

    # main.rb
    
    require_relative 'my_extension'
    
    include MyExtension
    
    puts hello

Интеграция с библиотеками на C

  1. Создание обертки для библиотеки

    Создайте файл с исходным кодом, который оборачивает функциональность библиотеки на C (например, my_library_wrapper.c).

    // my_library_wrapper.c
    
    #include <ruby.h>
    #include <my_library.h> // Подключение библиотеки на C
    
    VALUE my_library_wrapper_function(VALUE self) {
      // Вызов функций из библиотеки
      my_library_function();
    
      return Qnil;
    }
    
    void Init_my_library_wrapper() {
      VALUE MyLibraryWrapperModule = rb_define_module("MyLibraryWrapper");
      rb_define_method(MyLibraryWrapperModule, "call_function", my_library_wrapper_function, 0);
    }
  2. Компиляция обертки

    Компилируйте вашу обертку для библиотеки, аналогично созданию Ruby-расширения.

    # Создание Makefile
    ruby extconf.rb
    
    # Компиляция
    make
  3. Использование обертки в Ruby

    Используйте обертку в Ruby-скрипте, чтобы вызывать функции из библиотеки на C.

    # main.rb
    
    require_relative 'my_library_wrapper'
    
    include MyLibraryWrapper
    
    call_function

Создание расширений на C для Ruby позволяет использовать высокоэффективные библиотеки на C и повысить производительность вашего кода. Интеграция с библиотеками на C может быть осуществлена с помощью создания оберток, предоставляя Ruby-интерфейс для функциональности на C.