费码程序猿 2024-01-11 14:31 采纳率: 100%
浏览 8
已结题

rust未来的前景怎么样

微软宣布使用rust重构部分c++项目, linux也支持rust编写内核,未来rust前景怎么样

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2024-01-11 16:13
    关注

    【相关推荐】



    • 关于该问题,我找了一篇非常好的博客,你可以看看是否有帮助,链接:Linux Rust环境安装
    • 除此之外, 这篇博客: Rust linux 系统接口使用中的 首先实验C 代码和 Rust的 接口访问 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

      linux 默认的命名规则就是 蛇形命名规则
      Cargo.toml

      [package]
      name = "ArmTest"
      version = "0.1.0"
      edition = "2021"
      build = "src/build.rs" 
      # 需要使用的build.rs 的路径必须要有
      # 我是放到cargo 工程里面的 src 路径里了
      
      [dependencies]
      clib="^0.2.1" 
      # linux api crate lib
      dunce="0.1.1" 
      #这个也是build 要使用的crate lib
      
      [build-dependencies]
      cc = {version = "1.0.72",features=["parallel"]} 
      #buid 的依赖,根据这个些就行
      

      对unsafe 的引入,需要重新改写C接口以供使用
      在不安全的情况下保证安全
      build.rs

      fn main(){
      		//这个file 是要引用的.c 文件的路径,会将其转化为Rust声明
          cc::Build::new().file("/home/hongdayu/arm/Clib/libcuser.c").compile("user");
          //如果发现该.c 文件发生变化,还会重新编译,这个在实际中的用处很大
          println!("cargo:return-if-changed=/home/hongdayu/arm/Clib/libcuser.c");
      }
      

      main.rs

      use std::os::raw::c_int;
      
      extern "C"{
          pub fn debug(mask: c_int) -> c_int; 
      }
      
      // 如果你使用的话,不需要对他初始化,否则还有告警,这是编码习惯的约束
      // 注意蛇形命名,要不然会有默认的告警产生
      fn main() {  
          let mut res: i32; 
          unsafe{ //unsafe 作用域,将引入的C函数,代码约束,保证安全性
              res = debug(1);
              print!("res: {}\n",res);
              res = debug(2);
              print!("res: {}\n",res);
          }
          let unsafe_ask = res.to_string();
          print!("unsafe_ask: {}",unsafe_ask);
      }
      

      use_lib.c

      #include<stdio.h>
      #include<stdint.h>
      
      
      int debug(int mask){
      	if(mask == 1){
      	   printf("Arm board: Hello Rust\n");
      	   return 0;
      	}
      
      	if(mask == 2){
      	   printf("Oh My God: Rust ???\n");
      	   return 0;
      	}
      	return -1;
      }
      
      

      结果如下图所示:

      hongdayu@linux:~/arm/Rust/ArmTest/target/debug$ ./ArmTest 
      Arm board: Hello Rust
      res: 0
      Oh My God: Rust ???
      res: 0
      hongdayu@linux:~/arm/Rust/ArmTest/target/debug$ 
      

      这只是一个简单的示例,指针,最好使用智能指针转化一下, 我还没试过,慢慢来


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月20日
  • 已采纳回答 1月12日
  • 创建了问题 1月11日

悬赏问题

  • ¥15 c++ gmssl sm2验签demo
  • ¥15 关于模的完全剩余系(关键词-数学方法)
  • ¥15 有没有人懂这个博图程序怎么写,还要跟SFB连接,真的不会,求帮助
  • ¥15 关于移动机器人坐标计算
  • ¥30 模拟电路 logisim
  • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音