0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

王垠談編譯器

電子工程師 ? 來(lái)源:網(wǎng)絡(luò)整理 ? 2021-03-30 10:45 ? 次閱讀

由于早期的 Lisp 編譯器生成的代碼效率普遍低下,成為了 Lisp 失敗的主要原因之一。而現(xiàn)在的高性能 Lisp 編譯器(比如 Chez Scheme),其實(shí)已經(jīng)可以生成非常高效的代碼,甚至可以匹敵 C 程序的速度。如果你看得到我腦子里的東西,就會(huì)明白這完全不是吹牛,對(duì)我來(lái)說(shuō)這是科學(xué)的結(jié)論。我在這里介紹一下我寫 Scheme 編譯器的經(jīng)歷,也許你就會(huì)從根本上明白為什么我會(huì)這么自信。這里的介紹其實(shí)不止針對(duì)函數(shù)式語(yǔ)言,而且針對(duì)所有語(yǔ)言的編譯器。

編譯器是一種神秘,有趣,又無(wú)聊的的程序。說(shuō)它神秘,是因?yàn)橹挥蟹浅I俚娜酥廊绾螌懗鰞?yōu)秀的編譯器。這些會(huì)寫編譯器的人,就像身懷絕技的武林高手一樣神出鬼沒(méi)。說(shuō)它有趣,是因?yàn)榫幾g器的技術(shù)里面含有大量的“哲學(xué)問(wèn)題”和深刻的理論(比如 partial evaluation)。但為什么又說(shuō)它無(wú)聊呢?因?yàn)槟阋坏┱莆樟司幾g器技術(shù)里面最精華的原理,就會(huì)發(fā)現(xiàn)其實(shí)說(shuō)來(lái)說(shuō)去就那么點(diǎn)東西。編譯器代碼里面的“創(chuàng)造性含量”其實(shí)非常低。有些固定的“模式”,幾十年都不變。寫了幾個(gè)編譯器之后你就會(huì)發(fā)現(xiàn),自己越來(lái)越喜歡做被很多人不齒的“界面”一類的東西。這就像做科學(xué)做到頭了,想嘗嘗藝術(shù)的滋味。

好了不打擊你積極性了,先來(lái)說(shuō)一說(shuō)為什么早期的 Lisp 編譯器生成的代碼效率低下吧。在函數(shù)式語(yǔ)言的早期,由于它比普通的語(yǔ)言多了一些表達(dá)力強(qiáng)大的構(gòu)造(比如函數(shù)作為值傳遞),人們其實(shí)都不知道如何實(shí)現(xiàn)它的編譯器。很多 Scheme 的編譯器其實(shí)只是把 Scheme 編譯成 C,然后再調(diào)用 C 語(yǔ)言的編譯器。Haskell 的編譯器 GHC 在早期也是這樣的。而且由于 C 編譯器生成的匯編代碼不完全符合 Haskell 的需求,GHC 里面含有一個(gè) Perl 腳本,專門用于調(diào)整這匯編代碼的結(jié)構(gòu)。這個(gè) Perl 腳本,由于它的工作方式毫無(wú)原則,被叫做 evil mangler?,F(xiàn)在這個(gè)東西已經(jīng)不存在于 GHC 里面,但從它曾經(jīng)的存在你可以看出,其實(shí)函數(shù)式編譯器的技術(shù)在早期是相當(dāng)混沌的。

在我看來(lái),早期 Lisp 編譯器出現(xiàn)的主要問(wèn)題,其實(shí)在于對(duì)編譯的本質(zhì)的理解,以及編譯器與解釋器的區(qū)別。解釋器之所以大部分時(shí)候比編譯器慢,是因?yàn)榻忉屍鳌皢?wèn)太多的問(wèn)題”。每當(dāng)看到一個(gè)構(gòu)造,解釋器就會(huì)問(wèn):“這是一個(gè)整數(shù)嗎?”“這是一個(gè)函數(shù)嗎?”…… 這些問(wèn)題,在編譯器的理論里面叫做“解釋開銷”(interpretive overhead)。編譯的本質(zhì),其實(shí)就是在程序運(yùn)行之前分析并且一勞永逸的回答這些“問(wèn)題”。這樣編譯后的代碼就不再問(wèn)這些問(wèn)題,因?yàn)樗苯泳椭滥莻€(gè)位置應(yīng)該出現(xiàn)什么構(gòu)造,應(yīng)該做什么事。早期的 Lisp 編譯器,以及現(xiàn)在的很多 Scheme 編譯器出現(xiàn)的問(wèn)題其實(shí)在于,它們并沒(méi)有完全的消除這些問(wèn)題,或者根本沒(méi)有消除這些問(wèn)題。

