# ScriptX
**Repository Path**: scada/ScriptX
## Basic Information
- **Project Name**: ScriptX
- **Description**: ScriptX 是一个脚本引擎抽象层,对下封装多种脚本引擎,对上暴露统一的 API,使得上层调用者可以完全隔离底层的引擎实现
- **Primary Language**: C/C++
- **License**: BSL-1.0
- **Default Branch**: main
- **Homepage**: https://www.oschina.net/p/scriptx
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 7
- **Created**: 2021-04-08
- **Last Updated**: 2024-06-01
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
ScriptX
全能的脚本引擎抽象层
---
[](README.md) [](https://www.apache.org/licenses/LICENSE-2.0) [](https://github.com/Tencent/ScriptX/actions/workflows/unit_tests.yml)    [](https://coveralls.io/github/Tencent/ScriptX)

ScriptX是一个脚本引擎抽象层。对下封装多种脚本引擎,对上暴露统一的API,使得上层调用者可以完全隔离底层的引擎实现(后端)。
ScriptX不仅隔离了几种JavaScript引擎,甚至可以隔离不同脚本语言,使得**上层仅需修改一个编译选项即可无缝切换脚本引擎和脚本语言**。
ScriptX的术语中,"前端"指对外的C++ API,"后端"则指不同的底层引擎,目前已经实现的后端有:V8, node.js, JavaScriptCore, WebAssembly, Lua.
# 简介
ScriptX 的接口使用现代C++特性。并且做到100%符合C++标准,完全跨平台。
所有API以`ScriptX.h`聚合头文件暴露出来。
设计目标: **多语言** | **多引擎实现** | **高性能** | **API易用** | **跨平台**
# 第一印象
我们通过一段比较完整的代码来对ScriptX留下一个整体印象。
```c++
EngineScope enter(engine);
try {
engine->eval("function fibo(x) { if (x<=2 ) return 1; else return fibo(x-1) + fibo(x-2) }");
Local fibo = engine->get("fibo").asFunction();
Local ret = fibo.call({}, 10);
ret.asNumber().toInt32() == 55;
auto log = Function::newFunction(
[](const std::string& msg) {
std::cerr << "[log]: " << msg << std::endl;
});
// or use: Function::newFunction(std::puts);
engine->set("log", log);
engine->eval("log('hello world');");
auto json = engine->eval(R"( JSON.parse('{"length":1,"info":{"version": "1.18","time":132}}'); )")
.asObject();
json.get("length").asNumber().toInt32() == 1;
auto info = json.get("info").asObject();
info.get("version").asString().toString() == "1.18";
info.get("time").asNumber().toInt32() == 132;
Local