Skip to content

Latest commit

 

History

History
92 lines (83 loc) · 3.29 KB

File metadata and controls

92 lines (83 loc) · 3.29 KB

Agumi

test

可作为c++的内嵌语言或单独的语言使用。包含闭包,垃圾回收, 模式匹配,函数是一等公民,事件循环,自定义运算符重载等特性,针对网络请求及服务器也提供了异步接口。

编译

可选的ssl支持

启用ssl支持

agumi的网络io通过调用sion来实现,sion的https支持需要openssl,这边先使用vcpkg安装openssl,再

cmake -S src -B bin -DVCPKG_PATH=/home/vcpkg # /home/vcpkg替换变成自己的vcpkg文件夹
cmake --build bin

不使用openssl

仍可进行http协议的请求,不需要c++17标准库外的其他东西

cmake -S src -B bin
cmake --build bin

运行

./bin/agumi

例子

  1. 进入repl
./bin/agumi -repl
  1. 斐波那契
const fib = n => match(n) {
 0: 0,
 1: 1,
 _: fib(n-1) + fib(n-2)
}
fib(10)

image

启动参数

-exec=[file path]

执行文件

image

-repl

进入repl

-test

运行测试

几个测试和例子

闭包

闭包测试和使用点这里

promise

使用纯agumi实现的简陋的promise点这里

键值存储

点这里

tcp & http 服务器

两个服务器都是异步非阻塞的,tcp是调用的本地c++的实现,http是基于tcp使用纯agumi写的,当然依旧存在一些问题

tcp

使用参考

http

具体实现

一个例子 简单的文件读取 源码点这

# 启动服务器

agumi -exec=script/http_server.as
# 浏览器打开 http://127.0.0.1:9999/?path=lib/server/http_status_map.csv ,查看效果

内置函数 / 如何与c++ bind / 基础类型运算符重载

参考pre define func

例子:使用运算符重载实现函数式语言pipe的功能

['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)))

image

image

实现类似rust .. 的range功能

image

垃圾回收

默认不启用gc,如果需要长时间启用agumi,需要gc参考这个文件来启用

效果参考

image

已知问题

  1. 运算符优先级有时会表现异常,后面改用调度场重新写