如果有人为 Web 浏览器编写了 Ruby 插件并且用户安装了该插件,那么我是否可以在前端用 ruby 替换 javascript?
没有任何插件可以解决这个问题吗?或者甚至在浏览器端使用除 javascript 之外的其他语言?
如果有人为 Web 浏览器编写了 Ruby 插件并且用户安装了该插件,那么我是否可以在前端用 ruby 替换 javascript?
没有任何插件可以解决这个问题吗?或者甚至在浏览器端使用除 javascript 之外的其他语言?
您可以在 Silverlight 插件中使用http://ironruby.net/,但我不知道这种方式的 DOM 交互有多容易。
但我求你不要这样做!请使用 Open Web Stack 来解决您的问题。
如果您不离开舒适的 Ruby 世界,您不仅会伤害您的用户体验“WTF?为什么我需要 Silverlight 这个页面?” 但是你也会被困在你小小的 Ruby 世界中,而没有学习任何新的和令人兴奋的东西。
如果你们继续学习 JavaScript,那对你们俩都会更好。
因为记住:“学习是件好事!”
一件事是事实:截至 2010 年,JavaScript 没有线程停止“睡眠”功能(除了只消耗 CPU 周期的功能)。
在发表此评论之前,我已经使用 JavaScript 至少一年了,我得出的结论是,缺少线程停止睡眠功能是线程相关代码的真正阻碍因素。
缺少睡眠功能的一个后果是无法模拟 Ruby/C#/C++/等。就像 JavaScript 中的线程模型,这反过来意味着不可能将任何启用线程的语言转换为 JavaScript,无论做什么,除非 JavaScript 补充了(最好是非 CPU 周期燃烧)睡眠功能。
如果你浏览一下,你会发现很多评论说睡眠功能甚至没有必要,setTimeout 就足够了,等等,但我想那些声明的人并没有尝试在JavaScript。(想想互斥锁,临界区。我拒绝讨论临界区/同步对于/不是必需的情况,其中小部件内容由形成“原子整体”的多个数据组件组成。)
整个 DOM 模型的第二个展示停止器是在后台线程中呈现 DOM 元素的实现。
这是,会发生什么:
在 Javascript 中:create_my_awsome_widget_in_DOM(); edit_my_awsome_widget_by_editing_DOM_inside_it() if_we_are_lucky_we_reach_here_without_crashing_the_app()
由于 DOM 在后台渲染(阅读:在单独的线程中),通过调用 create_my_awsome_widget_in_DOM() 启动 DOM 编辑的线程和 DOM 渲染之间将存在竞争条件。如果渲染线程“足够快”以在 JavasSript 线程调用 edit_my_awsome_widget_by_editing_DOM_inside_it() 之前渲染 DOM,则一切正常,但如果反过来,则 JavaScript 开始修改 DOM 中没有的区域(尚未) 存在。
本质上,这意味着由于背景 DOM 渲染, create_my_awsome_widget_in_DOM() 和 edit_my_awsome_widget_by_editing_DOM_inside_it() 以随机顺序执行,如果 edit_my_awsome_widget_by_editing_DOM_inside_it() 在 create_my_awsome_widget_in_DOM() 之前调用,应用程序显然会崩溃。
可能有一种方法可以间接地做到这一点。这是RubyConf 2008上的原始演示文稿。主题:
这个演讲是关于让 ruby 在你的网络浏览器中运行的许多途径。我将首先谈谈为什么这是一个好主意。然后,我将简要介绍我研究过的每种方法以及每种方法遇到的不同数量的 FAIL。接下来我将关注最有前途的竞争者,rubyjs,一个输出 javascript 的 ruby 编译器。
rubyjs 项目仍然存在,但它似乎已经死了。这个想法可能有点太疯狂了。
mruby似乎是在网络浏览器中运行 ruby 的一个有趣的选项:http: //qiezi.me/projects/mruby-web-irb/mruby.html
它不是一个典型的插件,因为它不需要安装,它是运行 ruby 代码的 javascript(从 C 编译)。
从技术上讲,这是正确的,假设浏览器/插件还提供了广泛的 API 来处理 DOM 等。我不知道有什么插件可以做到这一点,但这是一个有趣的想法。