欢迎光临
我们一直在努力

LenoLang:一门带静态类型检查的脚本语言

LenoLang:一门带静态类型检查的脚本语言

"Leno 诞生于对编程语言设计的热爱与探索,虽非完美,但乐在其中。"

一、语言定位

LenoLang 是一门带静态类型检查的脚本语言,定位介于 Python(纯动态)和 Go(纯静态)之间。它试图在开发效率和运行时安全之间找到一个平衡点:既保留脚本语言的灵活性和简洁语法,又通过编译期类型检查提前捕获错误。


二、核心设计亮点

1. 双层 int 设计:零开销的任意精度整数

Leno 的 int 采用巧妙的双层存储策略:

  • int48(48 位内联存储):值在 ±140 万亿范围内时,直接内联在 Value 中,性能极高,零开销

  • BigInt(自动升级):超出范围时自动切换到堆分配的 BigInt,精度无上限

leno

var a = 42 // int48,零开销
var b = 100000000000000000000 // 自动升级为 BigInt
print(type(a)) // "int"
print(type(b)) // "int" —— 对外完全透明

2. 渐进式类型系统

Leno 不强迫你在"全动态"和"全静态"之间二选一:

表格

场景推荐写法行为
局部变量 var x = 10 编译器自动推断为 int
函数参数 func add(int a, int b) 编译期严格检查
函数返回 func sum():int 调用者无需转换
不确定类型 var x / func test(var x) 运行时灵活处理

关键规则:var 在变量声明时是"推断模式",在函数参数中是"动态模式"(any),两者含义完全不同。

3. 零摩擦 FFI

Leno 的 FFI 设计非常有特色,特别是 clib 声明式调用:

leno

clib msvcrt {
i32 strlen(str8 s)
f64 pow(f64 base, f64 exp)
str8 strerror(i32 errnum)
}

msvcrt lib = ffi.load("msvcrt.dll")
int len = lib.strlen("hello") // i32 → int,自动展开
float p = lib.pow(2.0, 10.0) // f64 → float,自动展开
string msg = lib.strerror(2) // str8 → string,自动转换

设计哲学:"C 的窄类型是 ABI 约束,Leno 的 int 是数学约束。ABI 在调用边界处理,数学在语言内部处理。"


三、语言特性速览

控制流

leno

// for 循环:包含结束值用冒号
for 0:5 to i { print(i) } // 0 1 2 3 4 5
for 5:0 to i { print(i) } // 5 4 3 2 1 0(自动倒序)

// 数组/字典/字符串遍历
for arr to item, index { }
for dict to key, value { }
for str to char, index { }

// switch 支持类型匹配
switch x {
case is int { }
case is string { }
case 0, 1, 2 { }
default { }
}

面向对象的 Struct

leno

struct Point {
int x = 0
int y = 0

func distance_to(Point other):float {
int dx = other.x – x
int dy = other.y – y
return maths.sqrt(dx * dx + dy * dy)
}
}

var p = new Point(x = 3, y = 4)
print(p.distance_to(new Point())) // 5.0

函数是一等公民

leno

func make_adder(int n) {
return func(int x) { return x + n } // 闭包
}

var add5 = make_adder(5)
print(add5(10)) // 15


四、密码学示例:语言的表达能力

Leno 在 examples/crypto/ 下提供了一套纯 Leno 实现的密码学算法,充分展示了语言的位运算和算法表达能力:

表格

算法类型说明
AES-128 对称块加密 完整实现 SubBytes/ShiftRows/MixColumns/AddRoundKey
ChaCha20 对称流加密 TLS 1.3 标准算法
SHA-256 / HMAC-SHA256 哈希/MAC 目前仍安全的哈希算法
RSA 非对称加密 含 Miller-Rabin 素性测试
PBKDF2 密钥派生 基于 HMAC-SHA256
TEA / XTEA 轻量块加密 微型 Feistel 网络
凯撒/维吉尼亚/仿射 古典密码 含频率分析破译

这些实现依赖 Leno 的 _int32() / _uint32() 固定位宽函数来处理加密算法中的 32 位环绕运算:

leno

// TEA 加密中的 32 位环绕
sum = _int32(sum + DELTA)

// MD5 的 F 函数
_int32((_uint32(x) & _uint32(y)) | (_uint32(~x) & _uint32(z)))


五、模块生态

Leno 内置了常用标准库:

表格

模块用途
ffi 调用 C 动态库、内存操作
asyncs async/await 异步编程
maths 数学函数(sin/cos/sqrt/pow 等)
rands 随机数生成
files / dirs 文件和目录操作
jsons JSON 编解码
sockets TCP 网络连接
strings 字符串工具(reverse/find/byte/char 等)

项目地址:https://gitee.com/cheng8214/LenoLang

赞(0)
未经允许不得转载:171主机测评 » LenoLang:一门带静态类型检查的脚本语言
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址