蛋白石的局限性是什么?

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

有什么限制?

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

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

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

从Ruby的角度来看:

  • 字符串是不可变的b / c桥接到JS字符串
  • 所有数字(整数/浮点数等)都桥接到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库)。

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

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

TL;博士

不要忘记你在浏览器中。 不要低估Ruby的强大function。