當(dāng)我最早學(xué)習(xí) Scheme 語(yǔ)言的時(shí)候,我發(fā)現(xiàn) Scheme 有太多的實(shí)現(xiàn),PLT Scheme(現(xiàn)在叫 Racket), MIT Scheme, VSCM, Scheme 48, Bigloo, Chicken, Guile, 。。。讓人搞不清楚哪一個(gè)更好。有些 Scheme 實(shí)現(xiàn)顯得更高級(jí)一些,但實(shí)際用起來(lái)總是感覺(jué)不放心,因?yàn)槟阈睦锟傁胫@代碼編譯出來(lái)到底能不能跟 C 語(yǔ)言代碼比?這也是我后來(lái)開始使用 Common Lisp 的原因,因?yàn)?Common Lisp 似乎有挺多高效的編譯器(CMUCL,Lispworks,Allegro 等等)。

直到有一天,我發(fā)現(xiàn)了 Chez Scheme,它改變了我對(duì) Scheme 編譯器,以至于整個(gè)編譯器概念的理解。當(dāng)時(shí)我只下載了 Chez Scheme 的免費(fèi)版本,叫做 Petite。Petite 與正式版 Chez Scheme 的區(qū)別是,它不輸出二進(jìn)制代碼,所以你不能把編譯后的代碼拿去銷售。另外出于商業(yè)目的,Petite 的出錯(cuò)信息非常的“簡(jiǎn)約”,以至于有時(shí)候你不得不用其它的 Scheme 實(shí)現(xiàn),才能找到 bug 的所在。但是一運(yùn)行就見分曉,Petite 被作為一個(gè)“解釋器”直接運(yùn)行 Scheme 代碼,比其他的 Scheme 實(shí)現(xiàn)編譯后的代碼速度還要快很多倍。

Chez Scheme 導(dǎo)致了我命運(yùn)的改變,怎么也沒(méi)有想到,我最終會(huì)成為它的作者的學(xué)生。我非常有幸的在 Indiana 大學(xué)參加了 Chez Scheme 的作者 R. Kent Dybvig(大家都叫他 Kent,雖然他的名字其實(shí)叫 R.)所授的編譯器課程,并且跟他合作研究了一個(gè)學(xué)期。我可以說(shuō),這個(gè)課程恐怕是世界上最好的編譯器課程,而我搭上了它的“末班車”。Kent 現(xiàn)在已經(jīng)離開了 Indiana 大學(xué),被重金聘請(qǐng)到某大公司進(jìn)行一些機(jī)密的項(xiàng)目。誰(shuí)都不知到他在干什么。

Kent 單槍匹馬的寫出了 Chez Scheme,世界上唯一的商業(yè) Scheme 編譯器,并且為此成立了自己的公司Cadence Research Systems)。Chez Scheme 價(jià)格不菲,并且不明碼實(shí)價(jià)。它的價(jià)格跟項(xiàng)目的大小和公司的規(guī)模有關(guān)。有些大公司花重金購(gòu)買 Chez Scheme 用于一些核心的項(xiàng)目。其中有些為了保證這編譯器的安全,又花了好幾倍的價(jià)錢買下了它的源代碼。Kent 的公司只有他一個(gè)人,不用操心管理,也不用操心銷售。所以他過(guò)的非常舒服,基本是一個(gè)不愁吃穿,不問(wèn)世事的人。

