可作为c++的内嵌语言或单独的语言使用。包含闭包,垃圾回收, 模式匹配,函数是一等公民,事件循环,自定义运算符重载等特性,针对网络请求及服务器也提供了异步接口。
可选的ssl支持
agumi的网络io通过调用sion来实现,sion的https支持需要openssl,这边先使用vcpkg安装openssl,再
cmake -S src -B bin -DVCPKG_PATH=/home/vcpkg # /home/vcpkg替换变成自己的vcpkg文件夹
cmake --build bin
仍可进行http协议的请求,不需要c++17标准库外的其他东西
cmake -S src -B bin
cmake --build bin
./bin/agumi
- 进入repl
./bin/agumi -repl
- 斐波那契
const fib = n => match(n) {
0: 0,
1: 1,
_: fib(n-1) + fib(n-2)
}
fib(10)
执行文件
进入repl
运行测试
闭包测试和使用点这里
使用纯agumi实现的简陋的promise点这里
两个服务器都是异步非阻塞的,tcp是调用的本地c++的实现,http是基于tcp使用纯agumi写的,当然依旧存在一些问题
一个例子 简单的文件读取 源码点这
# 启动服务器
agumi -exec=script/http_server.as
# 浏览器打开 http://127.0.0.1:9999/?path=lib/server/http_status_map.csv ,查看效果
['array','number','boolean','object','string', 'null'].select(type => {
define_operator(type, 'function', '->', (l, r) => r(l))
})
define_operator('function', 'function', '->', (l,r) => (a) => r(l(a)))
默认不启用gc,如果需要长时间启用agumi,需要gc参考这个文件来启用
- 运算符优先级有时会表现异常,后面改用调度场重新写