这篇是运行方式的完整参考。第一次学习只需记住 VSCode 的 ▶ 和
cnp 运行;需要编译、换后端或排查问题时再回来查。
| 方式 | 入口 / 命令 | 适合场景 |
|---|---|---|
| 1. VSCode 一键运行 | F5 或编辑器右上角 ▶ | 日常写代码、边写边看诊断 |
| 2. 树遍历运行 | cnp 运行 x.cnp |
从命令行直接运行,启动快、报错位置准 |
| 3. Python 转译 | cnp 运行 --python x.cnp / cnp 编译 x.cnp |
验证 Python 生成物或生成 .py |
| 4. JS 转译 | cnp 运行 --js x.cnp / cnp 编译 x.cnp --js |
在 Node.js 或浏览器环境运行 |
| 5. 交互模式 | cnp 交互 |
不建文件,随手试一小段 |
| 6. 在线运行器 | cnplus.org/playground | 零安装,在浏览器里立即体验 |
同一份源码可以选择不同跑法。三个后端共同支持的确定性能力应得到相同结果;后端特有能力在下文单独列出。
安装 CNplus 扩展并打开项目文件夹后,按 F5 或点击编辑器右上角的 ▶。扩展会调用一个确实装有 CNplus 的 Python 解释器,并在下方终端显示结果。
新手安装、项目内 .venv、工作区信任和解释器排查见开始。
cnp 运行cnp 运行 我的程序.cnp
这是默认后端:直接解释抽象语法树,不生成新文件。它启动快、报错位置准确,也支持用 导入 调用 Python 库。
cnp 运行 --python 我的程序.cnp
cnp 编译 我的程序.cnp
python 我的程序.py
两条 CNplus 命令的区别:
cnp 运行 --python:先转成 Python,再立即执行,用来核对 Python 后端行为。cnp 编译:生成 我的程序.py;生成物不依赖 CNplus 运行时,但目标电脑需要兼容的 Python。源码若 导入 了第三方包,目标电脑仍要另外安装那些包。树遍历和 Python 转译都支持 导入。如果程序要用 Python 库,不必为了 导入 强制换后端;需要生成 .py 或核对转译结果时再选 Python 后端。详见借用 Python 库。
cnp 运行 --js 我的程序.cnp
cnp 编译 我的程序.cnp --js
node 我的程序.js
cnp 运行 --js:生成临时 JS,再交给 Node.js 运行,因此本机需要 node 命令。cnp 编译 x.cnp --js:生成自包含的 .js;可以交给 Node.js,也可以放进现代浏览器环境。JS 与另外两个后端共同支持的确定性能力会通过黄金语料和针对性测试对拍,但不是每种后端特有能力都通用。
导入:含 导入 "math" 等语句的生成物运行时会报 CN0303。需要 Python 库时用树遍历或 Python 转译。9007199254740992 + 1 仍得到 9007199254740993。prompt / console;这不代表程序可以直接使用 process、require 等 Node 全局。cnp 交互适合试表达式和短代码:
$ cnp 交互
CNplus 交互模式 —— 输入代码立即执行;输入「退出」或 Ctrl-D 离开
cnp> 1 + 1
2
cnp> 设 x = 10
cnp> x * 2
20
cnp> 退出
退出 或按 Ctrl-D 结束。打开 cnplus.org/playground,不用安装即可在浏览器里编辑和运行。它通过 Pyodide 使用树遍历后端,并可把当前代码放进分享链接。
在线环境不能像本地程序一样自由读写电脑文件或安装任意插件。准备长期学习时,按开始建立项目内 .venv 并使用 VSCode。
这些不是新的执行后端,而是排查工具:
| 命令 | 作用 |
|---|---|
cnp 检查 x.cnp |
只做静态检查,不执行程序 |
cnp 词法 x.cnp |
显示词元流,排查词法问题 |
cnp 语法树 x.cnp |
显示抽象语法树,排查语法结构 |
cnp 版本 |
显示当前 CNplus 版本 |
| 能力 | 树遍历 | Python 转译 | JS 转译 |
|---|---|---|---|
| 直接运行命令 | cnp 运行 |
cnp 运行 --python |
cnp 运行 --js |
| 生成独立文件 | 不生成 | cnp 编译 → .py |
cnp 编译 --js → .js |
导入 Python 库 |
支持 | 支持 | 不支持,运行时报 CN0303 |
| 运行依赖 | CNplus 的 Python 环境 | 直接运行需 CNplus;生成物需兼容 Python | 直接运行需 CNplus + Node.js;生成物需 Node.js 或现代浏览器 |
| 共同确定性语义 | 与共享黄金语料一致 | 与共享黄金语料一致 | 在支持范围内与共享黄金语料一致 |
cnp 运行cnp 交互 或在线运行器.py → cnp 编译.js → cnp 编译 x.cnp --js