Ⅰ 程序設計語言:實踐之路內容簡介
《程序設計語言:實踐之路》內容簡介如下:
Ⅱ 利用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晶元兼容並未產生實質性影響。然而,長期發展來看,構建自主的軟體生態體系是必由之路。
最新動態:摩爾線程已發表聲明,證實觀點與本文一致。