蛋白石的局限性是什么?

时间:2014-05-30 16:41:59

标签: ruby opalrb

我非常希望在新的Rails项目中尝试Opal,但风险当然是我无法发现无法 >直到我花了几百个小时做其他事情,然后碰到一堵我无法通过的砖墙。

有什么限制?

例如(当然,如果还有其他一些值得一提的限制,答案不应局限于这些主题)我会假设你不能在你的蛋白石代码中使用任何旧的Ruby库(但是我&#39 ;我喜欢发现我错了!)。

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

当然,我可能还会想到各种各样的问题。这看起来像是一个了不起的项目,但我想知道如果我只是潜入头脑中,我可能会遇到什么样的问题。

1 个答案:

答案 0 :(得分:18)

从Ruby的角度来看:

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

从JS的角度来看:

  • 数学的东西就像在Ruby中(即方法调用),这意味着它比原生的JS运算符更慢(比如在Ruby中);这意味着你不可能使用蛋白石来编写HTML5 3D游戏引擎
  • 无法访问类外部的属性,如在Ruby中,如果要访问需要使用方法的实例变量
  • 一些特别复杂(或者如果你想要,惯用)JS库更难用于Native或桥接类(class MyClass < `MyJsClass`; end)并且需要完整的包装器(opal-jquery就是一个例子,这一切都发生了在Ruby中的时间,你很少直接使用FFI映射的apis并且总是包装C库)。

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

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

TL;博士

别忘了你在浏览器中。不要低估Ruby的力量。