# HydraScript:从大学项目到静态类型 JSON 解析 CGI 工具
一位 C# 开发者打造了 HydraScript,这是一种融合 JavaScript 语法与静态类型的编程语言。该项目从学生论文起步,演变为支持 Docker 部署 Web 服务的开源 CGI 脚本工具。
从学生项目到开源利器
HydraScript 起源于鲍曼莫斯科国立技术大学 IU-9 系的论文《扩展 JavaScript 子集》。经过四年兼职开发,它成长为功能齐全的开源项目,集成 GitHub Actions CI/CD、语义化版本管理和自动化发布。解释器二进制文件使用 Native AOT 构建,支持 Windows (x64)、macOS (arm64) 和 Linux (x64),无需运行时依赖。
核心项目目标:
- 部分实现 JavaScript,支持对象和结构化静态类型——无需
constructor、class或interface关键字。 - 公开逆向工程现代静态分析技术。
- 通过开源代码揭秘编译器技术。
- 收集标准编译器难题的清晰实现。
静态分析:杀手级特性
HydraScript 的类型系统能在编译时捕获其他语言仅在运行时才发现的问题。
捕获未初始化变量访问
解释器跟踪初始化顺序,避免运行时崩溃。以下是 TypeScript/JavaScript 中的问题代码:
let x = f()
function f() {
console.log(x) // 错误:x 在赋值前被引用
return 5
}
HydraScript 在编译时就会标记此问题。
智能默认值
不像 C# 中未初始化局部变量导致编译错误,HydraScript 根据推断类型自动赋值默认值:
let x: number
>>> x // 0
let xArr: number[]
>>> xArr // []
let s: string
>>> ~s // 0 (字符串长度)
符号独立命名空间
语言使用三种符号类型:VariableSymbol、TypeSymbol 和 FunctionSymbol。名称只需在其类型内唯一,支持灵活复用:
type x = number
let x:x
function x(x:x) {
>>>x
x = x + 1
}
x(x)
CGI 支持 Web 开发
为让 HydraScript 适用于后端开发,现已支持 CGI 脚本。具体包括:
- 字符串操作 API
- 标准输出
- 环境变量读取
- Shebang 注释支持
Docker 部署配置
基于 Apache httpd 的 Docker 镜像配置,集成 HydraScript 解释器:
FROM mcr.microsoft.com/dotnet/sdk:10.0-alpine as sdk-build
RUN dotnet tool update -g hydrascript
ENV PATH="/root/.dotnet/tools:${PATH}"
FROM httpd:2.4-alpine
COPY --from=sdk-build /root/.dotnet/tools/ /usr/bin
RUN apk add dotnet10-runtime
示例 CGI 脚本:查询字符串转 JSON
此脚本将 URL 参数转为结构化 JSON,展示实际应用:
#!/usr/bin/hydrascript
type QueryStringParseResultItem = {
name: string;
value: string;
}
type QueryStringParseResult = {
result: QueryStringParseResultItem[];
}
type QueryStringParser = {
input: string;
}
function parse(parser: QueryStringParser): QueryStringParseResult {
const qsLen = ~parser.input
let i = 0
let items: QueryStringParseResultItem[]
let currentName: string, currentValue: string
let isName = true
while (i < qsLen) {
const currentChar = parser.input[i]
if (currentChar == "&" || i == qsLen - 1) {
let addittion = i == qsLen - 1 && currentChar != "&" ? currentChar : ""
items = items ++ [{name: currentName; value: currentValue + addittion;}]
currentName = ""
currentValue = ""
isName = true
} else if (currentChar == "=") {
isName = false
} else {
if (isName) {
currentName = currentName + currentChar
} else {
currentValue = currentValue + currentChar
}
}
i = i + 1
}
return {
result: items;
}
}
let parser: QueryStringParser = {
input: $QUERY_STRING;
}
>>> "Content-Type: application/json\n\n"
>>> parser.parse()
对于 a=1&b=bla&c=false,输出为:
{
"result": [
{"name": "a", "value": "1"},
{"name": "b", "value": "bla"},
{"name": "c", "value": "false"}
]
}
核心要点
• HydraScript 融合 JavaScript 语法与静态类型——无需类或构造函数。
• 静态分析防止常见错误,如未初始化变量访问。
• CGI 脚本支持 Web 开发,便于 Docker 部署。
• 完全开源,集成 CI/CD、语义化版本和跨平台构建。
— Editorial Team
暂无评论。