成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

如何理解clingrootsys原理剖析中的pme

如何理解clingrootsys原理剖析中的pme,針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名與空間、網(wǎng)頁空間、營銷軟件、網(wǎng)站建設(shè)、瑪多網(wǎng)站維護(hù)、網(wǎng)站推廣。

動態(tài)語言中的動態(tài)類型語言

一般會誤以為動態(tài)語言就是解釋語言。因?yàn)榻忉屜到y(tǒng)能動態(tài)執(zhí)行代碼也往往意味著其被歸為動態(tài)語言。但實(shí)際上動態(tài)語言現(xiàn)在最常見的技術(shù)形式反而是一種稱為“動態(tài)類型的動態(tài)語言”,它往往依賴前端而不是后端。這造成的結(jié)果是:靜態(tài)語言系統(tǒng)和經(jīng)典的編譯->運(yùn)行系統(tǒng)也能產(chǎn)生“動態(tài)語言”。 比如在編譯器實(shí)現(xiàn)中,實(shí)際上類型系統(tǒng)可以提出元類型,封裝有類型的基本信息,然后喂給后端的是元類型/對象產(chǎn)生的子類型/子對象樹的形式就可以 – 一個較原來復(fù)雜一點(diǎn)的數(shù)據(jù)結(jié)構(gòu),然后其它過程保持不變喂給后端。運(yùn)行期的類型信息照樣在運(yùn)行期可保留甚至動態(tài)演變。這難道不是動態(tài)語言嗎? (這種邏輯也可以工作在庫級和工具鏈級,即語言系統(tǒng)實(shí)現(xiàn)的外部,比如pme,它的實(shí)現(xiàn)只要binding就可以了—而binding實(shí)際上是另一種編譯器意義上的前端翻譯,就行了,而執(zhí)行時是現(xiàn)成的,比如qtmoc為qtcpp源碼模式生成的字典,這就是為什么binding也能生成一種動態(tài)語言系統(tǒng),后端執(zhí)行時可以是靜態(tài)的,但主要喂給它的是如PEM這樣的業(yè)已包含類型系統(tǒng)–元類型系統(tǒng),會將類型系統(tǒng)保持到運(yùn)行期就可以了) 你可能會為編譯過程的這些種種感到迷惑,但實(shí)際上這里面所有的技術(shù),跟傳統(tǒng)靜態(tài)編譯語言系統(tǒng) – 你學(xué)到的最簡單的編譯原理實(shí)現(xiàn),是一個外觀的。而編譯前端,解釋前端,binding,這三個詞都包含了轉(zhuǎn)譯。目標(biāo)碼可以是平臺碼也可以是中間碼,供運(yùn)行。所有這些,都不能改變所有用編譯原理實(shí)現(xiàn)的語言系統(tǒng)共享同樣的產(chǎn)品外觀(都有該有的部分,只是呈現(xiàn)出了不同的形式)?;氐较盗形恼碌谝黄奈念^那些話,用這些通讀所有復(fù)雜語言系統(tǒng)的定性你才能不致迷糊。

Pme為靜態(tài)語言模擬了動態(tài)語言特征

Pme, poperty,method,event,是對反射機(jī)制的一種實(shí)現(xiàn),加了反射機(jī)制實(shí)際上在靜態(tài)類型之上加了一門新的語言,和庫級運(yùn)行時,可在運(yùn)行時查詢到整個活動對象樹,及每個類的場景圖,成員屬性。PME是組件的一種通用實(shí)現(xiàn)方式。 而且,這種兼具object io特性的pme機(jī)制,可為運(yùn)行時通過外在的編輯器改變objectlvl的程序邏輯提供了可能。借助PME組件的并持久化將成員屬性什么的持久到XML等載體。下一次需要時又可加載進(jìn)來(僅限代碼中的成員數(shù)據(jù))。 而只有在cling/rootsys這種大環(huán)境中,pme與JIT合作,這種動態(tài)性才得到最佳發(fā)揮,DLL加載終于通過JIT,變成了語言系統(tǒng)的功能。而不再停留在作為操作系統(tǒng)的一種機(jī)制,而pme模塊可以動態(tài)加載,這在開發(fā)上體現(xiàn)為,pme DLL體內(nèi)的邏輯是固定的。可改變的程序邏輯是DLL外的那部分。那個定制腳本部分和你的APP邏輯部分,可以是JIT CPP源碼(這里除了PME支持的代碼中的成員數(shù)據(jù)外,整個代碼都可持久,The interpreted and JITted C++ shares the same virtual memory space as the app itsel。)。有沒有感覺有腳本的樣子?直到這里,cling/rootsys開始有了同時能模擬了腳本語言式的解釋效果和動態(tài)加載效果,可謂嘆絕。

