展示 HN: Tiny – 一种内嵌 Go 原生功能的解释型动态语言
Tiny 是一个高性能的并发字节码虚拟机和用 Go 编写的语言。Tiny 将动态编码的开发速度与稳健的多线程运行时引擎相结合。Tiny 是一种并发编程语言和运行时系统。它将源文件编译成紧凑的基于栈的字节码指令(.tbc),这些指令在使用基于槽的本地存储的高度优化的虚拟机上运行。运行时引擎具有多层执行模型:一个用于通用逻辑的高效解释器和一个用于性能关键代码的即时编译器 (JIT)。主要特性包括直接的操作系统级并行线程、主机镜像的打包数组、可链式的模式验证库、原生 WebAssembly 扩展以及内置的语言服务器 (LSP)。完整文档请访问 tiny-lang-docs.github.io,或查看示例以观察 Tiny 的实际应用。安装预编译的二进制文件可在发行页面上获取: Windows: tiny_windows_amd64.exe Linux: tiny_linux_amd64 macOS (Apple Silicon): tiny_darwin_arm64 安装步骤:下载适合你操作系统的二进制文件。将文件重命名为 tiny(或在 Windows 上为 tiny.exe)。将二进制文件移入你系统路径中的一个目录(例如,在 Unix 上为 ~/.tiny/bin,或在 Windows 上为 %USERPROFILE%\.tiny)。将该目录添加到你的系统 PATH 环境变量中。有关从源代码编译的说明,请参见在线文档。语言规范动态类型与可选提示Tiny 默认情况下是动态类型的。你可以编写未类型代码进行快速原型制作,或者对变量、参数和函数返回值应用可选的静态类型提示。类型系统支持联合和泛型。 import std "io" ; // 未类型变量 let data = "untyped string" ; // 显式类型变量 const port : number = 8080 ; // 类型函数参数与返回类型 fn calculatePayout ( base : number , multiplier : number ) : number { return base * multiplier ; } io . println ( calculatePayout ( 100 , 1.5 ) ) ; 结构接口与形状验证 Tiny 使用结构类型(基于形状的验证)。对象在运行时根据其属性和方法与接口进行验证。JIT 引擎通过跟踪对象形状并利用线性内存字段偏移来优化这些检查。 import std "io" ; interface Task { title : string done : bool } fn printTask ( t : Task ) { let status = t . done ? "已完成" : "待处理" ; io . println ( ` ${ t . title } - 状态: ${ status } ` ) ; } // 有效结构匹配 printTask ( { title : "写编译器测试" , done : true } ) ; printTask ( { title : "优化VM调度器" , done : false , priority : 1 } ) ; 解构赋值 Tiny 支持对象和数组的解构赋值,适用于 let 和 const 声明。这包括对嵌套模式、默认值和属性重命名的支持。 import std "io" ; const user = { name : "Alice" , age : 30 , address : { city : "NYC" , zip : "10001" } } ; // 对象解构赋值和重命名、嵌套 let { name , address : { city } } = user ; io . println ( ` ${ name } 住在 ${ city } ` ) ; // 数组解构赋值 let coordinates = [ 10.5 , 20.8 , 30.0 ] ; let [ x , y ] = coordinates ; io . println ( `X: ${ x } , Y: ${ y } ` ) ; 类组合与嵌入 Tiny 强调组合而不是深层继承。embed 关键字允许类将行为委托给另一个类实例。如果父类缺少某个方法或字段,它会自动从嵌入的实例中解析。 import std "io" ; import std "json" ; class Logger { field messages = [ ] fn log ( message : string ) { this . messages . push ( message ) ; io . println ( `日志: ${ message } ` ) ; } fn dump ( ) { return this . messages ; } } class SessionManager { field active = true embed logger fn init ( ) { this . active = true ; this . logger = Logger ( ) ; // 调用嵌入类的方法 this . log ( "会话管理器已初始化" ) ; } fn close ( ) { this . active = false ; this . log ( "会话关闭" ) ; } } let session = SessionManager ( ) ; session . close ( ) ; // 直接调用嵌入的 Logger.dump 方法 io . println ( json . pretty ( session . dump ( ) ) ) ; 模式匹配 match 块提供分支调度,支持字面量值、变量、枚举、联合模式和保护。这是从枚举变体中提取数据的主要方式。 import std "io" ; enum Result { Ok ( value : any ) , Error ( message : string ) } fn process ( res : Result ) { match res { Result . Ok ( val ) if val > 0 { io . println ( `成功: ${ val } ` ) ; } Result . Ok ( val ) { io . println ( "成功,但值为零或负值" ) ; } Result . Error ( msg ) { io . println ( `错误: ${ msg } ` ) ; } _ { io . println ( "未知状态" ) ; } } } process ( Result . Ok ( 42 ) ) ; 使用 Defer 进行作用域清理 defer 语句调度函数调用将在当前周围函数作用域退出之前立即执行,无论早期返回或。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