蛋白石的局限性是什么?

ico*_*ast 13 ruby opalrb

我非常热衷于尝试欧泊在一个新的Rails项目,当然风险是,我不会发现什么不能做,直到我花了数百个小时做别的一切,碰到砖墙我无法通过.

有什么限制?

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

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

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

Eli*_*ito 18

从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库).

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

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

TL;博士

不要忘记你在浏览器中.不要低估Ruby的强大功能.