两个不依赖 core 和 std 库的简单 Rust 程序

本文介绍了两个使用 Rust Nightly 编译器编写的不依赖 core 和 std 库的简单程序。第一个是经典的 'Hello, world!' 示例,第二个程序则按特定格式输出程序名及命令行参数。" 113313172,10539831,Mysql锁机制解析:共享锁、排他锁与悲观锁、乐观锁,"['数据库理论', '数据结构', '算法']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注意:编译本文代码需要最新 Rust Nightly 编译器。

1. Hello, world!
#![feature(intrinsics, lang_items, no_core)]
#![no_core]
#![no_main]

#[lang = "copy"]
trait Copy {}

#[lang = "sized"]
trait Sized {}

#[cfg_attr(unix, link(name = "c"))]
extern "C" {
    fn puts(s: *const u8) -> i32;
}

extern "rust-intrinsic" {
    fn transmute<T, U>(x: T) -> U;
}

#[cfg(all(windows, target_env = "gnu"))]
pub mod eh_frame_registry
{
    #[no_mangle]
    pub extern "C" fn rust_eh_register_frames() {}

    #[no_mangle]
    pub extern "C" fn rust_eh_unregister_frames() {}
}

#[no_mangle]
pub extern "C" fn main() -> i32 {
    unsafe {
        puts(transmute::<_, (_, usize)>("Hello, world!\0").0);
    }

    0
}

Rust Playground: https://play.rust-lang.org/?gist=2ea96360b430e9e65516f680cc2b2f8f&version=nightly&backtrace=0
Gist: https://gist.github.com/2ea96360b430e9e65516f680cc2b2f8f

2. 按照“[序号]\t”参数””的格式逐行输出程序名和命令行参数
#![feature(intrinsics, lang_items, no_core)]
#![no_core]
#![no_main]

#[lang = "copy"]
trait Copy {}

#[lang = "ord"]
trait PartialOrd<Rhs: ?Sized = Self> {
    fn lt(&self, other: &Rhs) -> bool;
}

#[lang = "sized"]
trait Sized {}

impl PartialOrd for i32 {
    #[inline]
    fn lt(&self, other: &Self) -> bool {
        *self < *other
    }
}

#[cfg_attr(unix, link(name = "c"))]
extern "C" {
    #[cfg_attr(all(windows, target_env = "gnu"), link_name = "__mingw_printf")]
    fn printf(f: *const u8, ...) -> i32;
}

extern "rust-intrinsic" {
    fn add_with_overflow<T>(x: T, y: T) -> (T, bool);
    fn offset<T>(dst: *const T, offset: isize) -> *const T;
    fn transmute<T, U>(x: T) -> U;
}

#[cfg(all(windows, target_env = "gnu"))]
pub mod eh_frame_registry {
    #[no_mangle]
    pub extern "C" fn rust_eh_register_frames() {}

    #[no_mangle]
    pub extern "C" fn rust_eh_unregister_frames() {}
}

#[no_mangle]
pub extern "C" fn main(argc: i32, argv: *const *const u8) -> i32 {
    let mut i = 0i32;

    unsafe {
        while i < argc {
            printf(transmute::<_, (_, usize)>("[%d]\t\"%s\"\n\0").0,
                   i,
                   *offset(argv, i as _));
            i = add_with_overflow(i, 1).0;
        }
    }

    0
}

Rust Playground: https://play.rust-lang.org/?gist=d3f790523c17bff89b5a979809c9cd96&version=nightly&backtrace=0
Gist: https://gist.github.com/d3f790523c17bff89b5a979809c9cd96

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值