Kent 是我一生中見過(guò)的最神秘,最酷的人。他幾乎從來(lái)不表?yè)P(yáng)任何人,但也不貶低任何人。從冷漠的言語(yǔ)之中,你能感覺(jué)到他的內(nèi)心相對(duì)于任何人的完全平等。他的心里有許許多多的秘密,你需要一些技巧才能套出他的真言。他很少發(fā)表論文,卻把別人的論文全都看得很透。沒(méi)有人知道他的核心技術(shù),他也從來(lái)不在乎別人是否了解他的水平。他的名字叫 R. Kent Dybvig,卻從來(lái)沒(méi)有人知道那個(gè) R. 是哪一個(gè)名字的簡(jiǎn)寫。他的照片從來(lái)不放在網(wǎng)上,如果你真想知道他長(zhǎng)得什么樣,我在網(wǎng)上找到一個(gè)跟他長(zhǎng)得非常相似的人的照片:

Chez Scheme 生成的“目標(biāo)代碼”效率之高,我還沒(méi)有見到任何其它 Scheme 編譯器可以與之匹敵。而它的“編譯速度”之快,沒(méi)有任何語(yǔ)言的任何編譯器可以相提并論(注意我去掉了“Scheme”這個(gè)限定詞)。Chez Scheme 可以在 5 秒鐘之內(nèi)完成從頭到尾的自我編譯。想想編譯 GCC 或者 GHC 需要多少時(shí)間,你就明白差距了。

另外值得一提的是,Chez Scheme 從頭到尾都是 Kent 一個(gè)人的作品。它的工作原理是從 Scheme 源程序一直編譯到機(jī)器代碼,而不依賴任何其他語(yǔ)言的編譯器。它甚至不依賴第三方的匯編器,所有三種體系構(gòu)架(Intel, ARM, Sparc)的匯編器,都是 Kent 自己寫的。為什么這樣做呢?因?yàn)閹缀鯖](méi)有其它人的編譯器代碼能夠達(dá)到他的標(biāo)準(zhǔn)。連 Intel 自己給自己的處理器寫的匯編器,都不能滿足他的要求。

如果你上了 Kent 的課,再來(lái)看看普通的編譯器書籍(比如有名的 Dragon Book),或者 LLVM 的代碼,你就會(huì)發(fā)現(xiàn) Kent 的水平其實(shí)遠(yuǎn)在這些知名的大牛之上。我為什么可以這么說(shuō)呢?因?yàn)槿绻愕乃皆趧e人之下,你自己都會(huì)對(duì)這種判斷產(chǎn)生懷疑。而如果你超過(guò)了別人,他們的一言一行,他們的每一個(gè)錯(cuò)誤,都像是處于你的顯微鏡底下,看得一清二楚。實(shí)話實(shí)說(shuō)吧,在編譯器這個(gè)領(lǐng)域,我覺(jué)得 Kent 很有可能就是世界的 No.1。

如果你不了解 Scheme 的編譯器里面有什么東西,也許就會(huì)輕視它的難度。Scheme 是比 C 語(yǔ)言高級(jí)很多的語(yǔ)言,所以它的編譯器需要做比 C 語(yǔ)言的編譯器多很多的事情。在 Kent 的編譯器課程的前半段,我們其實(shí)本質(zhì)上是在實(shí)現(xiàn)一個(gè) C 語(yǔ)言的編譯器,把一種用“S表達(dá)式”表示的中間語(yǔ)言,編譯為 X64 匯編代碼。在后半學(xué)期的課程中,我們才加入了各種 Scheme 的先進(jìn)功能,比如函數(shù)作為值(需要進(jìn)行 closure conversion 以及 closure 優(yōu)化),尾遞歸優(yōu)化(tail-call optimization),等等。另外,我還自己為它加入了一種非常漂亮而先進(jìn)的技術(shù),叫做 online partial evaluation。這種技術(shù)可以在一個(gè) pass 就完成普通編譯器需要好幾個(gè) pass 才能完成的優(yōu)化。所以你看到了,C 語(yǔ)言的編譯器其實(shí)連這個(gè) Scheme 編譯器的一半難度都不到。

