普贤教程 › 基础教程
普贤简介
普贤(PuXian,命令名 px)是一门静态编译的通用编程语言。它把 Python 的可读性和 Go 的部署形态拼在一起:源码看像 Python,产物是一个静态链接的可执行文件。
它长什么样
px
def classify(n): if n > 0: return "正数" elif n < 0: return "负数" return "零" def main(): var xs = [3, -1, 0] for x in xs: print(str(x) + " 是 " + classify(x))
text
3 是 正数 -1 是 负数 0 是 零
没有分号、没有花括号,靠缩进表达层级。def 定义函数,var 声明变量,def main() 是入口,解释器会自己调用它——不需要在文件末尾再写一行 main()(写了会执行两次)。
三个关键设计
1. 解释轨与编译轨,同一份源码
| 命令 | 做了什么 | 适合 |
|---|---|---|
px run app.px | 解释执行,秒起 | 开发、调试、临时脚本 |
px run --fast app.px | 编译一次并缓存,之后直接 exec | 反复调用的脚本、cron |
px build app.px | 编译成静态二进制 | 发布、交付、无运行时环境的目标机 |
两条轨不是两个语言,语义一致;差别在性能与能力:解释器是 Mini 子集,没有并发原语,逐像素绘图这类重活会慢到不可用(实测差 50–100 倍)。
注意并发(
spawn / chan)只在编译轨可用。解释器遇到并发代码会直接报错。2. 错误是值,不是异常
语言没有 try / catch。可恢复的错误用返回值表达:
px
def div(a, b): if b == 0: return Err("除数不能为 0") return Ok(a / b) def main(): var r = div(10, 4) if r.is_err(): print("失败:" + r.err()) else: print("结果:" + str(r.ok()))
text
结果:2.5
不可恢复的错误(未定义变量、类型不匹配、缺键)直接终止程序,并给出行列号——这是刻意的:让"写错了"立刻暴露,而不是留下半个错误状态。
3. 自带两套依赖来源
- 标准库
stdlib/:27 个模块随语言分发,import std.strings直接可用。 - 生态包
registry/:195 个包,含 MySQL、PostgreSQL、Redis、JWT、bcrypt、验证码、二维码等,用pxpkg装进项目。
和常见语言的对照
| PuXian | Python | Go | |
|---|---|---|---|
| 类型 | 动态标注、运行时检查 | 动态 | 静态强类型 |
| 缩进 | 语义缩进 | 语义缩进 | 花括号 |
| 错误 | Ok / Err 值 | 异常 | 多返回值 error |
| 部署 | 静态二进制 | 需解释器 | 静态二进制 |
| 并发 | spawn / chan / actor(编译轨) | GIL 线程 / asyncio | goroutine |
它被用在哪里
PuXian 不只是一门"能跑 hello world"的语言。生产环境里它承担着真实的网络服务:
- Ma(边缘网关)的
px_routes:请求进来交给.px脚本处理,脚本直接构造 HTTP 响应; - 账号系统的验证码、发码、限流整条链,已经从 Go 迁到
.px并上线; - 云同步的 push / pull / status / delete 四个接口;
- 边缘设备(GPIO / I2C / 串口 / PWM)通过
std.edge直接操作。