ppyne/ProtoScript2
GitHub: ppyne/ProtoScript2
ProtoScript2 是一门严格静态类型、确定性执行的基于原型的编程语言,提供规范化的 v2.0 语言标准与 Node/C 双重参考实现,强调编译期完全确定性和 100% 规范符合性。
Stars: 1 | Forks: 0

# ProtoScript V2 — 宣言
ProtoScript V2 是一种为实现一个简单承诺而设计的语言:
**没有魔法,没有隐性成本,没有语义歧义**。
ProtoScript V2 可以被定义为一种具有固定布局的静态基于原型的语言,在这种语言中,委托关系、字段和方法都在编译时完全确定。
宣布该语言发布的英文文章:[ProtoScript2: A Static Prototype-Based Language](https://alexandre.vialle.ovh/Articles/Programming/protoscript2-a-static-prototype-based-language)
另一篇英文文章:[ProtoScript2: At the Boundaries of Genericity](https://alexandre.vialle.ovh/Articles/Programming/protoscript2-at-the-boundaries-of-genericity)
另一篇可作为 ProtoScript2 宣言的英文文章 [Prototype-Based Thinking — The ProtoScript2 Position](https://alexandre.vialle.ovh/Articles/Programming/prototype-based-thinking-the-protoscript2-position)
该项目现已具备独立的规范、治理和可测试性。

## ProtoScript V2 的设计理念
- 严格静态类型
- 基于原型的模型(无类的面向对象)
- 无用户 RTTI
- 函数不能作为值
- 无函数泛型
- 编译时确定性解析
## 语言契约
- 参考用户手册为 [`MANUEL_REFERENCE.md`](MANUEL_REFERENCE.md)(描述性,与规范保持一致)
- 规范性来源是 [`SPECIFICATION.md`](SPECIFICATION.md)(ProtoScript Language Specification v2.0)
- 实现指南 [`docs/implementation_guide.md`](docs/implementation_guide.md)
- 一致性测试套件(`tests/manifest.json`)是契约的一部分
- 只有通过 100% 规范测试的实现才被视为符合标准
- 没有主要版本号变更就不会有语义变化
## 为什么存在此仓库
此仓库提供:
- 完整的规范性规格说明
- Node.js oracle 实现(`bin/protoscriptc`)
- 用于执行的参考 C CLI(`c/ps`)
- 用于前端验证的 C CLI 路径(`c/pscc`)
- Node/C 交叉验证以避免静默分歧
Node.js 作为 **可执行规范**。
C 作为 **底层可实现性证明**。
## 演示
得益于通过 WebAssembly(使用 emscripten 编译)在 Web 上运行的演示,您可以立即测试 ProtoScript2:
立即尝试:[ppyne.github.io/ProtoScript2/](https://ppyne.github.io/ProtoScript2/)
## 基本命令
### 前置条件
- Node.js(用于 oracle `bin/protoscriptc`)
- C 编译器(clang 或 gcc)+ make
- POSIX(macOS / Linux)
- `jq`(用于测试套件)
- [mcpp](https://github.com/zeroc-ice/mcpp)(集成预处理器)通过 Git submodule 获取
获取 mcpp 预处理器源码(submodule):
```
git submodule update --init --recursive
```
### 编译
编译 C 二进制文件:
```
make -C c
```
这将生成:
- `c/ps`(执行 CLI)
- `c/pscc`(C 前端)
一致性验证:
```
tests/run_conformance.sh
```
Node/C 交叉验证(严格):
```
tests/run_node_c_crosscheck.sh --strict-ast --strict-static-c
```
完整运行器(构建 + 一致性 + 交叉检查 + CLI):
```
tests/run_all.sh
```
Oracle 端(Node)的编译/控制:
```
bin/protoscriptc --check file.pts
bin/protoscriptc --run file.pts
bin/protoscriptc --emit-ir-json file.pts
bin/protoscriptc --emit-c file.pts
```
注意:
- `bin/protoscriptc`(Node)是 **唯一** 能够生成 C(`--emit-c`)和完整 IR(`--emit-ir`)的工具。
- `c/pscc`(C)提供部分前端,并 **重定向** 到 `bin/protoscriptc` 以执行 `--emit-c` / `--emit-ir`。
标准模块注册表:
- runtime/CLI 加载 JSON registry 以用于 `import Io/Math/JSON`。
- 您可以通过环境变量 `PS_MODULE_REGISTRY` 强制指定位置。
默认搜索顺序:
`PS_MODULE_REGISTRY`,
二进制文件 `ps` 旁边的 `registry.json`,
`./registry.json`,
`/etc/ps/registry.json`,
`/usr/local/etc/ps/registry.json`,
`/opt/local/etc/ps/registry.json`,
`./modules/registry.json`。
C CLI(执行):
```
make -C c
./c/ps --help
./c/ps run file.pts
./c/ps check file.pts
./c/ps ast file.pts
./c/ps ir file.pts
./c/ps emit-c file.pts # forward vers bin/protoscriptc
```
有用的选项(位置自由,命令前后均可):
```
./c/ps --trace run file.pts
./c/ps run file.pts --trace-ir
./c/ps run file.pts --time
```
C 前端(pscc):
```
./c/pscc --check file.pts
./c/pscc --check-c file.pts
./c/pscc --check-c-static file.pts
./c/pscc --ast-c file.pts
./c/pscc --emit-ir-c-json file.pts
./c/pscc --emit-ir file.pts # forward vers bin/protoscriptc
./c/pscc --emit-c file.pts # forward vers bin/protoscriptc
```
构建 WASM(可复现):
```
make web-clean
make web
```
文档化的 WASM pipeline(工具版本、验证一致性)位于此处:
[`docs/wasm-build.md`](docs/wasm-build.md)
## 不妥协的扩展
ProtoScript V2 允许通过规范性原生 API(规范第 20 节)使用第三方模块,但需遵守严格约束:
- 仅扩展环境,绝不扩展语义
- 仅限编译时解析
- 显式导入并静态类型的符号
- 无动态加载,无 RTTI,无反射
编写原生模块的官方文档:
[`docs/native-modules.md`](docs/native-modules.md)
## 状态
ProtoScript V2 是一种根据其规范定义的语言。
固定的 v2.0 基线标签为:`spec-v2.0-final`。
## 编辑器工具
仓库在 `tools/` 中包含轻量级编辑支持:
- VS Code 扩展(语法高亮、代码片段、补全以及通过最小化 LSP 提供的签名帮助)
- Vim 支持(文件类型检测 + 语法高亮)
有关安装说明,请参阅 `tools/vscode/protoscript2/README.md` 和 `tools/vim/README.md`。

标签:AI工具, Bing搜索, GNU通用公共许可证, MITM代理, Node.js, ProtoScript, V2.0, 内存安全, 原型继承, 客户端加密, 嵌入式, 工具链, 布局固定, 引用实现, 性能, 无类, 无运行时开销, 无魔法, 确定性, 类型安全, 系统编程, 编程语言, 编译器, 规范, 静态类型, 面向对象, 验证