Kent 的課程編譯器有非常好的結(jié)構(gòu),它被叫做“nanopass 編譯器構(gòu)架”。因?yàn)樗拿恳粋€(gè) pass 只做很小的一件事情,然后這些 pass 被串聯(lián)起來(lái),形成一個(gè)完整的編譯器。你也許發(fā)現(xiàn)了,這其實(shí)就是 LLVM 的構(gòu)架。但是我可以告訴你,我們的課程編譯器比 LLVM 干凈利落許多,處于遠(yuǎn)遠(yuǎn)領(lǐng)先的地位。每一節(jié)課,我們都學(xué)會(huì)一個(gè) pass。每一個(gè)講義,都非常精確的告訴你需要干什么。每一次的作業(yè),提交的時(shí)候都會(huì)經(jīng)過(guò)上百個(gè)測(cè)試(當(dāng)然 Kent 不可能把 Chez Scheme 的測(cè)試都給我們),如果沒(méi)有通過(guò)就會(huì)被拒絕接受。這些測(cè)試也可以下載,用于自己的調(diào)試。有趣的是,每一次作業(yè)我們都需要提交一些自己寫的新測(cè)試,目的是用于“破壞”別人的編譯器。所以我們每次都會(huì)想出很刁鉆的輸入代碼,讓同學(xué)的日子不好過(guò)。當(dāng)然是開玩笑的,這種做法其實(shí)大大的提高了我們對(duì)編譯器測(cè)試的理解和興趣,以及同學(xué)之間的友誼。這比起我曾經(jīng)在 Cornell 選過(guò)(然后 drop 掉)的編譯器課程,真是天壤之別。

在課程的最后,我們做出了一個(gè)完整的編譯器,可以把 Scheme 最關(guān)鍵的子集,編譯到 X64 匯編代碼,然后通過(guò) GNU 的匯編器,匯編成機(jī)器代碼。在最后的一節(jié)課,Kent 對(duì)我們的學(xué)期做了一個(gè)總結(jié)。他說(shuō):“你們現(xiàn)在寫出的這個(gè)編譯器里面,含有很多先進(jìn)的技術(shù)。也許過(guò)一段時(shí)間回頭看這段代碼,你們才會(huì)發(fā)現(xiàn)它的價(jià)值。如果你們覺(jué)得自己已經(jīng)成為了編譯器的專家,那我就告訴你們,你們提交的最快的編譯器,編譯速度比起 Chez Scheme 慢了 700 倍。但是不要灰心,我告訴你們哪些地方可以改進(jìn)……”

只有極少數(shù)的人見到過(guò) Chez Scheme 的源代碼,我沒(méi)有看見過(guò)。但是見到過(guò)它的人告訴我,Chez Scheme 里面其實(shí)只有很少幾個(gè) pass,而不是像我們的課程編譯器有 50 個(gè)左右的 pass,這節(jié)省了很多用于“遍歷”代碼樹所需要的時(shí)間。Chez Scheme 只使用了一些非常簡(jiǎn)單的算法,沒(méi)有使用論文里很復(fù)雜的方法,這也是它速度快的原因之一。比如它的寄存器分配,沒(méi)有使用“圖著色”(graph coloring)方法,而是使用非常簡(jiǎn)單的類似 linear scan 的算法,最后代碼的效率卻更高。另外,Scheme 使用“S表達(dá)式”作為它的語(yǔ)法,使得“語(yǔ)法分析”的速度非常之快。其它語(yǔ)言由于使用了復(fù)雜的語(yǔ)法,挺大一部分編譯時(shí)間其實(shí)花在了語(yǔ)法分析上面。

實(shí)際上,Chez Scheme 早就有了超越 linear scan, SSA 之類的技術(shù),Kent 卻從來(lái)沒(méi)有為它們發(fā)表論文。這是因?yàn)樗运絾??不。如果你?wèn)他,他還是會(huì)告訴你他用的是什么方法。但是具體的細(xì)節(jié),卻是解釋起來(lái)非常費(fèi)事的事情,他為什么無(wú)緣無(wú)故要費(fèi)工夫跟你解釋呢?所以很多時(shí)候,我都是自己摸索出解決方案,再去套他的口氣,看他是不是一樣的做法。有趣的是在課程進(jìn)行之中的時(shí)候,我發(fā)現(xiàn)我的有些突發(fā)靈感的做法,其實(shí)超越了 Chez Scheme,以至于在某些 pass 會(huì)生成比它還要高效的代碼,然而我的編譯器代碼卻比它的還要短?。ó?dāng)然絕大部分時(shí)間我的代碼不如 Chez Scheme)。于是我就隱約的發(fā)現(xiàn),Kent 有時(shí)候會(huì)悄悄的花時(shí)間看我的作業(yè),想搞明白我是怎么做的,但他卻不想讓我知道。有一天開會(huì)的時(shí)候 Kent 沒(méi)有來(lái),Kent 的編譯器課程的助教 Andy 不小心說(shuō)漏了嘴:“因?yàn)槟銓懙拇a,Kent 還在進(jìn)行一些偵探工作……” 悄悄的從任何人那里得到啟發(fā),吸收并且融入到自己的能力里面,也許就是 Kent 練就如此蓋世神功的秘訣。

