直接面向数据库编程,将 PostgreSQL 变成你的 API 服务器
全新的编程语言(!
concept User {
name: str;
boss: User;
}
api GET "/users/${id}" {
let q_user = db
.query(User)
.filter(
u => u.id == id
);
db.fetch_one(q_user)
}
数据库建模、查询语句编写、后端逻辑开发,全部使用统一的语言。编译至 WASM + SQL
SQL 同 WASM 字节码一样,都是燕几图编译器的目标代码。
运行在 PostgreSQL 中
你的程序可在进程内访问 PG 共享内存,并直接对外提供网络服务。
- 声明式、函数式编程语言,承自 MoonBit 与 EdgeQL
- 静态强类型、代数效应抽象、ADT 与模式匹配
- 一体化内生查询语言,向 ORM 说拜拜
- 零拷贝对接 PostgreSQL 原生类型
- 服务化编译支持文本、结构化(图形)双模式编程
// 定义一个抽象效应
effect Exn[T] {
raise(String) -> T
}
// 在函数中触发效应
fn div(x: Int, y: Int) -> <Exn[Int]> Int {
if y == 0 { raise("除数为零") }
else { x / y }
}
// 定义效应处理逻辑,赋予其意义
fn handler() -> ((<Exn[Int]> Int) ~> Int) {
hn {
raise(e) => {
println(e)
resume(0) // 恢复成 0
}
}
}
// 用 handler 消除效应,获得结果
let result: Int =
handle { div(5, 0) } with handler
// 找到所有名字为 'old' 的 User,统统改名为 'new'
fn rename(old: String, new: String)
-> { Mutation } bag[User] {
mut_table() |> filter_map_inplace(fn {
{ name, .. } as user =>
if name == old {
Some({ name: new, ..user })
} else {
None
}
})
}
let agents: list[User] =
handle { rename("张牧之", "张麻子") }
with query_executor
https://yanji.tech/zhang3/e-shop
共享语法树
管理进程
容器
服务进程
更新进程
存储介质
后端和数据库的 Figma + Vercel
有浏览器就能开发,支持离线模式、本地实例和多人协作。
免费提供测试实例,一键部署公网可用免备案,支持私有化。
开箱即用的图式变更 (migration)、第三方登录和计划任务等。
“
我们希望把这门语言做成一个真正开放的社区项目。编译器和运行时都是宽松许可的开源软件,可以免费使用和改进;线上群组「网声堂」将倾听开发者的声音,公开讨论和决定语言的发展方向。目前,项目还在早期阶段,我们会逐步开放更多共建机会,也欢迎学术界和业界的合作伙伴加入。无论是写代码、提想法,还是一起探索应用场景,都非常欢迎你通过邮件与我们联系。
”