【问题标题】:What are the limitations of Opal? [closed]欧泊的限制是什么? [关闭]
【发布时间】:2014-05-30 16:41:59
【问题描述】:

我非常热衷于在一个新的 Rails 项目中尝试 Opal,但当然风险是在我花费数百美元之前我不会发现它不能做什么几个小时做其他所有事情,然后撞到我不可能通过的砖墙。

它有什么限制?

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

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

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

【问题讨论】:

  • 这听起来像是一个会导致很多意见和很少事实的问题。
  • 只有不知道自己在说什么的人才能给出答案。限制是事实。例如,如果您可以使用 Opal 中的 jQuery,那将是一件好事。 (事实上​​,您可以使用 Opal 中的 jQuery,但这纯属事实——不涉及任何意见。 )
  • 另一方面,您对这个问题的“味道”的看法纯粹是意见问题,而不是事实。
  • 是的,多人共享。
  • 查看给出的答案中的要点。这些主要是意见问题吗?我不确定您指出多个人持有您的观点是要表达什么观点。这有什么关系?它证明了什么?

标签: ruby opalrb


【解决方案1】:

从 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) 一起使用,并且需要完整的包装器(opal-jquery 就是一个例子,而且这种情况一直都在发生在 Ruby 中也是如此,您很少直接使用 FFI 映射的 api,并且总是包装 C 库)。

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

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

tl;博士

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

【讨论】:

    猜你喜欢
    • 2014-08-20
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-29
    • 2011-08-13
    • 1970-01-01
    相关资源
    最近更新 更多