Ответ 1
С точки зрения Ruby:
- Строки неизменяемы. b/c подключены к строкам JS.
- Все числовые (Integer/Float/etc.) подключены к классу JS Number
- Символы и строки одинаковы, они оба соединены с JS Strings
- нет доступа к некоторым материалам из браузера (файл, поток, система, процесс и т.д.)
- require более сложно, поскольку в браузере нет файловой системы, а в 0.6.x они собраны в верхней части файла (стиль
AssetPipeline
). Вещи должны улучшиться с 0.7.x на (неизданный), (в качестве побочного элемента аналогичные проблемы найдены в RubyMotion). - вам все равно нужно изучить DOM и, возможно, CSSOM
С точки зрения JS:
- Математический материал похож на Ruby (т.е. вызовы метода), что означает, что он медленнее (например, в Ruby) по сравнению с родными операторами JS; это означает, что вы, вероятно, не будете использовать opal для написания игрового движка HTML5 3D.
- Нет доступа к свойствам вне класса, как в Ruby, если вы хотите получить доступ к переменным экземпляра, вам нужно использовать методы
- некоторые особенно запутанные (или, если хотите, идиоматические) JS-библиотеки сложнее использовать только с родными или мостиковыми классами (
class MyClass < `MyJsClass`; end
) и нуждаются в полномасштабных оболочках (opal-jquery - пример, и это происходит все время в Ruby тоже, где вы редко используете FFI сопоставленную apis напрямую и всегда переносите библиотеки C).
Это означает, что вы обычно можете получить много вещей, сделанных с помощью с использованием родного или opal-jquery. Я лично обнаружил, что несколько раз меняю классы из бэкэнда в интерфейс. Возможность тестирования и считывания кода, безусловно, улучшается (пока вы пишете хороший Ruby), и вы можете повторно использовать свои навыки OOD.
Я, конечно же, могу что-то упустить, кто-то приветствуется, чтобы прослушивать. И это в конечном итоге превратится в сообщение в блоге на http://opalrb.org/blog.
TL;DR
Не забывайте, что вы находитесь в браузере. Не стоит недооценивать силу Ruby.