属性系统
属性定义
属性是编译器指令,使用@[]
语法放置在声明前,用于修改函数/结构体/枚举的行为特征。
枚举属性
- 位域标记:
@[flag] // 启用位运算特性
enum Permission {
read // 1 << 0
write // 1 << 1
execute // 1 << 2
}
// 位操作示例
perm := Permission.read | .write
println(perm.has(.read)) // true
- 允许多重值:
@[_allow_multiple_values] // 谨慎使用
enum Color {
red = 1
blue = 2
crimson = 1 // 允许重复值
}
结构体属性
struct User {
id int
@[deprecated: '改用username字段'] // 废弃提示
@[deprecated_after: '2025-01-01'] // 截止日期
login string
}
函数属性
内存管理:
@[heap] // 强制堆分配
struct Window { width int; height int }
@[manualfree] // 禁用autofree
fn custom_memory() { /* 手动内存管理 */ }
@[keep_args_alive] // GC保持参数存活
fn C.external_fn(ptr voidptr, size int)
代码优化:
@[inline] // 强制内联
fn hot_path() {}
@[noinline] // 禁止内联
fn cold_path() {}
@[noreturn] // 永不返回
fn infinite_loop() { for {} }
安全控制:
@[unsafe] // 需在unsafe块调用
fn low_level() {
// 安全检查代码...
unsafe {
// 非安全操作(指针运算等)
}
// 后续安全检查...
}
@[must_use] // 必须使用返回值
fn create_resource() !Resource {}
平台特性:
@[console] // Windows强制控制台
fn main() { println("始终显示控制台") }
@[callconv: 'stdcall'] // 指定调用约定
fn winapi_callback(hwnd int, msg u32)
C交互属性
@[c_extern] // C外部定义
__global c_lib C.MyLib
@[weak] // 弱符号声明
__global temp_var int
@[typedef] // C类型定义
pub struct C.FILE {}
版本迁移提示
- 废弃声明包含消息和日期更友好
- 设置合理的时间线(推荐30-90天过渡期)
- 重大变更需社区讨论达成共识