責(zé)任編輯:lq6

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1607

    瀏覽量

    48977
  • 匯編器
    +關(guān)注

    關(guān)注

    0

    文章

    31

    瀏覽量

    11222
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    AI編譯器技術(shù)剖析

    隨著人工智能技術(shù)的飛速發(fā)展,AI編譯器作為一種新興的編譯技術(shù)逐漸進(jìn)入人們的視野。AI編譯器不僅具備傳統(tǒng)編譯器的功能,如將高級(jí)語(yǔ)言編寫的源代碼轉(zhuǎn)換為機(jī)器可執(zhí)行的代碼,還融入了人工智能技術(shù)
    的頭像 發(fā)表于 07-17 18:28 ?1333次閱讀

    人工智能編譯器與傳統(tǒng)編譯器的區(qū)別

    人工智能編譯器(AI編譯器)與傳統(tǒng)編譯器在多個(gè)方面存在顯著的差異。這些差異主要體現(xiàn)在設(shè)計(jì)目標(biāo)、功能特性、優(yōu)化策略、適用范圍以及技術(shù)復(fù)雜性等方面。以下是對(duì)兩者區(qū)別的詳細(xì)探討,旨在全面解析其內(nèi)在差異。
    的頭像 發(fā)表于 07-17 18:19 ?1457次閱讀

    深度學(xué)習(xí)編譯器和推理引擎的區(qū)別

    深度學(xué)習(xí)編譯器和推理引擎在人工智能領(lǐng)域中都扮演著至關(guān)重要的角色,但它們各自的功能、應(yīng)用場(chǎng)景以及優(yōu)化目標(biāo)等方面存在顯著的差異。以下是對(duì)兩者區(qū)別的詳細(xì)探討。
    的頭像 發(fā)表于 07-17 18:12 ?1136次閱讀

    Meta發(fā)布基于Code Llama的LLM編譯器

    近日,科技巨頭Meta在其X平臺(tái)上正式宣布推出了一款革命性的LLM編譯器,這一模型家族基于Meta Code Llama構(gòu)建,并融合了先進(jìn)的代碼優(yōu)化和編譯器功能。LLM編譯器的推出,標(biāo)志著Meta在人工智能領(lǐng)域的又一重大突破,將
    的頭像 發(fā)表于 06-29 17:54 ?1373次閱讀

    SEGGER編譯器優(yōu)化和安全技術(shù)介紹 支持最新C和C++語(yǔ)言

    SEGGER編譯器是專門為ARM和RISC-V微控制設(shè)計(jì)的優(yōu)化C/C++編譯器。它建立在強(qiáng)大的Clang前端上,支持最新的C和C++語(yǔ)言功能。 除其他外,其主要功能包括: 1)?尺寸優(yōu)化:通過(guò)調(diào)整
    的頭像 發(fā)表于 06-04 15:31 ?1269次閱讀
    SEGGER<b class='flag-5'>編譯器</b>優(yōu)化和安全技術(shù)介紹 支持最新C和C++語(yǔ)言

    C語(yǔ)言:嵌入式開發(fā)中的關(guān)鍵編譯器角色

    嵌入式程序開發(fā)跟硬件密切相關(guān),需要使用C語(yǔ)言來(lái)讀寫底層寄存、存取數(shù)據(jù)、控制硬件等,C語(yǔ)言和硬件之間由編譯器來(lái)聯(lián)系,一些C標(biāo)準(zhǔn)不支持的硬件特性操作,由編譯器提供。
    發(fā)表于 04-26 14:53 ?477次閱讀
    C語(yǔ)言:嵌入式開發(fā)中的關(guān)鍵<b class='flag-5'>編譯器</b>角色

    QT開發(fā)學(xué)習(xí)筆記1(安裝交叉編譯器

    QT安裝交叉編譯器
    的頭像 發(fā)表于 02-18 10:02 ?784次閱讀
    QT開發(fā)學(xué)習(xí)筆記1(安裝交叉<b class='flag-5'>編譯器</b>)

    Embedded Studio 編譯器教程

    最近入手先輯的HPM6750,需要使用Embedded Studio 編譯器來(lái)做開發(fā),各位推薦一下學(xué)習(xí)資料。
    發(fā)表于 02-04 08:01

    RX系列V3.06.00的C/C++編譯器包數(shù)據(jù)手冊(cè)

    電子發(fā)燒友網(wǎng)站提供《RX系列V3.06.00的C/C++編譯器包數(shù)據(jù)手冊(cè).pdf》資料免費(fèi)下載
    發(fā)表于 01-26 15:57 ?1次下載
    RX系列V3.06.00的C/C++<b class='flag-5'>編譯器</b>包數(shù)據(jù)手冊(cè)

    RL78系列的C編譯器包數(shù)據(jù)手冊(cè)

    電子發(fā)燒友網(wǎng)站提供《RL78系列的C編譯器包數(shù)據(jù)手冊(cè).pdf》資料免費(fèi)下載
    發(fā)表于 01-26 15:55 ?1次下載
    RL78系列的C<b class='flag-5'>編譯器</b>包數(shù)據(jù)手冊(cè)

    Triton編譯器的原理和性能

    Triton是一種用于編寫高效自定義深度學(xué)習(xí)原語(yǔ)的語(yǔ)言和編譯器。Triton的目的是提供一個(gè)開源環(huán)境,以比CUDA更高的生產(chǎn)力編寫快速代碼,但也比其他現(xiàn)有DSL具有更大的靈活性。Triton已被采用
    的頭像 發(fā)表于 12-16 11:22 ?2485次閱讀
    Triton<b class='flag-5'>編譯器</b>的原理和性能

    TVM編譯器的整體架構(gòu)和基本方法

    有將近兩個(gè)月沒(méi)有學(xué)習(xí)一些新東西,更新一下博客了。一直在忙公司的一個(gè)項(xiàng)目,是做一款支持LSTM和RNN的通用架構(gòu)加速IP。自己恰好負(fù)責(zé)指令編譯工作,雖然開始的指令比較粗糙,沒(méi)有一套完整的編譯器架構(gòu)
    的頭像 發(fā)表于 11-30 09:36 ?2105次閱讀
    TVM<b class='flag-5'>編譯器</b>的整體架構(gòu)和基本方法

    編譯器的優(yōu)化選項(xiàng)

    一個(gè)程序首先要保證正確性,在保證正確性的基礎(chǔ)上,性能也是一個(gè)重要的考量。要編寫高性能的程序,第一,必須選擇合適的算法和數(shù)據(jù)結(jié)構(gòu);第二,應(yīng)該編寫編譯器能夠有效優(yōu)化以轉(zhuǎn)換成高效可執(zhí)行代碼的源代碼,要做到
    的頭像 發(fā)表于 11-24 15:37 ?803次閱讀
    <b class='flag-5'>編譯器</b>的優(yōu)化選項(xiàng)

    基于ARM編譯器版本5的工程遷移與適配到ARM編譯器版本6.12

    AC5和AC6的主要差異是AC6使用armclang代替了armcc,因此在AC6中就沒(méi)有armcc這個(gè)編譯工具了。并且armclang的編譯參數(shù)相對(duì)于之前的armcc的編譯參數(shù)也有許多不同。
    的頭像 發(fā)表于 11-12 11:17 ?8302次閱讀
    基于ARM<b class='flag-5'>編譯器</b>版本5的工程遷移與適配到ARM<b class='flag-5'>編譯器</b>版本6.12

    嵌入式j(luò)avascript編譯器的設(shè)計(jì)與實(shí)現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《嵌入式j(luò)avascript編譯器的設(shè)計(jì)與實(shí)現(xiàn).pdf》資料免費(fèi)下載
    發(fā)表于 10-30 11:29 ?0次下載
    嵌入式j(luò)avascript<b class='flag-5'>編譯器</b>的設(shè)計(jì)與實(shí)現(xiàn)