LenoLang:一门带静态类型检查的脚本语言
LenoLeno 是一门带静态类型检查的脚本语言。由 C 语言实现编译为字节码在虚拟机上运行。Leno 诞生于对编程语言设计的热爱与探索虽非完美但乐在其中。一分钟速览// 类型推断 静态检查 var name Leno int version 1 // 结构体 方法 struct Point { int x 0 int y 0 func dist():float { return maths.sqrt(x * x y * y) } } var p new Point(x 3, y 4) print(p.dist()) // 5.0 // 接口 多态 face Shape { func area():float } struct Circle impl Shape { int r 0 func area():float { return 3.14 * r * r } } // 类型别名 alias Size int alias IntList Array[int] // 泛型 struct类型参数运行时精准传递 struct Result[T] { T data bool ok false } func Ok[T](T val): Result[T] { return new Result[T](dataval, oktrue) } func Err[T](string msg): Result[T] { return new Result[T](okfalse) } var r Ok[int](42) print(r.data) // 42 // 泛型约束 [T: Face]编译期检查方法完整性 face Comparable { func compare(Comparable other): int } func maxBy[T: Comparable](T a, T b): T { if a.compare(b) 0 { return a } return b } // 匿名函数 闭包 func make_counter(int start) { int count start return func():int { count count 1; return count } } // 异步协程 async func fetch():string { import asyncs await asyncs.sleep(100) return done } // 异常处理 try { var a 1 / 0 } catch e { print(出错: e.msg) }特性类型系统静态类型 类型推断— 显式声明或var自动推断类型一旦确定不可更改任意精度整数—int无溢出int48 内联存储 BigInt 自动升级对外完全透明alias类型别名— 支持简单类型、Array[T]、Dict[K,V]、别名链等复杂组合类型守卫—is类型检查 if/switch 块内自动类型收窄安全类型转换—as操作符不匹配返回null而非崩溃结构体与面向对象struct结构体— 字段、方法、嵌套、自引用堪比轻量级 class泛型 struct—struct Stack[T]、struct Result[T]类型参数沿调用链精准传递self关键字— 方法内显式引用当前实例self可选但冲突时必备face接口— 名义类型显式impl声明编译期检查方法完整性支持export face泛型约束—func maxBy[T: Comparable](T a, T b): TT 必须实现指定 faceenum枚举— 自增值或显式值本质为int函数式编程一等函数— 函数赋值给变量、作为参数传递、作为返回值匿名函数 / Lambda—func(x) { return x * 2 }内联定义支持 IIFE闭包— 捕获外部变量状态保持多实例独立泛型函数—func map[T, U](Array[T] arr, func(T):U fn):Array[U]默认参数—func add(int x, int y 10):int模块系统import导入— 文件模块、内置包、相对路径、中文/空格路径export控制— 变量/函数/struct/enum/face/alias 显式导出export alias— 模块导出类型别名支持复杂类型和别名链use类型导入—use module.Struct导入 struct/face 到当前作用域use链式传导— D→C→B→A 自动传递类型无需每层重导出循环依赖支持— A↔B 相互导入占位符机制防止无限递归模块缓存 / 单例— 同模块多次导入共享同一实例状态全局一致包管理—leno.toml配置、leno --init创建、leno --install安装并发编程多线程—threads模块start()/join()/通道通信线程间全局变量隔离异步协程—async/await 事件循环轻量并发Channel 通道— 有缓冲/无缓冲Go 风格 CSP 模型底层能力FFI— 直接调用 C 动态库和系统 API无需绑定CStruct— 声明式定义 C 结构体布局与 FFI 无缝配合异常处理try-catch-finally— 完整异常机制支持嵌套和throw重抛异常对象—e.msg/e.file/e.stack完整诊断信息线程异常传播— 子线程异常通过join()传播到调用方其他泛型容器—Array[T]、Dict[K, V]内置泛型数组与字典支持map/filter/reduce字符串插值—$Hello, {name}!内嵌表达式格式化输出—format(%02d: %-10s, i, name)C 风格格式控制as安全转换— 不匹配返回null而非崩溃逻辑右移— 高位补 0适合加密算法位运算正则表达式—regexs模块JSON—jsons模块编解码垃圾回收— 内置 GC自动内存管理字节码编译— 源码 →.lenb字节码 → 独立 exe 打包跨平台— Windows / Linux / macOS通过 GitHub Actions 自动构建验证快速开始Hello World创建hello.lenomain() { print(Hello, Leno!) }运行leno hello.leno更多示例main() { // 类型推断 var name Leno var features [静态类型, 协程, FFI, 模块系统] // 结构体命名参数构造 var p new Point(x 3, y 4) print(距离 p.dist()) // 链式集合操作 var result [1, 2, 3, 4, 5] .filter(func(var x, var i) { return x % 2 0 }) .map(func(var x, var i) { return x * 10 }) print(result) // [20, 40] // 异常处理 try { var val 1 / 0 } catch e { print(出错: e.msg) } } struct Point { int x 0 int y 0 func dist():float { return maths.sqrt(x * x y * y) } }构建前置要求GCC 或 MinGWC99 支持使用构建脚本Windowsbuild.batLinux / macOSchmod x build.sh ./build.sh构建产物build/leno编译器 VM。构建 VM 运行时仅 Windowsbuild_vm.bat生成build/leno_vm.exe只包含 VM 运行时不含编译器前端体积更小。运行# 运行 .leno 源码文件 leno hello.leno # 运行 .lenb 字节码文件使用 VM 运行时 leno_vm hello.lenb # 不带参数显示帮助信息 leno编译为字节码Leno 支持将源码编译为.lenb字节码文件然后使用leno_vm运行# 编译为字节码 leno -c hello.leno # 运行字节码 leno_vm hello.lenb # 打包为独立 exe leno -p hello.leno打包与包管理创建包leno --init my-package自动生成项目结构my-package/ ├── leno.toml # 包配置 ├── lib/ │ └── my-package.leno # 模块代码 ├── src/ │ └── main.leno # 入口文件 ├── native/ # 原生库 ├── examples/ # 示例 └── test/ # 测试编写模块// lib/my-package.leno export func hello() { print(Hello from my-package!) } export var VERSION 0.1.0 // 导出类型别名 export alias UserID int export alias StrList Array[string] // 导出 struct export struct Config { string host localhost int port 8080 } // 不加 export 私有外部不可见 func _internal() { return private }安装包# 安装本地包到全局缓存 leno --install my-package # 从 Git 仓库安装 leno --install gitee:user/my-package # 安装项目所有依赖读取 leno.toml leno --install使用包import my-package main() { my-package.hello() print(my-package.VERSION) }leno.toml 配置[package] name my-package version 0.1.0 description A Leno package license MIT [dependencies] http_client ~1.2.0 [dependency-sources] http_client gitee:user/http-client [modules] root lib运行测试# 运行断言测试 build/leno assert/run_tests.leno build/leno assert命令参考命令说明leno显示帮助信息leno file.leno运行 Leno 源码leno -c file.leno编译为.lenb字节码leno -p file.leno打包为独立 exeleno --init [name]创建包项目leno --install [path]安装包到全局缓存leno --install安装当前项目所有依赖leno_vm file.lenb运行字节码文件内置模块模块说明io输入输出maths数学函数arrays数组工具strings字符串工具dicts字典工具types类型操作times时间日期rands随机数files文件操作dirs目录操作jsonsJSON 编解码sockets网络套接字ffi外部函数接口cstructsC 结构体threads多线程asyncs异步协程regexs正则表达式sys系统信息assert断言测试项目结构LenoC/ ├── src/ │ ├── main.c # 编译器入口 │ ├── lexer.c # 词法分析 │ ├── ast.c # AST 定义 │ ├── parser/ # 语法解析 │ ├── semantic/ # 语义分析 │ ├── codegen/ # 字节码生成 │ ├── vm/ # 虚拟机 │ ├── optimize/ # 优化器 │ ├── gc.c # 垃圾回收 │ ├── bigint.c # 任意精度整数 │ ├── module/ # 内置模块 │ ├── package/ # 包管理 │ ├── object/ # 内置对象类型 │ └── platform/ # 平台相关 ├── assert/ # 测试用例 ├── examples/ # 示例代码 ├── docs/ # 文档 ├── build.bat / build.sh # 构建脚本 └── build_vm.bat / build_vm.sh # VM 构建脚本文档Leno 入门教程 — 语言完整语法参考含类型系统详解Import 使用指南 — 模块导入详解Async/Await 入门指南 — 异步编程FFI 使用指南 — 外部函数接口Threads 使用指南 — 多线程包管理与安装使用指南 — 包管理详解加密算法示例指南 — Base64 / AES / RSA / SHA 等纯 LenoC 实现性能优化记录 — 性能优化历史许可证MIT

