JimLang
基于 JVM 的轻量脚本语言,适合脚本开发与语言实现学习。
REPL/CLI · Web · JSON/YAML · Env/LLM(流式)· JDBC/DB
核心特性
🔁
控制流与表达式
if/else,while,for,break/continue;算术/比较,短路 &&/||。
📦
数组与对象
字面量;索引/属性访问;length;{} 对象。
📚
标准库
字符串/数学/文件;三引号多行字符串 '''...'''。
🕸️
内置 Web
route/start_webserver;send_text/html/json、cookie、下载、静态文件。
🔗
JSON / YAML / Env
json_encode/decode,yml_*,load_env/env_get 覆盖层。
🧠
LLM 集成
ask_llm(流式 SSE/LC4J),on_token 回调,LLM_DEBUG 调试。
🗄️
数据库 JDBC
db_open/query/exec/tx/with_conn,命名参数 :name,JimSQL。
🖥️
跨平台 CLI
--cli/-i、--eval/-e、--trace、STDIN;/ext 外部 JAR。
快速开始
启动与执行
# REPL
bin/jimlang.sh --cli
# 一行执行
bin/jimlang.sh --eval "println(\"hi\")"
# 从 STDIN
cat code.jim | bin/jimlang.sh -
运行脚本
# Windows
bin\\jimlang.cmd examples\\test.jim
# Unix
bin/jimlang.sh examples/test.jim
语法速览
控制流
for (var i = 0; i < 5; i = i + 1) {
if (i == 2) { continue }
if (i == 4) { break }
println(i)
}数组/对象
var a = [1,2,3]; var o = { name: "Jim", age: 26 }
println(a[0]); println(o.name)多行字符串
var s = '''
line1
line2
'''
println(s)示例
Fibonacci
function fib(n){ var a=0;
var b=1;
for (var i=0;i<n;i=i+1){
var t=a;
a=b;
b=t+b
}
return a }
println(fib(10))Env + Web
load_env(".env", true)
function port(req){ return send_text("port=" + env_get("PORT", 8080)) }
start_webserver(8080, route("/port","GET", port))LLM(流式)
ask_llm("用一句话描述春天", { stream: true })示例(JimSQL)
db_open("main", { url: "jdbc:jimsql://localhost:8821/test", driver: "com.dafei1288.jimsql.jdbc.JqDriver" })
println(json_encode(db_query("main","select 1 as x", [])))命令行
常用选项
--cli / -i 启动交互 REPL
--eval / -e CODE 执行一段代码
--trace 打印调用栈(或设置 JIM_TRACE=1)
- 从标准输入读取脚本
/ext 外部依赖
# 将第三方 JAR 放入项目根 ext/
# 启动器使用 -cp 方式,会自动拼接 ext/**/*.jar
# 例如:放入 JimSQL/Hikari/SnakeYAML/LC4J 等依赖
构建
- 环境:Java 21+,Maven 3.x
- 构建:
mvn clean package -DskipTests - 启动脚本:Windows/Unix,支持 /ext 类路径
路线图(摘)
近期完成
- 三引号字符串、短路 &&/||
- 错误信息带 caret/调用栈、--trace
- LLM ask_llm(流式 SSE/LC4J),on_token 回调
- Web 服务器与响应工具集、Cookie/下载/静态文件
- JSON/YAML、load_env/env_get
- JDBC:db_open/query/exec/tx/with_conn(JimSQL)
- 启动器 /ext 类路径
计划中
- 类型系统拓展与注解
- 事务保存点、流式查询增强
- 示例库与文档持续完善
版本:dev snapshot · GitHub:dafei1288/jimlang