#![no_std]
属性禁用标准库自动引用(Rust将引入core
库替代)
eh_personality语言项是一些编译器需求的特殊函数或类型
Copy
trait的实现时,我们会发现,一个特殊的 #[lang = "copy"]
属性将它定义为了一个语言项,达到与编译器联系的目的eh_personality
语言项标记的函数,将被用于实现栈展开(stack unwinding)
Rust 提供了在 panic 时中止(abort on panic)的选项
// 通过在Cargo.toml文件中加入
[profile.dev]
panic = "abort"
[profile.release]
panic = "abort"
abort
dev
配置适用于 cargo build
,而 release
配置适用于 cargo build --release
start
语言项,它将定义一个程序的入口点(entry point)
crt0
(C runtime zero)的运行时库开始的
重写整个 crt0
库和它定义的入口点
#![no_main]
属性告诉Rust编译器我们不使用预定义的入口点
编写一个 _start
函数
#[no_mangle]
pub extern "C" fn _start() -> ! {
loop {}
}
no_mangle
标记这个函数,来对它禁用名称重整(name mangling)
_start
的函数_ZN3blog_os4_start7hb173fedf945531caE
的函数,无法让链接器正确辨别extern "C"
,告诉编译器这个函数应当使用 C 语言的调用约定,而不是 Rust语言的调用约定这个入口点不会被任何函数调用,但将直接被操作系统或引导程序(bootloader)调用