核心概念
設計一種語言和運行時,其性能和內存使用行為都是 $\Omega(c)$ 的,即所有操作的執行時間都是有效的常數,應用程序的內存開銷也是固定的,垃圾收集器的工作量也是常數級別的,並且所有收集/釋放操作都有一個小的有界暫停時間。
摘要
本文提出了一種名為 Bosqe 的新編程語言,它具有以下關鍵特性:
完全定義和確定性:語言沒有任何編譯器或運行時實現定義的或非確定性行為,每個程序都有一個固定和唯一的結果。
不可變性:語言中的所有值都是不可變的,無法在創建後更改。
無循環:對象圖中沒有循環,也沒有創建循環的方法。
無身份:沒有地址或指針比較,也沒有觀察對象身份的方法,即語言是完全引用透明的。
渐近穩定的算法:語言和核心庫使用的算法都是常數或 $\Omega$ 有界線性/對數成本,而不是攤銷常數(但最壞情況下是二次)的成本。
作者認為,通過這些特性,可以設計出一個具有以下特點的運行時:
常數內存開銷:內存消耗應該由一個固定的開銷加上每個分配的小開銷組成。
每次分配的固定工作量:垃圾收集器的工作量應該是有效的常數,與生命週期或應用程序行為無關。
有界的收集器暫停:收集器只需要應用程序暫停一個小的有界時間。
與應用程序代碼無關:應用程序代碼不應支付任何成本,如寫屏障、記憶集等,用於垃圾收集實現。
可碎片整理:垃圾收集器應該能夠壓縮堆,消除長時間運行應用程序中的性能(和內存使用)問題。
作者認為,通過使用一種基於分代垃圾收集器和引用計數的設計,加上 Bosqe 語言的特性,可以實現這些目標。此外,Bosqe 還提供了一種將遙測和分析作為一等公民的機會,以幫助診斷和解決尾部延遲問題。
統計資料
以下是一些重要的數據和指標:
每次分配的工作量是有效的常數,包括分配、複製、引用計數增減和釋放操作。
垃圾收集器的暫停時間被限制為處理年輕代的時間加上老年代的常數時間。
由於值的不可變性和無循環特性,垃圾收集器可以無需任何寫屏障或記憶集就能進行碎片整理。
引述
"性能真正意味著應用程序有多經常足夠快,以至於用戶幾乎感覺不到,這導致工業開發人員將95th和99th百分位延遲作為重點,甚至比平均響應時間更重要。"
"我們的願景是創建一種語言和運行時,它被設計為 $\Omega(c)$ 的性能 - 也就是說,它被設計為所有操作都有一個有效的恒定執行時間,應用程序的內存開銷有一個恒定的固定開銷,垃圾收集器每次分配執行一個恒定的工作量,並且所有收集/釋放操作都有一個(小的)有界暫停。"