Рубисдл против Руби-СДЛ-ФФИ - PullRequest
3 голосов
/ 25 февраля 2012

Может ли кто-нибудь здесь сказать мне разницу между драгоценными камнями Ruby rubysdl и ruby-sdl-ffi, как разница в скорости?Если это так, что бы вы предпочли 1004 *?Мне интересно, ради чего я пишу, Rubydraw (расположен здесь ).

Заранее спасибо!

1 Ответ

11 голосов
/ 22 февраля 2013

Я автор ruby-sdl-ffi.Этот вопрос был доведен до моего сведения сегодня, поэтому я отвечаю на благо всех, кто все еще интересуется.

Основное отличие состоит в том, что ruby-sdl-ffi - это чистый Ruby-код, который обращается к SDL (и связанным библиотекам) через FFI (интерфейс сторонних функций), а rubysdl - это расширение, написанное на C, которое ссылается на SDL (и связанные библиотеки).У каждого подхода есть свои плюсы и минусы.(Очевидно, я считаю, что FFI - лучший подход, или я бы не стал писать ruby-sdl-ffi.)

Обе библиотеки предлагают схожие наборы функций, хотя есть некоторые различия (отмеченные ниже).Они могут одновременно выполнять 2D-игры с изображениями, звуками / музыкой и пользовательским вводом с клавиатуры, мыши и / или джойстика / геймпада.Их также можно использовать с OpenGL (через ruby-opengl или ffi-opengl) для создания 3D-игр с аппаратным ускорением.Оба могут использоваться в Windows, MacOS X и Linux (и, возможно, на других платформах), хотя Rubysdl работает только в MacOS X, если вы используете специальную оболочку интерпретатора Ruby с именем "rsdl".

Я не запускалникаких серьезных ориентиров, поэтому я не могу предоставить какие-либо точные данные о сырой производительности.У меня общее впечатление, что у rubysdl может быть небольшое преимущество в производительности, но они достаточно близки, чтобы производительность не была основным фактором при выборе между двумя библиотеками.

Вот как я бы суммировал плюсы и минусыдве библиотеки:

ruby-sdl-ffi

  • Легче для пользователей установить гем.Его не нужно компилировать, поэтому пользователям не нужно устанавливать компилятор C или набор инструментов.
  • Работает с MRI («обычный» интерпретатор Ruby), JRuby и, возможно, Rubinius.
  • Никакого специального переводчика в MacOS X не требуется. Однако поддержка MacOS X может потребоваться обновить, чтобы она полностью работала на последних версиях MacOS X. (Apple продолжает что-то менять.)
  • Ниже-уровень API, более тесно отражает библиотеки C.Это может быть хорошим или плохим в зависимости от вашей перспективы.
  • В настоящее время имеет привязки для библиотек SDL, SDL_gfx, SDL_image, SDL_mixer и SDL_ttf.(По сравнению с rubysdl он добавляет SDL_gfx, но в нем отсутствуют SGE и SMPEG.) Добавление привязок для других библиотек довольно просто.
  • Больше не разрабатывается и не поддерживается.У меня больше нет времени или интереса, но кто-то может вступить во владение, и я могу предоставить руководство.
  • Несколько экспериментально и имеет некоторые острые углы.

rubysdl

  • Более зрелый и отшлифованный, выдержал испытание временем.
  • Лучшая поддержка ввода и рендеринга японского текста.
  • Higher-level, более абстрактный API.
  • Связывает библиотеки SDL, SGE, SMPEG, SDL_image, SDL_mixer и SDL_ttf.
  • Требуется, чтобы у пользователей был установлен компилятор C для установки гема.Это может быть головной болью в Windows и MacOS X.
  • Требуется, чтобы пользователи MacOS X запускали вашу игру, используя специальный интерпретатор Ruby "rsdl".Таким образом, насколько мне известно, он не будет работать с JRuby или Rubinius в MacOS X.
  • Похоже, что он больше не разрабатывается и не поддерживается.
...