当前位置: 首页 > news >正文

企业建设H5响应式网站的5大好处镇江本地网

企业建设H5响应式网站的5大好处,镇江本地网,怎么找做网站的,网站站点结构图原文 为了与其他语言通信,Rust提供了(FFI)外部函数接口.FFI是Rust和C间的函数调用,与C函数调用有相同性能的零成本抽象. FFI绑定还可利用(如所有权和借用)语言功能来提供强制指针和其他资源协议的安全接口. Rust与C对话 从Rust调用C代码的简单示例开始.如下为C代码: int do…原文 为了与其他语言通信,Rust提供了(FFI)外部函数接口.FFI是Rust和C间的函数调用,与C函数调用有相同性能的零成本抽象. FFI绑定还可利用(如所有权和借用)语言功能来提供强制指针和其他资源协议的安全接口. Rust与C对话 从Rust调用C代码的简单示例开始.如下为C代码: int double_input(int input) {return input * 2; }要从Rust调用它,可如下编写程序: extern crate libc; //外部仓库. extern {fn double_input(input: libc::c_int) - libc::c_int;//写签名. } fn main() {let input 4;let output unsafe { double_input(input) };//不安全中调用.println!({} * 2 {}, input, output); }就这样!在源码级,除了声明签名外,就行了. 但有些细节: 首先,看到extern crate libc.此libc仓库在与C语言通信时,为FFI绑定提供了许多有用的类型定义,且确保C和Rust在跨语言边界类型上保持一致. 再看: extern {fn double_input(input: libc::c_int) - libc::c_int; }在Rust中,这是外部可用函数的声明.可按C头文件对待.这里编译器要了解函数的输入和输出,可在上面看到,这与C中定义匹配. 接着,程序主体: fn main() {let input 4;let output unsafe { double_input(input) };println!({} * 2 {}, input, output); }在此看到了Rust中FFI的关键方面,即不安全块.编译器对double_input的实现一无所知,因此它必须假设调用外部函数时,都可能内存不安全. 再看看是否可验证零成本. 为了了解Rust做了什么,直接进入上述main函数对double_input调用的汇编代码: mov $0x4,%edi callq 3bc30 double_input如前,就是这样!在此可见,把参数移动到位后,从Rust调用C函数恰好涉及一个调用指令,这与C语言中的成本完全相同. 安全抽象 在Rust中绑定C库时,不仅是零成本,还可比C更安全! 如,考虑解析tarball的C库.该库公开取读tarball中每个文件内容的函数,可能如下: //在tarball中,在给定索引处,取文件的数据,如果不存在该文件,则返回NULL.如果成功,用文件大小填充,size指针. const char *tarball_file_data(tarball_t *tarball, unsigned index, size_t *size);但是,此函数假定返回的char*指针生命期不超过输入的tarball.绑定到Rust中时,此API可能如下: pub struct Tarball { raw: *mut tarball_t } impl Tarball {pub fn file(self, index: u32) - Option[u8] {unsafe {let mut size 0;let data tarball_file_data(self.raw, index as libc::c_uint, mut size);if data.is_null() {None} else {Some(slice::from_raw_parts(data as *const u8, size as usize))}}} }这里的*mut tarball_t指针,由Tarball所有,并由它负责析构和清理. 此外,file方法返回生命期隐式与源tarball自身生命期相关联(self参数)的借用切片. 这是Rust指示,只能在tarball的生命期内使用返回的slice,静态避免了直接使用C时易产生的悬挂针错误. 因为Rust的静态检查,使用Rust端的API根本不可能造成段错误.所有这些都是零成本的:无额外分配或成本,可在Rust中表示C语言中的原始类型. Rust令人惊叹的社区,已围绕现有的C库构建了一些实质性的安全绑定,包括OpenSSL,libgit2,libdispatch,libcurl,sdl2,UnixAPI和libsodium. 1 2 3 4 5 6 7 更多. C语言与Rust对话 零成本FFI不仅适合Rust调用C,也适合C调用Rust! 首先,从Rust代码开始: #[no_mangle] pub extern fn double_input(input: i32) - i32 {input * 2 }与之前Rust代码一样,首先,用#[no_mangle]属性标记了函数定义. 指示编译器不要装饰double_input函数的符号名.Rust使用类似C混杂名来确保库名不会相互冲突. extern,可与C函数兼容.编译为lib文件,而不是rlib库. #include stdint.h #include stdio.h extern int32_t double_input(int32_t input); int main() {int input 4;int output double_input(input);printf(%d * 2 %d\n, input, output);return 0; }Rust没有垃集和运行时,因此实现了从C到Rust的无缝过渡.外部C代码不需要安装Rust执行设置,使得过渡成本非常低.
http://www.hkea.cn/news/14551127/

相关文章:

  • 江门网站建设公司网站轮播效果怎么做
  • 上海网站制作的费用做a高清视频在线观看网站
  • 网站建设开发报价方案模板网页设计制作实训总结
  • 阿里云做网站的哪家公司提供专业的网站建设
  • 百度云虚拟主机如何建设网站东莞感染人数最新消息
  • 网站建设开发报价单天津关键词优化网站
  • 3d建模在线制作网站10大工程必备软件
  • 广西钦州住房与城乡建设局网站男女做污污的网站
  • 上海企业网站建设公司哪家好什么网站可以做软件有哪些内容吗
  • 怎样建立一个企业网站长沙柒零叁网站建设
  • 网站建设百灵鸟企业网站素材
  • 长沙网站制作主要公司网店代运营被骗怎么追回
  • wordpress搬站换空间赣州市九一人才网手机版
  • 如何做好网站需求分析平板做网站服务器
  • 开发高端网站开发网络技术服务是干什么的
  • 深圳做分销网站建设光纤网络是哪个公司的
  • 新乡建设网站公司手机网站怎么做才适合优化
  • 网站做seo推广 s手机网站设计公司只选亿企邦
  • 制作一个学校门户网站泉州网站建站模板
  • 公司网站设计需要什么个人网站可以挂广告吗
  • 沈阳响应式网站建设sirna在线设计网站
  • 欧卡乐网站建设初期网站价值
  • 织梦网做网站过程猎头可以做单的网站
  • 网站管理系统怎么做淄博网站建设高端企业
  • seo网站快速排名外包wordpress 导出主题
  • 设计最简单的企业网站wordpress微博挂件
  • 忻州做网站饲料行业建设网站方案设计免费下载ppt
  • 一个网站成本公司注册地址怎么查
  • 璧山职教中心示范校建设网站注册公司100万实缴多少
  • 手表网站模板动漫网页设计图片