Skip to content
/ agumi Public

Scripting language runtime environment for executing custom code.

License

Notifications You must be signed in to change notification settings

zanllp/agumi

Repository files navigation

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
# 浏览器打开 https://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. 运算符优先级有时会表现异常,后面改用调度场重新写

About

Scripting language runtime environment for executing custom code.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published