3-2-Rust語言核心競爭力-莊曉立_第1頁
3-2-Rust語言核心競爭力-莊曉立_第2頁
3-2-Rust語言核心競爭力-莊曉立_第3頁
3-2-Rust語言核心競爭力-莊曉立_第4頁
3-2-Rust語言核心競爭力-莊曉立_第5頁
已閱讀5頁,還剩85頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

核心優(yōu)勢和核心競爭力莊曉立,北京,QCon2016liigo@22016-4-23新人分享新語言Rust版本Rust入實(shí)踐三個(gè)月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系統(tǒng)編程+零運(yùn)行時(shí)+內(nèi)存安全系統(tǒng)編程+零運(yùn)行時(shí)+內(nèi)存安全 (應(yīng)用領(lǐng)域)(運(yùn)行效率)(系統(tǒng)安全)系統(tǒng)編程+零運(yùn)行時(shí)+內(nèi)存安全系統(tǒng)編程SystemsProgrammingSystemprogramming?Theprogrammerwillmakeassumptionsaboutthehardwareandotherpropertiesofthesystemthattheprogramrunson,andwilloftenexploitthoseproperties,forexamplebyusinganalgorithmthathardware.isknowntobeefficientwhenusedwithhardware.?Usuallyalow-levelprogramminglanguageorprogramminglanguagedialectisusedthat:?canoperateinresource-constrainedenvironments?isveryefficientandhaslittleruntimeoverhead?hasasmallruntimelibrary,ornoneatall?allowsfordirectand"raw"control?letstheprogrammerwritepartsoftheprogramdirectlyinassemblylanguage?Oftensystemsprogramscannotberuninadebugger.Runningtheprograminasimulatedenvironmentcansometimesbeusedtoreducethisproblem./wiki/System_programmingrneldriverrverOS重點(diǎn)項(xiàng)目&熱門領(lǐng)域?大數(shù)據(jù)?云計(jì)算?物聯(lián)網(wǎng)?航空航天?超級計(jì)算機(jī)?科學(xué)運(yùn)算/機(jī)器學(xué)習(xí)?圖形圖像處理?虛擬現(xiàn)實(shí)……都有系統(tǒng)編程的身影數(shù)據(jù)中心靠譜力其他領(lǐng)域Web開發(fā)Java/其他領(lǐng)域Web開發(fā)Java/Php/Python/Js 嵌入式C/Rust面臨極其強(qiáng)大的競爭對手系統(tǒng)編系統(tǒng)編程 (通俗地說)傳統(tǒng)C/C++語言Rust=+內(nèi)存安全(沒有GC)傳統(tǒng)VS現(xiàn)代現(xiàn)代C++尚在進(jìn)化革新之中……RustV.S.傳統(tǒng)C/C++CusttCCGCVM控制性C/控制性Java/Python/Ruby安全性RustV.S.現(xiàn)代C++(1x)相當(dāng)ustCx歷史包袱C……2x(路還很長)眼前的17,未來的C解有限系統(tǒng)編程小結(jié)?很多基礎(chǔ)性的、平臺性的大中型項(xiàng)目……程安全CC全方面有系統(tǒng)編程+零運(yùn)行時(shí)+內(nèi)存安全零運(yùn)行時(shí)MinimalRuntimeOverhead零開銷原則/zero-overheadprinciple?Whatyoudon'tuse,youdon'tpayfor?Whatyoudouse,youcouldn'thandcodeanybetterGCGC標(biāo)配)?GC的優(yōu)勢:簡化內(nèi)存管理,基本保證內(nèi)存安全?GC的劣勢:運(yùn)行時(shí)開銷較大,占用CPU和內(nèi)存較多?GC不能管理內(nèi)存以外的其他資源(file/socket/stream)?在系統(tǒng)編程領(lǐng)域,GC的運(yùn)行時(shí)開銷幾乎難以容忍?GC的終極目的是安全地釋放內(nèi)存?Rust通過Ownership和RAII也能達(dá)到此目的,且性能更好本次大會涉GC演講?MonicaBeckwith《性能工程師指南:玩轉(zhuǎn)OpenJDKHotSpot垃圾收集器》?莊振運(yùn)《OS造成的長時(shí)間非典型JVMGC停頓:深度分析和解決》?陶春華《Golang在BaiduFrontEnd的應(yīng)用》?俞育才《最優(yōu)化Spark應(yīng)用的性能—使用低成本的層次化方案加速大數(shù)據(jù)處理》……與其研究怎樣優(yōu)化GC、提高運(yùn)行性能……不如考慮干掉GC,永絕后患泛泛型/Generics,靜態(tài)分派traitRun{}}}TTraitObject,動態(tài)分派AUdQYkAUdefineinternalvoid@_ZN10static_run21h15769893599831004998Eunnamed_addr#0{}defineinternalvoid@_ZN10static_run21h11253382082138717288Eunnamed_addr#0{}//traitobject,fatpointer,vtalbe,虛函數(shù)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零運(yùn)行時(shí)小結(jié)ust協(xié)tCC小CC級上系統(tǒng)編程+零運(yùn)行時(shí)+內(nèi)存安全MemorySafety為什么強(qiáng)調(diào)內(nèi)存安全??……“心臟出血”漏洞(Heartbleed)重創(chuàng)全球IT行業(yè)LSGLIBCJAVAC漏洞GC能?在限定時(shí)間和空間范圍內(nèi)讀寫內(nèi)存?防止被他人意外修改或釋放?避免訪問空指針和野指針?在恰當(dāng)?shù)臅r(shí)機(jī)釋放?確保釋放,不遺漏?僅釋放一次內(nèi)存內(nèi)存http://is.gd/jEv35oMovebydefaultstructValue{x:i32,}fnmain(){letv=Value{x:1};foriin0..10{ }所有權(quán)轉(zhuǎn)移TransferOwnership產(chǎn)權(quán)證OwnsOwnership(所有權(quán))所有權(quán)轉(zhuǎn)移TransferOwnership產(chǎn)權(quán)證Owns最后一任主人(所有者)負(fù)責(zé)把資源帶入墳?zāi)?銷毀)Owns產(chǎn)權(quán)證產(chǎn)權(quán)證Move,OwnershippubstructVec<T>OwnershippubstructVec<T>{ptr:Unique<T>,cap:usize,len:usize,ptrn淺拷貝(ShallowCopy)附加Move語義棧(Stack)ptrnVeryVerybigdataintheheap...堆(Heap)變量(bindings)和資源(resources)的關(guān)系sthreads,...因?yàn)橛小八袡?quán)轉(zhuǎn)移”的存在:同一個(gè)資源可能由變量A持有或變量B持有;同一個(gè)變量可能持有資源也可能不持有資源;同一時(shí)刻有且只有一個(gè)變量唯一持有(Owns)某個(gè)資源。持有資源的變量超出作用域或被另賦新值時(shí),自動調(diào)用資源析構(gòu)函數(shù)(Drop),無論該資源在堆上還是棧上。Rust的RAII青出于藍(lán)而勝于藍(lán)(藍(lán)=C++)(std::unique_ptr)BorrowingSharedborrow(多人共享/只Owners好好借好還再借不難我死之前必須還我&mutTMutableborrow(獨(dú)家修改和使用權(quán))timeaReferencerence}structFoo<'a,T:'a>{x:&'aT,}BorrowCheckerBorrowck是編譯器內(nèi)部組件,負(fù)責(zé)在“編譯期”追蹤審查引用的有效性,是保證內(nèi)存安全的重要功臣。運(yùn)行時(shí)零開銷。}error:cannotborrow`v`asimmutablebecauseitisalsoborrowedasmutable[E0502]Borrowck是初學(xué)Rust的一大障礙,很多人都有與之抗?fàn)幍慕?jīng)歷,并最終受益http://is.gd/HVy7ykBorrowChecker}因?yàn)閠將先于v被析構(gòu)(這一點(diǎn)易被忽視)v的析構(gòu)函數(shù)可能訪問到無效的t引用!此處潛在的內(nèi)存“不安全”代碼沒能逃過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語言無法從類型系統(tǒng)上區(qū)分有效指針和無效指針(NULL),卻又習(xí)慣把NULL指針用作特殊標(biāo)記(空缺的參數(shù)或返回值)。一旦程序員忽略NULL指針檢查,往往會觸發(fā)很嚴(yán)重的內(nèi)存錯

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論