Каковы ограничения опала?

Я очень хочу попробовать Opal в новом проекте Rails, но риск, конечно, в том, что я не обнаружу, что он не может сделать, пока не потрачу сотни часов на все остальное, и не столкнусь с кирпичной стеной. что я не могу пройти.

Каковы его ограничения?

Например (и, конечно, ответы не должны ограничиваться этими темами, если есть другие ограничения, о которых стоит упомянуть), я бы предположил, что вы не можете просто использовать любую старую библиотеку Ruby в своем коде Opal (но я бы хотел узнать, что Я ошибаюсь по этому поводу!).

Я также предположил бы, что могут быть трудности в использовании любой произвольной библиотеки JavaScript, или что есть случаи, когда вам нужно написать JavaScript для взаимодействия с ними.

И, конечно, могут быть всевозможные проблемы, которые я даже не представлял. Это похоже на удивительный проект, но я хочу знать, с какими уязвимостями я мог бы столкнуться неожиданно, если бы я просто погрузился с головой в голову.

1 ответ

Решение

С точки зрения Ruby:

  • Строки неизменны, потому что они соединены с JS Strings
  • Все Числовые (целое число / число с плавающей запятой / и т. Д.) Связаны с классом JS Number
  • Символы и строки одинаковы, они оба соединены с JS Strings
  • нет доступа к некоторым материалам из браузера (файл, поток, система, процесс и т. д.)
  • Требуется сложнее, поскольку в браузере нет файловой системы, а с версии 0.6.x они собраны в верхней части файла (AssetPipeline стиль). Вещи должны улучшиться с 0.7.x (не выпущено), (как примечание, подобные проблемы найдены в RubyMotion).
  • вам все еще нужно изучить DOM и, возможно, CSSOM

С точки зрения JS:

  • Математический материал похож на Ruby (то есть вызовы методов), что означает, что он медленнее (как в Ruby) по сравнению с нативными операторами JS; это означает, что вы, вероятно, не будете использовать опал для написания игрового движка 3D5 на HTML5
  • нет доступа к свойствам извне класса, как в Ruby, если вы хотите получить доступ к переменным экземпляра, вам нужно использовать методы
  • некоторые особенно замысловатые (или, если хотите, идиоматические) библиотеки JS сложнее использовать только с классами Native или bridged (class MyClass < `MyJsClass`; end) и нуждаются в полномасштабных оболочках (например, opal-jquery, и это происходит постоянно и в Ruby, где вы редко используете непосредственно сопоставленный FFI apis и всегда оборачиваете библиотеки C).

Тем не менее, вы обычно можете сделать много всего, просто используя Native или opal-jquery. Лично я неоднократно перемещал классы из бэкэнда в веб-интерфейс. Тестируемость и читабельность кода, безусловно, улучшаются (если вы пишете хороший Ruby), и вы можете повторно использовать свои навыки OOD.

Я, конечно, могу что-то упустить, любой может принять участие. И это в конечном итоге превратится в пост в блоге на http://opalrb.org/blog.

ТЛ; др

Не забывайте, что вы в браузере. Не стоит недооценивать силу Ruby.

Другие вопросы по тегам