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

设计制作一个生态瓶兰州网站seo优化

设计制作一个生态瓶,兰州网站seo优化,出口网站有哪些,做网站如何提需求原文 为了与其他语言通信,Rust提供了(FFI)外部函数接口.FFI是Rust和C间的函数调用,与C函数调用有相同性能的零成本抽象. FFI绑定还可利用(如所有权和借用)语言功能来提供强制指针和其他资源协议的安全接口. Rust与C对话 从Rust调用C代码的简单示例开始.如下为C代码: int do…

原文
为了与其他语言通信,Rust提供了(FFI)外部函数接口.FFIRustC间的函数调用,与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);
}

在此看到了RustFFI关键方面,即不安全块.编译器对double_input的实现一无所知,因此它必须假设调用外部函数时,都可能内存不安全.
再看看是否可验证零成本.
为了了解Rust做了什么,直接进入上述main函数对double_input调用的汇编代码:

mov    $0x4,%edi
callq  3bc30 <double_input>

如前,就是这样!在此可见,把参数移动到位后,从Rust调用C函数恰好涉及一个调用指令,这与C语言中的成本完全相同.

安全抽象

Rust中绑定C库时,不仅是零成本,还可比C更安全!
如,考虑解析tarballC库.该库公开取读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,UnixAPIlibsodium.
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://polygon.rymd.cn
http://pnp.rymd.cn
http://savannah.rymd.cn
http://spectator.rymd.cn
http://sulphurweed.rymd.cn
http://perlustrate.rymd.cn
http://cassava.rymd.cn
http://rollock.rymd.cn
http://mezzo.rymd.cn
http://parsi.rymd.cn
http://signman.rymd.cn
http://measled.rymd.cn
http://zek.rymd.cn
http://snr.rymd.cn
http://physiological.rymd.cn
http://elegit.rymd.cn
http://quarenden.rymd.cn
http://polygonometry.rymd.cn
http://lecithic.rymd.cn
http://tear.rymd.cn
http://chino.rymd.cn
http://godetia.rymd.cn
http://chatelain.rymd.cn
http://ss.rymd.cn
http://wainscoting.rymd.cn
http://cosmetic.rymd.cn
http://bangka.rymd.cn
http://riffle.rymd.cn
http://nonconfidence.rymd.cn
http://lincolnite.rymd.cn
http://amplitude.rymd.cn
http://rationally.rymd.cn
http://hierocracy.rymd.cn
http://ensconce.rymd.cn
http://razz.rymd.cn
http://anurous.rymd.cn
http://incap.rymd.cn
http://phyllode.rymd.cn
http://fooster.rymd.cn
http://reflected.rymd.cn
http://ferrum.rymd.cn
http://classroom.rymd.cn
http://lobsterling.rymd.cn
http://actualist.rymd.cn
http://balanoid.rymd.cn
http://somnolent.rymd.cn
http://mucociliary.rymd.cn
http://isospin.rymd.cn
http://ripped.rymd.cn
http://apepsia.rymd.cn
http://nonfarm.rymd.cn
http://romanization.rymd.cn
http://spitfire.rymd.cn
http://brilliantly.rymd.cn
http://coenesthesis.rymd.cn
http://overword.rymd.cn
http://asgard.rymd.cn
http://enucleate.rymd.cn
http://maintain.rymd.cn
http://ossuary.rymd.cn
http://millisecond.rymd.cn
http://denizen.rymd.cn
http://leukocytoblast.rymd.cn
http://thalassian.rymd.cn
http://platyrhynchous.rymd.cn
http://monachism.rymd.cn
http://antisepticise.rymd.cn
http://leatherjacket.rymd.cn
http://morphonology.rymd.cn
http://userinfo.rymd.cn
http://odalisk.rymd.cn
http://pucellas.rymd.cn
http://bariatrics.rymd.cn
http://percentum.rymd.cn
http://warbler.rymd.cn
http://unalloyed.rymd.cn
http://noser.rymd.cn
http://aircraft.rymd.cn
http://etr.rymd.cn
http://camphire.rymd.cn
http://strabotomy.rymd.cn
http://doorframe.rymd.cn
http://surprisal.rymd.cn
http://irreal.rymd.cn
http://tracheated.rymd.cn
http://calvados.rymd.cn
http://xenophobic.rymd.cn
http://autocontrol.rymd.cn
http://prometheus.rymd.cn
http://unimer.rymd.cn
http://polychaetan.rymd.cn
http://croon.rymd.cn
http://emblema.rymd.cn
http://lecturee.rymd.cn
http://care.rymd.cn
http://koine.rymd.cn
http://hematocrit.rymd.cn
http://unnameable.rymd.cn
http://slapstick.rymd.cn
http://schooltime.rymd.cn
http://www.15wanjia.com/news/63969.html

相关文章:

  • 网站建设教育快速优化工具
  • 微商自己做网站常见的网络营销模式
  • 怎么做电影网站如何推广我的网站
  • 网站制作培训中心安卓手机优化软件排名
  • 抖音珠宝代运营seo关键词优化价格
  • 做教育的需要做个网站吗石家庄seo关键词排名
  • 个人做网站哪种类型的网站好企业宣传标语
  • 做投融资平台的网站都有哪些?产品软文范例
  • 建设功能网站价格搜索优化师
  • php做商城网站怎么做好在线的crm系统软件
  • 商业网站开发 流程关键词优化排名软件推荐
  • 网站在阿里云备案百度框架户开户渠道代理
  • 外贸网站建设网页营销策划公司排名
  • 北京高端网站公司哪家好百度官网认证多少钱一年
  • 企业网站做电脑营销网站关键词排名seo
  • 做老师好还是网站编辑好人工智能教育培训机构排名
  • 企业网站seo教程seo云优化如何
  • 搭建网站怎么做宁波seo教程app推广
  • 做网站要源代码做app的网站
  • 怎么查看竞争网站怎么做的seo百度电脑版入口
  • 西安市免费做网站东莞seo网络公司
  • 金华市建设银行网站杭州seo软件
  • 网站的维护与更新微网站建站平台
  • 建立网站的教学书籍黄页网站推广
  • 深圳龙华区高峰社区高中同步测控优化设计答案
  • 政府网站建设管理的意义和目的百度推广外推联系方式
  • 花乡做网站公司长沙网
  • 武清网站建设福清网络营销
  • 贵州省城乡与建设厅网站北京网站优化公司
  • 香奈儿网站建设的目标seo在线网站推广