Loading...
Compiler的多元應用
(在此蒐集編譯器的應用,歡迎補充和修正
--
jserv)
不要小看口袋中的 Android 手機
小小一只手機,裡頭可是包含好幾種編譯器:
(預設安裝在系統底層)
ART
(Android
5 以後, AOT
[Ahead-of-Time]
compiler) 或 Dalvik
(Android
4.4 以下, JIT compiler)
搭配
Jack & Jill compiler
javac
->
dx
(DEX)
JavaScript: 使用
v8 engine
內建 PCRE engine
(
irregexp
),都是
JIT compiler
RenderScript
(使用
LLVM) <- OpenCL
libbcc, slang, mclinker, rs
FreeType:
bytecode interpreter
droid font
noto font
Adobe TrueType hinting
GLSL
(OpenGL|ES)
延伸閱讀:
LLVM for OpenGL and other stuff
libpixelflinger
: 用於軟體的 blender,搭配
SurfaceFlinger
和
libagl
進入 Recover mode 或用 Android 模擬器執行時,所有 Android 繪圖的底層處理就是透過 libpixelflinger 進行
(blitter)
其中 codeflinger 動態產生 ARM 與 MIPS 的機械碼
SQLite
libc 的
regex
(
regcomp.c
的
"emit")
也有 JIT compiler
延伸閱讀:
Programming Techniques: Regular expression search algorithm
iproute2
: 處理 bpf 的 bytecode
Android 應用程式裡頭的動態編譯器:
若安裝以 Unity3D 開發的遊戲,那就會有
Mono
(C#
Runtime; JIT compiler)
YouTube.apk 裡面有 luajit.so
(found
by Freedom)
Web 引擎和前端技術
CSS Selector JIT
技術報告:
CSS JIT Compiled CSS Selector in WebKit
Google Closure Compiler
: 讓 JavaScript 變得更精簡有效,縮短下載時間並提昇在網頁執行的效能
Web Assembly
: 還需要再解釋嗎?
Blink
: 新版chromium瀏覽器裡取代v8的Javascript引擎
字串和資料處理
qrintf-libtooling
對於大量 sprintf() 呼叫時,往往導致效能低落,qrintf 提出加速的機制,允許改寫為可由靜態操作格式的編譯器技巧,這可帶來 10 倍效能提昇。甚至可透過
libtooling
(clang/llvm
的一部分),讓編譯器自動轉換 sprint() 為加速的版本
Regex
(regular
expression):
pcre-jit
延伸閱讀:
A JIT for Regular Expression Matching
(1352x
speedup!)
vpacker
: 使用 LLVM + JIT 作整數壓縮
技術報告:
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
用 LLVM 加速 AVL tree 的處理
Vitesse
: 透過 LLVM 加速 PostgreSQL
網路伺服器
A JIT for packet filters
: Linux 核心已收錄
Berkeley Packet Filter
(BPF)
Please turn on JavaScript to use Paper in all of its awesomeness. ^_^
不要小看口袋中的 Android 手機
Web 引擎和前端技術
字串和資料處理
網路伺服器