Cling/rootsys中的pme字典生成

如果說cling call into raw dll靠的是符號,受JIT和操作系統(tǒng)DLL機(jī)制支持,而call into PME模塊靠字典信息非符號,動態(tài)加載pme組件和發(fā)現(xiàn)組件里的OBJ樹需要PME支持,因此需要自實(shí)現(xiàn)。這是為何呢 這實(shí)際上最重要的還是因?yàn)閖it call into native libs只是使符合變得可見而已。而加載DLL中的資源,是普通的native langsys的功能,于是作為僅僅是執(zhí)行引擎向OS的傳手,llvm也可以而已。但其rootsys libs的pme是庫級的,cling代碼可以直接call into native libs,但不能call into rootsys libs,因?yàn)樗鼈兪怯衟me dicts as bindings的(不能直接通過加載的方式使其為cling可見必須通過對cling的封裝變成rootcling才可以)。因此,cling除了jit,和pme,還需要一個手動或自動添加字典binding信息使pme module和普通raw c dll(那種業(yè)已解析為簡單符號可直接加載的模塊)變得一樣。的方式,比如一個手動/自動DICT生成器。生成到raw cpp code傳給LLVM后端。 帶著這些觀點(diǎn),繼續(xù)來看看cling/rootsys中的對應(yīng)物,即其對pme模塊的支持-aclic。 ACliC只是將pme模塊形成加了pme字典的dll的工具。cling is faster building compiled code, but ACLiC can reuse it. Cling產(chǎn)生jit碼是高速編譯器產(chǎn)生的類解釋器效果,而aclic可以在庫級反射層面利用它。前面提過,將raw cpp改造成類似qtcpp的新語言系統(tǒng),所有模塊必須經(jīng)過字典封裝,這個過程也稱binding。Rootsys即是這樣的一門新語言系統(tǒng)。 在實(shí)現(xiàn)上,aliac是以patch cling的方式加上去到rootcling的。因此.L ++的方式產(chǎn)生so文件,只用于為pme模塊產(chǎn)生dict 模塊并鏈接好。

附:對于qtcling,有mocng,是基于clang的qt moc.exe重實(shí)現(xiàn),這也可以作為cling的patch組件,類似aliac的方式加到qtcling,使之具備發(fā)現(xiàn)源碼中有pme邏輯即自動生成dict模塊的功能,to give it the ability to produce “automic dict generator for qt extending cpp syntaxs” 來完成對整個qt libs的從源碼級的重新編譯封裝,最終完成整個qtcling語言系統(tǒng)的構(gòu)建。

關(guān)于如何理解clingrootsys原理剖析中的pme問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。

本文名稱:如何理解clingrootsys原理剖析中的pme
網(wǎng)站路徑:http://jinyejixie.com/article16/jjisgg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、軟件開發(fā)、網(wǎng)站維護(hù)、云服務(wù)器面包屑導(dǎo)航、Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
东至县| 博野县| 伽师县| 左权县| 赤城县| 台北县| 三原县| 宁武县| 克拉玛依市| 年辖:市辖区| 安义县| 怀宁县| 辉南县| 东乌| 溆浦县| 沂南县| 双柏县| 文水县| 垫江县| 宜兰县| 清水河县| 丁青县| 安达市| 衡阳县| 澳门| 建阳市| 临朐县| 南澳县| 独山县| 清水县| 思南县| 墨玉县| 阜新| 云龙县| 临潭县| 广安市| 武宣县| 东平县| 江阴市| 高清| 陇川县|