Подтвердить что ты не робот

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

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

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

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

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

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

4b9b3361

Ответ 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.