




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
核心优势和核心竞争力庄晓立,北京,QCon2016liigo@22016-4-23新人分享新语言Rust版本Rust入实践三个月Rustv0.0byGraydonHoare2016年2006年2016年2015年bootstrapinRustbyMozillav0.1...v0.12byMozillav1.0...v1.82009年22009年Servo(webengine)v0.0...................................alphainRustCargo...Rustpkg...Cargov0.0...v0.2...v0.10系统编程+零运行时+内存安全系统编程+零运行时+内存安全 (应用领域)(运行效率)(系统安全)系统编程+零运行时+内存安全系统编程SystemsProgrammingSystemprogramming•Theprogrammerwillmakeassumptionsaboutthehardwareandotherpropertiesofthesystemthattheprogramrunson,andwilloftenexploitthoseproperties,forexamplebyusinganalgorithmthathardware.isknowntobeefficientwhenusedwithhardware.•Usuallyalow-levelprogramminglanguageorprogramminglanguagedialectisusedthat:•canoperateinresource-constrainedenvironments•isveryefficientandhaslittleruntimeoverhead•hasasmallruntimelibrary,ornoneatall•allowsfordirectand"raw"control•letstheprogrammerwritepartsoftheprogramdirectlyinassemblylanguage•Oftensystemsprogramscannotberuninadebugger.Runningtheprograminasimulatedenvironmentcansometimesbeusedtoreducethisproblem./wiki/System_programmingrneldriverrverOS重点项目&热门领域•大数据•云计算•物联网•航空航天•超级计算机•科学运算/机器学习•图形图像处理•虚拟现实……都有系统编程的身影数据中心靠谱力其他领域Web开发Java/其他领域Web开发Java/Php/Python/Js 嵌入式C/Rust面临极其强大的竞争对手系统编系统编程 (通俗地说)传统C/C++语言Rust=+内存安全(没有GC)传统VS现代现代C++尚在进化革新之中……RustV.S.传统C/C++CusttCCGCVM控制性C/控制性Java/Python/Ruby安全性RustV.S.现代C++(1x)相当ustCx历史包袱C……2x(路还很长)眼前的17,未来的C解有限系统编程小结•很多基础性的、平台性的大中型项目……程安全CC全方面有系统编程+零运行时+内存安全零运行时MinimalRuntimeOverhead零开销原则/zero-overheadprinciple•Whatyoudon'tuse,youdon'tpayfor•Whatyoudouse,youcouldn'thandcodeanybetterGCGC标配)•GC的优势:简化内存管理,基本保证内存安全•GC的劣势:运行时开销较大,占用CPU和内存较多•GC不能管理内存以外的其他资源(file/socket/stream)•在系统编程领域,GC的运行时开销几乎难以容忍•GC的终极目的是安全地释放内存•Rust通过Ownership和RAII也能达到此目的,且性能更好本次大会涉GC演讲•MonicaBeckwith《性能工程师指南:玩转OpenJDKHotSpot垃圾收集器》•庄振运《OS造成的长时间非典型JVMGC停顿:深度分析和解决》•陶春华《Golang在BaiduFrontEnd的应用》•俞育才《最优化Spark应用的性能—使用低成本的层次化方案加速大数据处理》……与其研究怎样优化GC、提高运行性能……不如考虑干掉GC,永绝后患泛泛型/Generics,静态分派traitRun{}}}TTraitObject,动态分派AUdQYkAUdefineinternalvoid@_ZN10static_run21h15769893599831004998Eunnamed_addr#0{}defineinternalvoid@_ZN10static_run21h11253382082138717288Eunnamed_addr#0{}//traitobject,fatpointer,vtalbe,虚函数http://is.gd/Q2YkAUDynamicdispatchdefineinternalvoid@_ZN11dynamic_run20h4365854efa082ca1RaaE(i8*nonnull,void(i8*)**nonnull)unnamed_addr#0{ckralloca{i8*,void(i8*)**}getelementptrinboundsi*,void(i8*)**},{i8*,void(i8*)**}*%r,i320,i320storeii%23=getelementptrinbounds{i8*,void(i8*)**},{i8*,void(i8*)**}*%r,i320,i321storevoid(i8*)**%1,void(i8*)***%3callvoidllvmdbgdeclaremetadatai*,void(i8*)**}*%r,metadata!40,metadata!34),!dbg!41getelementptrinboundsivoidi)**},{i8*,void(i8*)**}*%r,i320,i320,!dbg!42loadii8**%4,!dbg!42getelementptrinboundsivoidi)**},{i8*,void(i8*)**}*%r,i320,i321,!dbg!42loadvoidi)**,void(i8*)***%6,!dbg!42getelementptrinboundsvoidi,void(i8*)**%7,i323,!dbg!42loadvoidi)*,void(i8*)**%8,!dbg!42callvoidi),!dbg!42bg}___}defineinternalfastccvoid@_ZN4doit20h5077d4eddc5f4032eaaE(i8*nonnull)unnamed_addr#0{retvoid}http://is.gd/oJ2XcT}http://is.gd/9aZTCoeDebugstructMyData{inner:[u8;32],}structIterMut<'a>(...);impl<'a>IteratorforIterMut<'a>{...}}defineinternalfastccvoid@_ZN4doit20h73d357c5d419e850SbaE(%MyData*dereferenceable(32))unnamed_addr#3{entry-block:%1=getelementptrinbounds%MyData,%MyData*%0,i640,i320,i640callvoid@llvm.memset.p0i8.i64(i8*%1,i866,i6432,i321,i1false)retvoid零运行时小结ust协tCC小CC级上系统编程+零运行时+内存安全MemorySafety为什么强调内存安全?•……“心脏出血”漏洞(Heartbleed)重创全球IT行业LSGLIBCJAVAC漏洞GC能•在限定时间和空间范围内读写内存•防止被他人意外修改或释放•避免访问空指针和野指针•在恰当的时机释放•确保释放,不遗漏•仅释放一次内存内存http://is.gd/jEv35oMovebydefaultstructValue{x:i32,}fnmain(){letv=Value{x:1};foriin0..10{ }所有权转移TransferOwnership产权证OwnsOwnership(所有权)所有权转移TransferOwnership产权证Owns最后一任主人(所有者)负责把资源带入坟墓(销毁)Owns产权证产权证Move,OwnershippubstructVec<T>OwnershippubstructVec<T>{ptr:Unique<T>,cap:usize,len:usize,ptrn浅拷贝(ShallowCopy)附加Move语义栈(Stack)ptrnVeryVerybigdataintheheap...堆(Heap)变量(bindings)和资源(resources)的关系sthreads,...因为有“所有权转移”的存在:同一个资源可能由变量A持有或变量B持有;同一个变量可能持有资源也可能不持有资源;同一时刻有且只有一个变量唯一持有(Owns)某个资源。持有资源的变量超出作用域或被另赋新值时,自动调用资源析构函数(Drop),无论该资源在堆上还是栈上。Rust的RAII青出于蓝而胜于蓝(蓝=C++)(std::unique_ptr)BorrowingSharedborrow(多人共享/只Owners好好借好还再借不难我死之前必须还我&mutTMutableborrow(独家修改和使用权)timeaReferencerence}structFoo<'a,T:'a>{x:&'aT,}BorrowCheckerBorrowck是编译器内部组件,负责在“编译期”追踪审查引用的有效性,是保证内存安全的重要功臣。运行时零开销。}error:cannotborrow`v`asimmutablebecauseitisalsoborrowedasmutable[E0502]Borrowck是初学Rust的一大障碍,很多人都有与之抗争的经历,并最终受益http://is.gd/HVy7ykBorrowChecker}因为t将先于v被析构(这一点易被忽视)v的析构函数可能访问到无效的t引用!此处潜在的内存“不安全”代码没能逃过borrowck的法眼。http://is.gd/xDpaBQgletmuts=String::from("QCon");letx=&muts;//s.pushstr("2016");//error:cannotborrow`s`asmutable_//morethanonceatatime//s=String::new();//error:cannotassignto`s`//becauseitisborrowed//test1(s);//error:cannotmoveoutof`s`//becauseitisborrowed//test2(&s);//error:cannotborrow`s`asimmutable//becauseitisalsoborrowedasmutable_}NULL指针安全charmodeC语言无法从类型系统上区分有效指针和无效指针(NULL),却又习惯把NULL指针用作特殊标记(空缺的参数或返回值)。一旦程序员忽略NULL指针检查,往往会触发很严重的内存错
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年农村自建房施工合同模板
- 《建设用地分析与规划》课件
- 2025儿童教育行业销售劳动合同
- 《客户服务投诉处理》教学课件
- 2025年浙江宁波市奉化区人才发展有限公司招聘笔试参考题库附带答案详解
- 中班安全教育:不玩妈妈的化妆品
- 护理管理艺术
- 2025年雅安市交通建设(集团)有限责任公司招聘笔试参考题库含答案解析
- 企业合规考察课件
- 2025五指山市南圣镇社区工作者考试真题
- 2024年中国光大银行招聘考试真题
- 2025-2030中国油漆和涂料消光剂行业市场发展趋势与前景展望战略研究报告
- 《食品生产经营企业落实食品安全主体责任监督管理规定》解读与培训
- 广东省深圳市南山外国语学校等学校联考2023-2024学年七年级下学期期中数学试题
- 橙色黑板风小学生知识产权科普PPT模板
- 电网公司变电设备带电水冲洗作业实施细则
- 中国供销合作社标识使用手册课件
- Q∕CR 9218-2015 铁路隧道监控量测技术规程
- 甲状腺解剖及正常超声切面ppt课件
- 上海市城市地下空间建设用地审批及房地产登记试行规定
- 蠕墨铸铁项目可行性研究报告写作范文
评论
0/150
提交评论