MicroUI: 一個使用 ANSI C 編寫的極簡即時模式 UI 函式庫

概述

MicroUI 是一個使用 ANSI C 編寫的微型、可移植即時模式 UI 函式庫。它專為需要極簡圖形介面且不想承受大型框架開銷的開發者而設計。該函式庫的特點是極致的極簡主義,僅包含約 1,100 行原始碼 (SLOC),並且能夠在固定大小的記憶體區域內運行,而不需要額外的記憶體配置。

核心功能與技術規格

MicroUI 提供了一套內建控制項與靈活的佈局系統,同時嚴格遵守 ANSI C 以實現最大的可移植性。

內建 UI 控制項

MicroUI 包含幾個標準介面元素:

  • 視窗 (Windows)
  • 可捲動面板 (Scrollable panels)
  • 按鈕 (Buttons)
  • 滑桿 (Sliders)
  • 文字方塊 (Textboxes)
  • 標籤 (Labels)
  • 核取方塊 (Checkboxes)
  • 自動換行文字 (Word-wrapped text)

技術限制

  • 記憶體管理: 該函式庫在固定大小的記憶體區域內運作,這意味著在執行期間不會配置額外的記憶體。
  • 渲染無關性: MicroUI 不包含內建的圖形後端。它可以與任何能夠繪製矩形和文字的渲染系統配合使用,但需要使用者提供渲染器後端函式。
  • 自定義: 該函式庫旨在讓使用者能夠輕鬆實作並添加自定義控制項。

效能與佔用空間比較

與其他即時模式 GUI (IMGUI) 函式庫相比,MicroUI 展示了顯著較小的二進位檔案大小。在一個基於 sokol headers 運行的演示中,壓縮後的下載大小如下:

  • MicroUI: 79.6 KBytes
  • Nuklear: 155 KB
  • Dear ImGui: 491 KB

這使得 MicroUI 成為二進位檔案大小為關鍵限制條件之專案的高效選擇。

整合與生態系統

MicroUI 已被整合到各種環境中,並用於多種技術概念驗證 (proof-of-concept)。

語言與框架支援

  • Odin: MicroUI 已包含在 Odin vendor libraries 中,並經常用於在 Raylib 中建立除錯選單。
  • WebAssembly (WASM): 該函式庫可以編譯為 WASM,允許在瀏覽器環境中渲染 UI 介面。
  • 跨平台二進位檔案: 它已與 Cosmopolitan Libc 配合使用,以建立「一次構建,隨處執行」的圖形應用程式,使其能在 Linux、Windows 和 BSDs 上運行。

實作需求

由於 MicroUI 是渲染無關的,開發者必須處理與實際視窗系統(例如 X11、Win32 或 TUI)的介面,並提供繪製基本圖元(矩形和文字)所需的函式。

社群洞察與限制

雖然其極簡主義受到讚譽,但社群也指出了幾項權衡與技術障礙。

已知問題

一些使用者回報該函式庫目前處於「棄置軟體 (abandonware)」狀態,其中一個特定的 draw call iterator 錯誤會導致指標存取對齊錯誤。這在具有嚴格對齊要求的環境中(例如 Zig)可能會導致 panic。

權衡

  • 無障礙性: 該函式庫缺乏內建的無障礙支援,部分開發者認為這是生產級軟體的必要條件。
  • 複雜度: 由於它僅提供基礎功能,需要更多「花哨功能」的開發者可能會發現該函式庫對於複雜的應用程式需求而言過於受限。 。
  • 比較與保留模式 (Retained Mode): 與保留模式 GUI(例如 libagar)不同,MicroUI 不會維護 UI 樹的持久狀態,這是即時模式範式的典型特徵。

Sources