導航:首頁 > 源碼編譯 > 編譯器實現之路

編譯器實現之路

發布時間:2025-04-11 07:30:00

Ⅰ 程序設計語言:實踐之路內容簡介

《程序設計語言:實踐之路》內容簡介如下

Ⅱ 利用LLVM實現JS的編譯器,創造屬於自己的語言

本文聚焦於使用LLVM構建JavaScript編譯器,旨在探索自定義語言的開發過程。參考官方教程Kaleidoscope實現,本文僅構建JavaScript編譯器的演示版本。對於深入學習,如JIT實現與代碼優化,可訪問github.com/zy445566/llvm-guide-zh,獲取官方教程與代碼集。

LLVM,作為編譯器基礎設施,為語言實現提供了強大支持。最初設計用於替代gcc,它超越了簡單編譯的功能,成為構建新語言的完整工具。本文編譯器流程包括:編寫AST解析語言結構、將分析結果綁定生成IR(中間語言)、生成二進制或匯編代碼。LLVM亦適用於實現JIT,或結合編譯器與虛擬機。

首先,定義token類型識別詞法結構,並實現解析方法,可同時用於字元跳躍。定義語法結構,自定義解析邏輯。循環獲取token並調用對應解析方法,解析JS方法,尤其復雜的是ParseExpression,涉及遞歸解析表達式。

生成IR相對直覺,需先定義AST結構,然後編寫代碼將解析結果綁定至IR。IR作為中間語言,簡化了語言轉換過程。實現編譯器,通過編譯器生成JSVM文件,使用自編譯器編譯JS文件,輸出結果進行驗證。最後,通過C引用JS文件,編譯成二進制文件,實現最終功能。

初次接觸編譯器開發可能感到挑戰與混亂,但本文示例展示了如何利用LLVM構建JavaScript編譯器,為學習者提供了寶貴經驗。期待LLVM未來能更深入地支持JavaScript,例如Facebook的prepack項目嘗試使用LLVM將JS編譯為二進制,無需運行時。通過本文分享的示例,JS自舉的實現之路正逐漸清晰。

Ⅲ CUDA兼容,英偉達真的禁止了

2024年2月,英偉達 CUDA 11.6 及更高版本安裝出現新規,禁止對使用 SDK 元素生成的輸出部分進行逆向工程、反編譯或反匯編,以將此類輸出工件轉換為目標非 NVIDIA 平台。這一條款引起廣泛關注,是否意味著未來兼容CUDA的AI晶元發展路線將受阻?

答案並非簡單否定。兼容CUDA技術路線的晶元企業暫未受直接影響。兼容CUDA的方法多樣,主要分為兩種:重新編譯底層二進制代碼和API介面兼容或編譯。

重新編譯底層二進制代碼,如ZLUDA通過替換為ZLUDA庫實現CUDA兼容。該方法雖技術開源、轉換簡單,但計算效率較低,無法充分挖掘晶元性能。

另一種方法是在API介面協議和編譯器層面與CUDA保持一致,這不違反英偉達規定。例如,英特爾oneAPI、AMD Rocm等均提供兼容CUDA的軟體棧工具。國內企業如瀚博、登臨、壁仞、沐曦、摩爾線程、天數智芯等均採用此路線,通過與CUDA對應一致的API介面和編譯器實現兼容。

具體實現上,AMD和Intel提供了CUDA程序移植到ROCm和OpenAPI平台的工具,如ROCm生態中的Hipify工具。摩爾線程通過MUSIFY工具將CUDA代碼遷移到MUSA平台,自行實現MUSA-X計算庫替代rocBLAS、rocFFT等,利用MUSA Toolkit進行編譯調用,實現CUDA代碼兼容。壁仞科技和沐曦科技亦開發了兼容CUDA的平台和框架,通過自行開發庫和框架,實現與CUDA生態的兼容。

綜上所述,此次CUDA規則變更對國內AI晶元兼容並未產生實質性影響。然而,長期發展來看,構建自主的軟體生態體系是必由之路。

最新動態:摩爾線程已發表聲明,證實觀點與本文一致。

閱讀全文

與編譯器實現之路相關的資料

熱點內容
迅雷把文件分解加密 瀏覽:83
好玩友app怎麼查找游戲 瀏覽:861
互聯網公司java 瀏覽:520
為什麼能上網卻提示找不到伺服器 瀏覽:579
基於單片機的多功能門鈴 瀏覽:939
南昌微型往復活塞空氣壓縮機 瀏覽:143
syuu伺服器什麼時候開服的 瀏覽:395
ted文件夾 瀏覽:700
二戰pdf 瀏覽:232
有什麼類似得物的app 瀏覽:547
stc單片機外接有源時鍾 瀏覽:747
為什麼安卓手機老是會跳出廣告 瀏覽:559
eclipse導入android工程 瀏覽:61
二手房解壓款多少錢 瀏覽:55
c專家編程c陷阱 瀏覽:289
澳客app怎麼授權 瀏覽:767
雲伺服器多個賬號同時登錄 瀏覽:689
車床m10x15螺紋編程 瀏覽:807
呼蘭程序員公司 瀏覽:2
javaurlrewrite 瀏覽:14