相关新闻

深入Dev-C++:轻量级IDE的现代应用与高效调试技巧

深入Dev-C++:轻量级IDE的现代应用与高效调试技巧

1. 项目概述:为什么今天还要聊Dev-C?如果你是一位计算机专业的在校学生,或者是一位刚刚接触C/C编程的爱好者,那么“Dev-C”这个名字对你来说可能既熟悉又陌生。熟悉是因为在无数老旧的教材、网络教程,甚至是学校机房的…

2026/10/21 19:52:08 阅读更多 →
Java面试30天速成:高频考点、场景题与实战策略全解析

Java面试30天速成:高频考点、场景题与实战策略全解析

如果你正在准备Java面试,时间只剩一个月甚至更短,面对海量的八股文、复杂的场景题、以及从Java基础到Spring全家桶的庞杂知识体系,是不是感觉无从下手,甚至想放弃?别急,这篇文章就是为你准备的“邪修版”突…

2026/10/22 17:22:35 阅读更多 →
Jumpserver堡垒机部署与优化实战指南

Jumpserver堡垒机部署与优化实战指南

1. Jumpserver堡垒机部署概述Jumpserver作为国内广泛使用的开源堡垒机系统,已经成为企业IT基础设施安全管控的核心组件。不同于传统的商业堡垒机产品,Jumpserver凭借其开源特性、模块化设计和丰富的协议支持,能够满足从中小企业到大型集团的不…

2026/10/18 11:53:08 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/22 10:18:38 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/22 11:01:53 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/22 9:44:47 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/22 10:42:00 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/22 10:40:08 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/22 10:56:37 阅读更多 →

日新闻

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/22 1:47:45 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/21 21:32:28 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/22 5:12:39 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 21:50:56 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 21:51:55 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 16:24:48 阅读更多 →