属性系统

属性定义

属性是编译器指令,使用@[]语法放置在声明前,用于修改函数/结构体/枚举的行为特征。

枚举属性

  1. 位域标记
@[flag]  // 启用位运算特性
enum Permission {
    read    // 1 << 0
    write   // 1 << 1
    execute // 1 << 2
}

// 位操作示例
perm := Permission.read | .write
println(perm.has(.read))  // true
  1. 允许多重值
@[_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天过渡期)
  • 重大变更需社区讨论达成共识