【问题标题】:Is Rhino the only interpreter with support for sandboxing and serializable continuations?Rhino 是唯一支持沙盒和可序列化延续的解释器吗?
【发布时间】:2011-07-10 10:06:40
【问题描述】:

我需要 (a) 沙盒和 (b) 可序列化的延续。 I'm exposing server-side game scripting to users,它非常异步,因此回调模式使代码不可读,对于新手程序员来说非常难以接近。延续传递风格是一种替代方案,但具有相同的缺点。异步是指对用户的查询可能需要数月才能完成。

查看http://weaverengine.com/platforms查看我的完整列表

可序列化的延续似乎是一个非常优雅的解决方案,但很少有解释器支持它们。

到目前为止,我唯一的选择似乎是 Rhino。我希望 NodeJS 或 PyPy 可以工作,但目前的证据表明相反。

Lua seems to support coroutines,但我找不到任何关于它是否支持可序列化延续的信息。 Lua 在沙盒方面做​​得很好。

NodeJSJefe 提供非常好的沙盒,但 nothing so far regarding continuation serialization

根据我在 pypy-dev 邮件列表中的理解,PyPy 还没有完善他们的沙盒和可序列化的延续支持到可以一起使用的程度。

JavaFlow 提示如果所有类都实现了 Serializeable,那么 Java 延续可以被序列化。但是除非我可以在 JavaFlow 之上运行一个很好的动态语言的解释器,否则我不感兴趣。

Java 和 Rhino 是我唯一的选择吗?

是否有 NodeJS 的分支支持继续支持?任何符合这些标准的相当不错的动态语言?

【问题讨论】:

  • 请注意:Rhino 的 Continuations 仅在以解释模式 (-opt -1) 运行时可用。 Rhino 可以通过多种方式运行,通常它会 JIT 编译 Java 字节码,或者可以使用 jsc 提前编译为字节码。当然,在解释模式下运行速度较慢,所以如果性能是一个问题,这是需要注意的重要事项。

标签: javascript node.js rhino continuations sandbox


【解决方案1】:

我最终使用了 Lua 5.1.4 和 Pluto。到目前为止似乎是一个不错的选择。

【讨论】:

    【解决方案2】:

    应该可以在Gambit-C 中序列化延续。

    【讨论】:

    • 谢谢!我以前没有听说过那个版本的 Scheme。我不确定 Scheme 是否适合作为介绍性语言,不幸的是:(
    【解决方案3】:

    我很惊讶你没有提到 Scheme,因为这是开创延续的语言。例如,SISC 是一个运行在 JVM 上的 Scheme 解释器,它支持可序列化的延续。例如,这些在SISCweb 框架中使用。

    对于沙盒,您可以使用 jvm 的内置安全功能。

    【讨论】:

    • 谢谢!我读过关于其他版本方案的延续,但这些实现是not可序列化的。我不确定 Scheme 是否是教人们如何编程的最佳语言 - 我认为它很先进,但非常强大和有用。
    • Racket 具有出色的沙盒支持[1]。它还支持其略微受限的“网络服务器”语言[2] 中的可序列化延续。如果您不喜欢 Web 服务器语言,您可以使用它作为示例来实现您自己的带有可序列化延续的沙盒脚本语言。 1.docs.racket-lang.org/reference/Sandboxed_Evaluation.html 2.docs.racket-lang.org/web-server/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    • 2010-12-21
    • 1970-01-01
    • 2015-03-08
    • 2016-12-08
    • 1970-01-01
    相关资源
    最近更新 更多