2012-09-17 28 views
0

我不明白整個Clang和llvm thingy。我問自己,在iOS設備運行時,代碼是在VM中運行,還是在編譯時通過「VM」進行編譯時優化等等?iOS編程與Clang和llvm一起虛擬嗎?

+1

'LLVM'中的'VM'並不是您的想法。它是一箇中間抽象機器表示,就像gcc和幾乎所有其他編譯器一樣。很多人都被這個名字所迷惑 - LLVM團隊的好戲! –

回答

3

LLVM不是虛擬機這個詞的意思。問題是LLVM是一種代碼生成器,可幫助統一編譯器,語言和目標處理器/操作系統。 LLVM僅適用於編譯器開發人員。事實上,在Clang編譯器中,它扮演着重要角色,但這完全是內部的 - Clang出來的是純粹的本地ARM/iOS機器代碼。

+1

錯了。 LLVM *是一個編譯器。它將高級語言(LLVM IR)編譯爲各種平臺的本地代碼。 Clang反過來是C/ObjC/C++/OpenCL到LLVM IR的編譯器。 LLVM是一個非常有用的東西,不僅僅是編譯器開發者。我們可以將它用於各種代碼檢測,代碼分析,任意代碼轉換等。 –

+0

@ SK-邏輯修復了第一部分 - 但「可以將其用於各種代碼檢測,代碼分析,任意代碼轉換等等」 - 很好,編譯器開發人員會這樣做,對嗎? – 2012-09-17 15:10:51

+0

不,您不必是編譯器開發人員,以便對代碼庫中的語義搜索感興趣。例如,有一次,我使用LLVM IR來定位從某個函數返回的數據被隱式轉換爲「double」的所有位置。這對於爲代碼研究生成調用圖和其他有用數據也非常有用。 –

相關問題