V8在服务器端的常规使用:隔离

时间:2018-12-19 12:25:49

标签: programming-languages v8 embedded-v8 javascript-engine

Google的开源V8引擎是成熟的高性能JIT编译器。

主要在C ++中实现,充当以JS为中心的执行运行时。

它具有隔离实现(V8: Isolates),可在单个进程内提供隔离粒度。

涉及两部分问题。

(通用) 可以广泛使用此功能来跨服务器端 Web应用程序引擎(例如,nginx,apache)和编程语言进行隔离吗?

(更具体地讲->)

我对V8的掌握是-它是为JS脚本语言设计的(尽管它直接编译为机器代码)。 想要使用一种编程语言作为源代码(例如Haskell,C ++ / C),那么它们之间往往仍然具有JS接口。 在仍然使用V8: Isolates的同时,会有很多直接方法来生成机器代码吗?

1 个答案:

答案 0 :(得分:1)

V8是JavaScript(以及最新版本的WebAssembly)引擎,因此不能用于编译或执行任何其他语言。

如果有C ++代码,则需要使用C ++编译器为其生成可执行的机器代码。 Haskell代码需要Haskell编译器。

根据您的要求,WebAssembly可能对您很有趣:它是C ++等语言的可移植编译目标,比JavaScript更适合于此目的。

这应该回答您的“更具体”和“一般”问题。

请注意,V8隔离中实际上并没有任何魔术可以被用于其他目的。该术语主要描述在同一过程中拥有多个V8实例的能力。如果从头开始创建自己的项目(不管目的是什么),那很容易实现,您只需要维护一点编码纪律即可。对于现有的代码库,它需要重构所有全局状态(静态变量等)。

另外,请注意,今年世界已经了解到,从安全的角度来看,确实没有进程内隔离之类的东西。如果您有严格的安全要求,那么至少您将必须为不同的安全域运行单独的进程。 (请注意,V8的隔离不会提供针对旁通道攻击的保护。)