13

我非常热衷于在一个新的 Rails 项目中尝试Opal,但当然风险是我不会发现它不能做的事情,直到我花了数百个小时做其他所有事情,然后遇到了一堵砖墙我不可能通过。

它的局限性是什么?

例如(如果还有其他值得一提的限制,当然答案不应该仅限于这些主题)我会假设您不能只在 Opal 代码中使用任何旧的 Ruby 库(但我很想知道我错了!)。

我还猜想使用任意 JavaScript 库可能会有困难,或者在某些情况下您需要编写 JavaScript 来与这些库交互。

当然,可能会有各种各样的问题,我什至还没有开始想象。这看起来是一个了不起的项目,但我想知道如果我只是一头扎进,我可能会意外遇到什么问题。

4

1 回答 1

18

从 Ruby 的角度来看:

  • 字符串是不可变的 b/c 被桥接到 JS 字符串
  • 所有数字(整数/浮点数/等)都桥接到 JS Number 类
  • Symbols 和 Strings 是一样的,它们都桥接到 JS Strings
  • 无法从浏览器访问某些内容(文件、线程、系统、进程等)
  • require 更加棘手,因为浏览器中没有文件系统,并且从 0.6.x 开始,它们聚集在文件的顶部(AssetPipeline样式)。事情应该会从 0.7.x (未发布)改进,(作为旁注,在 RubyMotion 中发现了类似的问题)。
  • 你仍然需要学习 DOM,可能还有 CSSOM

从 JS 的角度来看:

  • 数学的东西就像在 Ruby 中(即方法调用),这意味着与原生 JS 运算符相比它更慢(就像在 Ruby 中一样);这意味着您可能不会使用 opal 来编写 HTML5 3D 游戏引擎
  • 不能从类外部访问属性,如在 Ruby 中,如果要访问实例变量,则需要使用方法
  • 一些特别复杂的(或者,如果你愿意的话,惯用的)JS 库更难与 Native 或桥接类class MyClass < `MyJsClass`; end(很少直接使用 FFI 映射的 api 并且总是包装 C 库)。

也就是说,您通常只需使用 Nativeopal-jquery就可以完成很多工作。我个人发现自己不止一次将课程从后端转移到前端。可测试性和代码可读性肯定会提高(只要您编写好的 Ruby),并且您可以重用您的 OOD 技能。

我肯定会遗漏一些东西,欢迎任何人加入。它最终会变成http://opalrb.com/blog上的博客文章。

tl;博士

不要忘记您在浏览器中。不要低估 Ruby 的力量。

于 2014-06-02T22:50:41.617 回答