技術白皮書-機器稿 (v4.8.7)

唯音 v4.8.7 與小麥注音 v3.1.1:技術白皮書(重構版)

資料截取日期:2026-10-07。小麥注音側依 v3.1.1(2026-09 版)、唯音側依 v4.8.7(2026-10-07 發行)整理。除非另行註明,以下內容係依本倉庫與 mcbopomofo、vChewing-macOS 專案主分支(main)狀態整理。

摘要

  • 架構重寫幅度顯著不同:唯音自 2022 年起以 Swift 為主體重構輸入調度、組字引擎、候選窗與安全模組;小麥注音延續 Objective-C++ / C++ 基建並聚焦效能與穩定維護。
  • 安全模型差異鮮明:唯音以 macOS Sandbox、浮動組字窗強化模式與可選客體清單阻絕 markedText 洩露;小麥注音保留腳本掛鉤與無沙箱設計,提供高度開放但安全自負的體驗。
  • 語言模組策略分歧:小麥注音採 Formosa::Gramambular2(原為 DAG-Relax,2026 年 2 月(PR#777)起改為 DAG-DP/Viterbi)搭配 Formosa::Mandarin;唯音自研 Homa(次世代 DAG-DP 組字引擎,前身為 Megrez),針對就地加詞、UTF-8 游標、候選輪替、上下文鞏固與自訂權重做最佳化。
  • 候選窗與 UX:唯音第四代田所選字窗「我修院」採前後端分離、支援橫/縱排矩陣、Unicode 資訊與原生捲動;小麥注音維持 Voltaire(現為 CandidateUI 套件)+ VoiceOver 支援並提供熱鍵升頻/排除介面。
  • 多排列與拼音支援:Tekkon 引擎提供十一種注音排列與六種拼音系統並可同時顯示拼音,遠超 Formosa::Mandarin 的固定排列設計。

歷程年表與版本世代

唯音的開工點位於 vChewing-macOS-AncientArchive 倉庫提交 5e0978b,首個公開版 1.2.0 對應 4083f18。下表將 1.2.0 至 4.0.0 的重點演進濃縮成可引用的章節索引,便於在白皮書各處敘述時指涉具體世代。

時間段 / 版本 主要節點(含提交參考) 關鍵成果與影響
起始重構期
(2021 Q4~2022 Q1)
1.2.0 4083f18 至 1.3.x 1e7459a~e39384c
從小麥注音 2022 年初狀態 fork;Swift 重寫計畫啟動。 逐步淘汰 ObjC++,建立 Swift 版本的輸入調度、組字雛型。
Swift 化深化期
1.4.x 04d4c60~1.5.x 07a6a51
Tekkon 並擊原型、Megrez 初版(沿用 DAG-Relax)、通知飄窗第一輪改寫。 注音排列擴充,CapsLock/Shift 模式控制雛形;浮動組字窗概念成形。
安全與 UI 鞏固
1.6.x 96453d0~1.9.x 345c03d
浮動組字窗原型、就地加詞重寫、通知飄窗第二版。 奠定強化型組字區思路,調整候選窗與偏好設定架構。
Megrez 第二代落地
2.0.0 5327825
Swift 版本 Megrez 正式成為主力組字引擎,CandidatePool 雛型完成。 Swift 模組化里程碑,為後續獨立 Package 化奠基。
模組拆分與安全化
2.3.x~2.5.x
KBEvent 前身引入、FolderMonitor 由 FSEventStream 改寫、工具提示改 NSAttributedTextView。 夯實輸入訊號管線;就地增刪詞流程與縱排提示初具規模。
浮動組字窗安全模式
2.6.x
2.6.0~2.6.2 SandBox 策略整理、客體黑名單機制,SecureEventInput 偵測雛形。
Swift Package 化
2.7.x
2.7.5 通知飄窗第三版、模組全面拆包、IMK 選字窗封裝。
田所選字窗世代交替
2.8.0~2.8.9
SwiftUI 田所初版→CoreGraphics 第三代;磁帶模式(CIN2)首發。 前後端分離 CandidatePool 成熟,橫/縱矩陣顯示、Electron App(EApp)相容策略萌芽。
CIN2 磁帶與字根反查
2.9.0~2.9.8
2.9.3 SP2、2.9.5 SP2、2.9.8 簡碼選字、字根反查、就地增刪詞即時生效;使用者詞庫整理器優化。
語彙編輯器雙平台
3.0.0 系列
3.0.0 SP3 SwiftUI / Cocoa 語彙編輯器並存,MainAssembly Package 化,單元測試回歸。
InputToken 與多輸出
3.1.x~3.3.x
3.1.0 SP1、3.3.0 注音反查、Ruby/INMU/盲文鋪墊、InputToken 巨集系統。
資料格式演進
3.4.x
3.4.0~3.4.9 組字區即時預覽、原廠辭典 JSON 化、Tekkon 防呆。
田所第三代與安全巡檢
3.5.x~3.6.x
3.5.3、3.6.2、3.6.3 CoreGraphics 田所第三代、SQLite 辭典、偏好設定備份、SecureEventInput 警示。
KBEvent 與游標操作
3.7.x
3.7.0~3.7.4 KBEvent Struct 正式上線、Alt 游標移動、InputToken 擴展。
CandidatePool 服務化
3.8.x
3.8.1~3.8.6 Unicode 資訊、服務選單、盲文輸出、JSON Dump、Electron App 自動浮窗、Swift Concurrency 全面導入。
Megrez 第四代
3.9.0~3.9.2
3.9.0(Dijkstra)、3.9.2(POM 修訂) 採最佳化 Dijkstra,並行輸入法控制元件重構、ChatGPT 黑名單。
Megrez 第五代
4.0.0~4.0.6
DAG-DP、POM(野獸常數)、FolderMonitor Actor+Debounce、Sandbox 整併 去除上游半衰模組依賴,安全機制統合,田所選字窗玻璃特效自適應。
效能與體驗優化
4.1.0
ARC 物件釋放管理優化、POM 防抖機制、羅馬數字輸入、候選字朗讀 改善能耗與記憶體管理,新增羅馬數字輸入模式與 VoiceOver 輔助功能。
Hotenka v2.0 與 CNS 過濾改良
4.3.5 ~ 4.3.7
Hotenka 繁簡轉換引擎升級至 v2.0(SQLite → StringMap);CNS 單讀音漢字改降權不濾除;CIN2 磁帶快取與 iCloud 書籤相容修復。 提升磁帶模式可靠性,改善沙箱書籤與 macOS 26.4.1 iCloud Drive 相容性。
Homa 引擎世代
4.4.0
Megrez → Homa 全面替換;LX_Perceptor 升級;VanguardTrie.TextMapTrie 原廠辭典;拼音無調 auto-chop;LMCoreEX 前綴匹配;多輪長句效能優化。 次世代組字引擎落地,拼音模式體驗與效能大幅提升。
維護與體驗精修
4.4.1~4.4.7
4.4.7 偏好設定關鍵字檢索;辭典/組字權重修復;全字庫資料更新。 完善 4.4.0 Homa 落地後的體驗細節。
田所第四代與 IMK 重構
4.5.x
4.5.1 田所選字窗第四代「我修院」(原生捲動);空格鍵三態;4.5.5~4.5.7 IMK 交互層全面 MRC 化、純記憶體位址傳遞。 解決 CapsLock 快速切換中英輸入法的卡頓與孤棄 controller 記憶體堆積。
磁帶與記憶體工程
4.6.x
4.6.0 CIN v2.7 通配字元;4.6.1 記憶體利用效率重構;4.6.2 棄用同捆 SQLite 與 LineReader;4.6.3 狂拼模式首發。 磁帶支援「Shift+?」通配字元;狂拼(連續組句)現身。
狂拼進化與漢字轉換整合
4.7.x
4.7.0 簡拼整詞、替代切分候選、臨時記憶融入 n-gram、漢字轉換三態(當代繁體/康熙/JIS)、Homa trigram;4.7.1 Intel 效能改良。 拼音打字體驗全面升級;康熙/JIS 獨立模式整併為單一轉換模式。
先鋒引擎與中英混打強化
4.8.x
4.8.0 先鋒引擎套件正式啟用(可跨作業系統建置)、授權調整為「先鋒引擎 LGPLv3+其餘 MulanPSLv2」、Aqua 紀念版改由主流倉庫建置;4.8.1~4.8.4 中英混打判定強化(英數閂滯狀態、依槽序鍵入判定讀音);4.8.5 內建配置助手(網頁式分支問卷)、偏好設定頁面重新歸類。 引擎套件化與授權落定;中英混打體驗成熟;新手配置動線成形。

註:表中提交號僅列核心節點;1.3.x~1.9.x 完整 commit 清單請參考 AncientArchive (1e7459a~345c03d),2.6.2 以後則可在主倉 vChewing-macOS 以 tag 對照。

以下里程碑以 git tag --sort=creatordate 與關鍵提交為依據,並可對照官方發佈頁:

小麥注音(標籤摘錄)

  • 2024-10-21 — 2.8:詞庫補強(行政區/MOE辭典對齊)、點字數字轉換修正、可關閉錯誤蜂鳴、保留傳統注音自訂字庫、最低系統需求調整為 macOS 10.15(標籤訊息)。
  • 2025-02-10 — 2.9.0:詞庫增修、聯想詞強化(標籤訊息)。
  • 2025-02-25 — 2.9.1:修正連打一聲出現句號、偏好設定新增 Shift+Enter 聯想詞選項、加入漢語拼音輸出;詞庫更新(標籤訊息)。
  • 2025-03-04 — 2.9.2:修復 macOS 15.4 beta 安裝失敗(標籤訊息)。
  • 2025-07-07 — 2.9.3:新增重複標點循環、候選窗「+」「-」控頻、詞長上限調整為八字、詞庫更新(標籤訊息)。
  • 2025-11-18 — 2.9.4:新增羅馬數字輸入(Ctrl+\)、選字時 J/K 與 H/L 移動游標/翻頁選項、VoiceOver 朗讀候選字詞、自訂詞可夾空白、破音字與成語詞條增補。
  • 2026-01-05 — 2.9.5:精簡數字輸入轉換模式、新增以聲調鍵複寫前一字聲調的選項(終端機開啟)、小幅 UI 與詞庫修訂。
  • 2026-03-07 — 3.0:破音字標記模式(BPMFVS,配合注音字型顯示標音正確的破音字)、Gramambular2 改採 DAG-DP(Viterbi,PR#777)效能提升、最低系統需求調升為 macOS 11。
  • 2026-08-23 — 3.1:詞庫大幅修訂並擴充注音可用中文字、新增 Shift+\ 快速文字轉換(輸入羅馬拼音輸出日文假名/韓文/泰文等)、「`」鍵漢音式符號輸入、選字窗「?」字元資訊與全字庫查詢、ASCII 式點字輸出、文字服務選單破音字標註、最低系統需求調升為 macOS 13。

唯音(標籤與關鍵提交)

2022 年度版本資料取自 vChewing-macOS-AncientArchive 的鏡像歷史;由於該倉庫未保留 Git tag 實體,故以「Bump version」提交與同日合併提交對應公開版本。

2022 年初版(AncientArchive)

  • 2022-01-01 — 開工提交 5e0978b5:倉庫結構調整與子模組納入,作為 Swift 化前置作業。
  • 2022-02-02 — 1.2.0 (4083f189):首個 1.x 版本(r893)發佈,完成移轉後的初始包裝。
  • 2022-02-11 ~ 2022-03-18 — 1.3 系列 (1e7459ae~b4f72943):連續釋出 1.3.0~1.3.9b,逐步修復候選與資料(含 1.3.7 OSR2 54e853c2、OSR3 89f54cb6)。
  • 2022-03-19 ~ 2022-04-06 — 1.4 系列 (04d4c606~dcc2f7ee):1.4.0~1.4.7b 聚焦安裝相容性與候選窗修補,其中 1.4.5b be22d913 提供額外相容性修正。
  • 2022-04-11 ~ 2022-05-18 — 1.5 系列 (61d1e4ab~9a71d52e):1.5.0 大量整併 Gitee PR;1.5.1 a201ee4d 開始 Swift 化 KeyHandler;1.5.4 f43e3f59 引入 Megrez;1.5.7 0cde7469 導入 Tekkon;1.5.9 9a71d52e 增補拼音輸入與資料更新。
  • 2022-05-21 ~ 2022-06-09 — 1.6.0~1.7.0 SP2 (96453d04~98b8e920):強化熱鍵體驗、效能與多語支援,涵蓋 1.6.x、1.7.0 及其 SP 修正版。
  • 2022-06-18 ~ 2022-06-27 — 1.7.1~1.7.3 (cd8bcbd0、9acbdaeb、4bdb528f):聚焦候選列表穩定性與 bug 修補,為後續 Swift 拆模鋪路。
  • 2022-07-06 ~ 2022-07-08 — 1.7.4/1.7.4 SP2 (433b3ea5、f0a33c08):拆解 ctlInputMethod、移除 ObjC++ 橋接並加強組字調度偵測。

2022 年下半年至 2025

  • 2022-07-12 — 1.8.0(Build 1980/SP2):Tekkon v1.2.4/Megrez v1.2.8 導入(commits 1eae8198、4ff9051c、21e4aaff),新增 Alt+方向鍵選字、候選高亮調整。
  • 2022-07-18 ~ 2022-08-09 — 1.8.1~1.9.0 SP1 (62e37af4、27b51ea8、509262bf、1962455e、5ba2d518、c68d7dd1、d5f0ed4b、c7f218ae、f7e703dc):完善關聯詞、數字鍵盤支援、Starlight/Seigyou 排列、Shift/Alt 英數模式與救援修補。
  • 2022-08-11 ~ 2022-08-17 — 1.9.1 SP2~1.9.4 (a227fa84、71afd139、75e93d09、345c03db):IMKCandidates 功能定型,包含聯想詞改進、Shift/候選視窗介面調整與上下文併句最佳化。
  • 2022-08-20 — 2.0.0(Build 2000/SP1、SP2):IMKCandidates 候選窗首次啟用並快速迭代(commits 59df9a5f, 53278250, 2c52c41d),引入客製字型與視窗層級調整。
  • 2022-08-26 — 2.1.0(Build 2101):候選窗模組與 CheatSheet 文件模組化(commit 91b27c12),配合 Swift Package 拆分與 Issue Template 建置。
  • 2022-08-29 — 2.2.0(Build 2201):直書標點硬化、候選矩陣垂直排版調整以及 BookmarkManager/沙盒偏好整備(commits 83737af7, 504a1d70, 18596d52)。
  • 2022-08-31 — 2.3.0(Build 2300):啟用 Hardened Runtime、PKG 安裝流程重構(commit 1f0e58cf),建立後續沙箱部署基線。
  • 2022-09-01 — 2.3.1(Build 2310):Shift 鍵適應行為可調、InputSignal 改以協定驅動(commits 7054c4ea, c6f03b42)。
  • 2022-09-06 — 2.4.0(Build 2400/SP2):「去 Zonble 化」第一階段,InputState 換裝 Swift 架構、Emacs 熱鍵重寫(commits 1b172e41, cd379b82, 3f7d0d1b)。
  • 2022-09-09 — 2.5.0(Build 2500):PopupCompositionBuffer 與 TooltipUI Swift 套件化,DevZone 設定更新(commits 131eda08, 59b0cc1c, 2fe7123a)。
  • 2022-09-11 — 2.6.0(Build 2600/SP1-SP2):Steam 遊戲支援、直書組字窗調整、客體列表管理器導入(commits 1c43d6b3, 19c9ee84, 7d37a76e)。
  • 2022-09-15 — 2.6.2(Build 2620/SP1-SP3):沙箱修復、Tooltip 強制重建與 High Sierra 相容性調整(commits be46d1bd, c7b6fd7a, 0a1e855d)。
  • 2022-12-17 — 2.8.0:多個 Swift 套件化模組(例:Tekkon、CandidateWindow、Shared)納入專案骨架(首次加入 commit 9d077a9d、030a8cb7 等)。
  • 2023-07-30 — commit 339cfb0a:田所選字窗核心改寫(AppKit + CoreGraphics 重繪,CandidatePool/CandidateCellData 重構),正式捨棄 SwiftUI 捲動實作。
  • 2023-12-28 — 3.7.0:年終穩定版標籤(針對 macOS 14.x 調整;詳細內容見發佈頁)。
  • 2024-02-13 — 3.8.0/2024-02-17 — 3.8.1:3.8 系列釋出;田所選字窗新增碼位資訊與反查刷新(commits 424a736c, b20dfec6, e887ba01)。
  • 2025-01-28 — 3.9.0:海燈節版;Megrez 改以最佳化 Dijkstra 路徑(commit 1c3225d3),為 4.0.0 DAG-DP 過渡階段。
  • 2025-10-04 — 4.0.0:Megrez PathFinder 採 DAG 動態規劃(Packages/vChewing_Megrez/Sources/Megrez/2_PathFinder.swift),FolderMonitor Actor 化與 Debounce 完成,直書提示方案改版;同日發佈 tag 4.0.0。
  • 2025-10-09 — 4.0.1:修復選字窗選字行為故障,完善 Actor 化資料寫入操作,改善與 iCloud Drive 相容性;Megrez 更新至 v5.0.5。
  • 2025-10-12 — 4.0.2:Tekkon 更新至 v1.7.0(改用 Unicode.Scalar),新增 CIN2 v2.5 磁帶格式支援,Megrez 更新至 v5.0.6。
  • 2025-10-15 — 4.0.3:修復 POM 對正常打字行為的劫持故障,完善就地加詞控頻後的 POM 記憶清理。
  • 2025-10-16 — 4.0.4:修復就地刪詞故障,完善態械-打字控制器-會話控制器聯立單元測試體系。
  • 2025-10-29 — 4.0.5:Megrez 更新至 v5.0.7(放棄 Unigram class 化),修復熱鍵指南故障,對 POM 硬碟寫入施加防抖。
  • 2025-10-30 — 4.0.6:移除會話控制體系的過激 autoreleasepool 處理,優化先鋒語料庫建置過程。
  • 2025-11-10 — 4.1.0:修復 ARC 物件釋放管理設計缺陷,引入防抖機制改良能耗,新增羅馬數字輸入模式與候選字朗讀功能,對 macOS 26 停用 Liquid Glass 介面支援。
  • 2026-04-27 — 4.4.0:Megrez 全面升級為 Homa;LX_Perceptor 升級;VanguardTrie.TextMapTrie 原廠辭典;拼音無調 auto-chop;LMCoreEX 前綴匹配。(4.2.0~4.3.7 之單漢字控頻開關、倚天 DOS 排序開關、CNS 過濾改良等請見歷程年表。)
  • 2026-05-22 — 4.4.7:偏好設定關鍵字檢索與 4.4 系列收尾修復。
  • 2026-05-24 ~ 2026-07-29 — 4.5.0~4.5.7:田所選字窗第四代「我修院」(原生捲動)、空格鍵三態、IMK 交互層 MRC 化、CapsLock 切換卡頓與記憶體堆積修復。
  • 2026-08-01 ~ 2026-08-27 — 4.6.0~4.6.3:CIN v2.7 磁帶通配字元、記憶體利用效率重構、棄用同捆 SQLite/LineReader、狂拼模式首發。
  • 2026-08-30 ~ 2026-08-31 — 4.7.0~4.7.1:簡拼整詞與替代切分候選、漢字轉換三態輪替、Homa trigram 支援、Intel Mac 效能改良。
  • 2026-09-22 — 4.8.0~4.8.4:先鋒引擎套件正式啟用(可跨作業系統建置)、授權調整為「先鋒引擎 LGPLv3+其餘 MulanPSLv2」、Aqua 紀念版併入主流倉庫建置;中英混打判定持續強化(英數閂滯狀態、依槽序鍵入判定讀音)。
  • 2026-09-25 — 4.8.5:內建「唯音輸入法配置助手」(TypeScript 撰寫、零 npm 相依、單檔自足 HTML;產出的配置包經剪貼簿匯入,並補上偏好設定之 JSON 匯出/匯入);偏好設定頁面重新歸類;修復組字狀態下功能鍵(F1~F20)令未遞交內容消失的故障、辭典檢索快取之作廢缺口,並令中英混打模式的空白鍵貫徹空格鍵偏好。
  • 2026-09-30 — 4.8.6:「狂拼模式」擴充為「狂打模式」,分為拼音側與注音側兩個各自獨立的開關(拼音側承接既有設定值、注音側新增且預設停用;注音側另有自動切音節與聲母簡拼);中英混打的 ASCII 內容改於組字區內顯示。
  • 2026-10-07 — 4.8.7:有 CMD 鍵參與的熱鍵改為「先遞交組字內容、再交還系統」;五套 Ukelele 佈局補上含 Command 之按鍵組的 Raw Key Char Map(Chrome 與 Safari 下部分熱鍵因而恢復可用);同梱熱鍵指南改以 Markdown 為來源編譯。

背景與定位

專案角色速覽

專案 主要語言 核心維運者 目標系統 授權 定位
小麥注音 (McBopomofo) 3.1.1 Objective-C++, C++17/20, Swift OpenVanilla 核心團隊 macOS 13+ MIT Formosa::Gramambular2/Formosa::Mandarin 實作、強調穩健與開源協作
唯音 (vChewing) 4.8.7 Swift 5.9+, 極少量 ObjC Shiki Suen 等 主流版 macOS 12+;Aqua 紀念版支援 10.9 MulanPSL-2.0(先鋒引擎模組群採 LGPLv3) Swift 原生化注音輸入法、專注安全與模組擴展

名詞釐清(摘要)

  • OpenVanilla 框架:CIN 系統輸入法集合,現已不再綁定香草注音模組。
  • 香草注音 (SpaceChewing / OVIMChewing):新酷音移植,不屬於小麥注音支線。
  • 奇摩輸入法:Zonble / Lukhnos 於商業案打造;其注拼引擎為 OVMandarin、組句器為 Manjusri(並未採用 Gramambular)。
  • LibFormosa:提供 OVMandarin MK1 與 Gramambular MK1 引擎,是小麥注音語言模組核心。

架構剖析

模組對照(概要)

面向 小麥注音 3.1.1 唯音 4.8.7 來源參考
輸入訊號 KeyHandler (Objective-C++) + KeyHandlerInput (Swift struct) InputHandler (Swift) 直接擴展 NSEvent / KBEvent mcbopomofo/Source/KeyHandler.mm;vChewing_OSNeutral_LibVanguard/Sources/LibVanguard/InputHandler/InputHandler_Handle*.swift
態械 InputState 類別階層(NSObject) IMEState / IMEStateData 單一 struct + protocol mcbopomofo/Source/InputState.swift;vChewing_OSNeutral_LibVanguard/Sources/LibVanguard/Session/IMEState.swift
組字引擎 Gramambular 2 (C++, 原為 DAG-Relax,2026 年 2 月(PR#777)起改為 DAG-DP/Viterbi) Homa (Swift, DAG-DP;前身 Megrez 3.9 系列曾採強化版 Dijkstra) mcbopomofo/Source/Engine/gramambular2;vChewing-LibVanguard/Sources/Homa(前身 Megrez)
聲韻並擊 Formosa::Mandarin (C++) Tekkon (Swift) mcbopomofo/Source/Engine/Mandarin;vChewing-LibVanguard/Sources/Tekkon
候選窗 Voltaire(現為 CandidateUI 套件,Swift Cocoa) 田所選字窗第四代「我修院」(Cocoa + CoreGraphics,自繪矩陣,原生捲動,前後端分離) mcbopomofo/Source/NonModalAlertWindowController.swift 等;vChewing_CandidateWindow
安全 無沙箱;允許就地腳本掛鉤 macOS Sandbox、浮動組字窗強化模式、客體管理器白名單 mcbopomofo/add-phrase-hook.sh;vChewing_PopupCompositionBuffer/Sources/PopupCompositionBuffer/PopupCompositionBuffer.swift、vChewing_OSNeutral_LibVanguard/Sources/LibVanguard/Session/
字典 Parseless LM (TXT) + 使用者詞庫 TXT VanguardTrie.TextMapTrie 原廠詞庫 + 使用者 TXT,內建整理器 mcbopomofo/Source/LanguageModelManager.mm;vChewing_OSNeutral_LibVanguard/Sources/LexiconAssembly/
監控 FSEventStream DispatchSourceFileSystemObject + Actor + Debounce Packages/FSEventStreamHelper;DanielGalasko_FolderMonitor 改造

輸入訊號管線

  • 小麥注音:KeyHandlerInput 將 NSEvent 轉換成內部 struct,KeyHandler 依狀態機驅動。Emacs key 等特殊鍵需逐層傳遞。
  • 唯音:直接對 NSEvent 擴展 InputSignalProtocol,並提供 KBEvent 克隆以 struct semantics 處理;在訊號入口即翻譯 Emacs 熱鍵並塞入狀態資訊(例如直書模式)。

態械設計

  • 小麥注音:每種狀態為獨立子類別,依賴 NSStringUtils 處理 UTF-16 範圍;UI 資料(NSAttributedString)與狀態緊耦合。
  • 唯音:IMEState + IMEStateData 拆分資料與行為,預設以 UTF-8 游標記錄,僅在回傳 IMK 時投影到 UTF-16;就地加詞/刪詞/降頻、Tooltip 顏色與候選過濾皆以 value-type 快照儲存。

組字與語言模型

  • Gramambular 2:原採 DAG-Relax,與 Formosa::Mandarin 成熟整合。2026 年 2 月 2 日(PR#777,ChiahongHong)後改採 DAG-DP(Viterbi 動態規劃),與唯音在組字演算法的核心思路殊途同歸、但實作細節相異。
  • Megrez:幾代演進後於第五代採 DAG-DP(2025 年 10 月 v4.0.0 實裝,早於 Gramambular MK2 隔年 2 月的同類改動),自底向上計分,支援字詞/讀音長度不等、就地標記游標、JSON 行為分析;第四代 Megrez 曾使用自訂優先佇列 Dijkstra 以優化長句效能。

聲韻並擊與拼音

  • Formosa::Mandarin:固定排列、專注傳統注音輸入。
  • Tekkon:支援十一種注音排列(含動態排列)與六種拼音系統,可於注音並擊時同步顯示拼音;對 JIS 小鍵盤與聲調鍵覆寫提供客製行為。

候選窗與 UI

  • 小麥注音:Voltaire 選字窗(現以 CandidateUI 套件實作,Swift Cocoa)支援 VoiceOver;自 2.9.3 起提供熱鍵升頻(+)與排除(-),但不支援矩陣佈局;字元資訊需於選字窗按「?」查詢(3.1 起含 Unihan 資料)。
  • 唯音:田所選字窗第四代「我修院」使用 CandidatePool 前後端分離;支援橫/縱排矩陣顯示、Unicode 資訊、CIN 字根反查、右鍵控頻/刪詞、原生捲動(4.5.1+)、介面字型針對簡繁模式自動切換(需在開發道場啟用)。 (註:自 v4.2.0 起,針對單個漢字的升權/降頻/排除操作之開關已被移至「偏好設定 → 開發道場」,預設為關閉;當此開關未啟用時,透過輸入法介面對單漢字執行的升頻/降頻/排除操作將被禁用,且使用者片語辭典中已存的單漢字升降頻覆寫亦不會生效。此前啟用過該選項的使用者在升級到該版本時,該選項會被強制取消勾選;使用者可在升級後重新啟用,但後果自負。另自 v4.2.0 起亦新增「對所有單漢字候選字強制施加倚天中文DOS系統排序」開關(預設啟用),將覆蓋打字學習模組對單漢字候選字排序的影響;逐字選字模式仍始終遵循倚天 DOS 排序。)

安全與沙箱

  • 小麥注音允許在 defaults write 後就地執行腳本;無沙箱束縛,FSEventStream 監控可能放大外部干預風險。
  • 唯音使用 Sandbox Profile 限制檔案與進程互動,浮動組字窗可針對特定客體 App 為組字區加殼,防止 markedText 被探知;新增 FolderMonitor Actor 化並加入 Debounce,降低 iCloud 同步抖動造成的 Hang 風險。

功能矩陣(節選)

功能 小麥注音 3.1.1 唯音 4.8.7 備註
注音排列 大千傳統、倚天傳統、IBM、許氏、倚天 26 上述+神通、精業、偽精業、酷音大千 26、星光、劉氏 唯音動態排列可因模式調整鍵位
拼音 單一漢語拼音模式(第 6 種鍵盤排列,聲調以數字 1–5 標記,未提供說明文件) 漢語、國音二式、華羅、耶魯、通用、韋氏;並擊提示拼音;狂打連續組句(拼音側 4.6.3+、注音側 4.8.6+)並支援簡拼整詞(4.7.0+)  
CIN 表格 ✖️ ✅(磁帶模式支援 CIN2 v2.7)  
Emoji 組態 原廠 Emoji,無獨立詞頻 專屬使用者 Emoji 辭典 + 開關  
羅馬數字輸入 ✅(2.9.4+ Ctrl+\)三種風格:ASCII 小寫、Unicode 大寫、Unicode 小寫 ✅(4.1.0+ Shift+Cmd+R)1-3999 範圍,Unicode 大小寫 & ASCII 大小寫 兩者的實作方式與各自在輸入法當中的集成方式各異,用以呼叫該功能的方法也不一樣。
就地加詞/刪詞/控頻 就地僅支援加詞;選字窗內可升頻(+)/排除(-) 加詞、刪詞、升降頻(Shift+Command+Enter 降頻) (註:自 v4.2.0 起,對單個漢字的升權/降頻/排除操作之開關已被移至「偏好設定 → 開發道場」,預設為關閉;當此開關未啟用時,透過輸入法介面對單漢字執行的升頻/降頻/排除操作將被禁用,且使用者片語辭典中已存的單漢字升降頻覆寫亦不會生效。) 支援詞音不等長
選字窗刪詞/控頻 鍵盤交互:+/= 升頻、-/_ 排除(自 2.9.3 起) 滑鼠右鍵選單刪詞、升降頻(註:自 v4.2.0 起,對單個漢字的升權/降頻/排除操作之開關已移至「偏好設定 → 開發道場」,預設為關閉;未啟用時,使用者片語辭典內對單漢字的覆蓋不再生效。)  
候選字朗讀 ✅(2.9.4+)VoiceOver 可朗讀候選字詞(系統 SQLite 輔助功能資料庫);「?」鍵選單可主動朗讀(2.7+) ✅(4.1.0+ 可設定)查詢使用者自訂關聯詞語資料庫 唯音沿用了自身本來就有的語音朗讀模組
CapsLock 強制英文忽略 ✖️ ✅ 顧及微軟新注音習慣
候選矩陣 ✖️ ✅ 橫/縱排矩陣(田所)  
Unicode 資訊 「?」鍵字元資訊(3.1 起含 Unihan 名稱/讀音/倉頡/日韓讀音等) ✅(田所)  
熱鍵輪替候選 僅 (Shift+)Tab Shift(+Alt)+Space、Alt+↑/↓(橫)/Alt+←/→(縱) 唯音納入直書焦點鞏固;4.5.1 起空格鍵三態(插入空格/呼出選字窗/輪替候選)
Alt 熱鍵佈局切換 ✅(終端設定) ✖️(避免 NSMenu 攔截)  
漢音符號 自 3.1 起完整漢音式符號輸入(「`」鍵標點清單,逐鍵對應符號組) | 完整漢音符號+分層符號表(可自訂 symbols.dat)    
簡繁支援 轉換(僅 OpenCC,詞組級) 原生繁/簡詞庫 + Hotenka 詞組轉換 + JIS/康熙選項 唯音就地加詞跨模式同步
W3C Ruby mac 版自 2.7 起可輸出注音 HTML Ruby(Ctrl+Enter);Linux 版支援注音;無漢語拼音 Ruby 支援注音(教科書式)、漢語拼音 Ruby  
日期巨集 ✅ ✅(並新增銀行大寫數字等)  
連續打字(不完整讀音的連續組句) ✖️ ✅ 分為「拼音狂打」(4.6.3+ 之狂拼模式,預設啟用)與「注音狂打」(4.8.6+,預設停用)兩個各自獨立的開關;兩者皆以副駕選字窗呈現候選,且須同時摁 Shift 方能就地在該窗選字 注音側另有「自動切音節」與「聲母簡拼」(例如 ㄍㄋㄋ 得「狗男女」),空格鍵於該側仍為陰平鍵
配置助手(新手配置嚮導) ✖️ ✅(4.8.5+)內建網頁式分支問卷,最少四頁即可產生一組現成配置;產出的「配置包」經剪貼簿匯入,偏好設定亦可整個匯出/匯入為 JSON 檔案 問卷之題庫僅涵蓋設定介面已曝露的選項,產出值以契約測試確保唯音一概收得下

字典與資料管理

  • 小麥注音:Parseless LM 以排序 TXT(data.txt)儲存,採 memory-mapped 檔案與二分搜尋(C++20,選配 ARM NEON 加速);FSEventStream 監控使用者詞庫;就地加詞時執行 EOF 修復與可選腳本。
  • 唯音:原廠詞庫採 VanguardTrie.TextMapTrie(排序鍵索引 + 二分搜尋 + 前綴範圍掃描),使用者詞庫仍以 TXT 儲存但由內建整理器重整;學習權重資料以 JSON 保存,可於偏好設定清除;FolderMonitor 透過 Actor + 去抖動防止高頻事件連鎖。

配置助手與偏好可攜性

這是兩者之間一項結構性的差異:小麥注音沒有對應物。

面向 小麥注音 3.1.1 唯音 4.8.7
新手配置嚮導 無 「唯音輸入法配置助手」:內建之網頁式分支問卷,最少四頁即可產生一組現成配置
設定的可攜性 依賴系統偏好檔,未提供交換格式 偏好設定可整份匯出/匯入為 JSON;助手產出的「配置包」為該格式之超集
偏好鍵之交換範圍 — 119 條偏好鍵,其中 6 條列入不可交換之黑名單(Sandbox 路徑、介面語言、暫態旗標)
選項標籤之單一真源 — vChewingSharedCLI 之 dump-userdef-metadata 動詞導出型別/值域/預設值/四語系標籤
助手的題庫界線 — 僅涵蓋設定介面已曝露的選項,由掃描 SettingsUI / SettingsCocoa 之源碼生成,並以測試守住「題庫 ⊆ 曝露面」

架構要點:

  • 助手與輸入法之間沒有 IPC、也沒有 URL scheme,唯一的傳遞媒介是剪貼簿。助手本身是 TypeScript 撰寫、零 npm 相依的單檔自足 HTML(CSS 與 JS 皆已內聯),工具鏈的外部相依只有一個原生版 tsc,工具宿主為 macOS 內建之 JXA。
  • 偏好交換格式落於 Shared 模組:destructureExchange(_:) 無條件摘除根層一切以 __ 起首之鍵(中介辭典 __UserDefMeta 即藉此承載配置名稱與說明)、importFromDictionary(_:) 為逐鍵驗證之真源、diffAgainstCurrent(_:) 提供純查詢之差異計算、PrefMgr.reconcileAfterExternalPrefsImport() 負責匯入後之和解(補上 13 條帶有 didSet 副作用之偏好鍵不曾被觸發的長年缺口)。現行四條匯入路徑——設定介面之檔案匯入、檔案拖放、剪貼簿匯入、CLI 之 --import-prefs-json——共用同一收尾。
  • 契約測試(AssistantContractTests)以助手自身核心邏輯產出之 fixture 為輸入,斷言唯音一概收得下,從而使「助手問了唯音不收的值」在 CI 階段即被攔下。

安全與隱私對照

項目 小麥注音 唯音
沙箱 ✖️ ✅ (限制檔案/進程存取)
浮動組字窗 ✖️ ✅(強化模式,可針對客體 App 指定)
網路連線 自動檢查更新(預設啟用) 手動啟用檢查更新
就地腳本 ✅(可在 defaults 中設定) ✖️(禁止執行)
資料上傳 無 無(沙箱防護)

典型風險與緩解:唯音以浮動組字窗阻斷 markedText 被輪詢、SandBox 避免腳本濫用;仍無法抵禦系統層級鍵盤側錄。小麥注音提供彈性但須使用者自律,腳本掛鉤若被濫用可能造成資料外洩。

無障礙與國際化

  • 介面語言:小麥注音提供繁中與英文;唯音支援繁中、簡中、日文、英文。

效能觀測(vChewing 4.0.0 實測)

量測環境:macOS 14.0 (arm64e)、Apple Swift 5.10 toolchain。

指標 測試方法 結果
候選生成平均延遲 swift test --skip-build --filter MegrezTestsAdvanced/test08 約 5 ms
DAG-DP 長句評分 test09_Compositor_StressBench 0.0030 s(建圖耗時 24.6 s)
記憶體峰值 /usr/bin/time -l swift test --skip-build --filter …test09… 117 MiB RSS
學習權重寫入 test10 0.010 s / 52.7 MiB RSS
FolderMonitor 去抖動 360 原始事件 → 1 回呼 99.7% 抑制

(小麥注音官方未提供對等測試指標。)

維運與生態

  • 唯音拆分 20+ Swift Packages(Tekkon、Homa、CandidateWindow、TooltipUI 等),利於跨平台或未來延伸;同時保留 Aqua 紀念版支援舊系統(Swift 5.9 上限)。
  • 小麥注音維持 Xcode 專案一體化,著重 Stability;語言模型沿用 LibFormosa 生態,便於與其它 OpenVanilla 模組共用資源。
  • vChewing integrate HangarRash_SwiftyCapsLockToggler, ShiftKeyUpChecker 等套件以強化體驗;相對地 mcbopomofo 使用 NSStringUtils、FSEventStreamHelper 等傳統依賴。

既知限制與後續規劃(摘錄)

  • 大篇幅簡繁轉換:Hotenka 著重詞組級互換,不適合批次文件;建議使用外部工具。
  • Emacs 鍵支援範圍:唯音現支援 Ctrl+N / Ctrl+P 等常用移動鍵;其它(如 Ctrl+K)仍在評估。
  • SwiftUI 選字窗:因效能犧牲已退場;待 SwiftUI 繪製效率提升再評估混合方案。
  • SandBox 限制:無法防範使用者允許的系統層錄音工具。

參考原始碼位置

  • 小麥注音:mcbopomofo/Source/Engine/gramambular2/、mcbopomofo/Source/Engine/Mandarin/、mcbopomofo/Source/InputState.swift、mcbopomofo/Source/KeyHandler.mm。
  • 唯音:vChewing-LibVanguard/Sources/Homa、vChewing-LibVanguard/Sources/Tekkon、vChewing-macOS/Packages/vChewing_OSNeutral_LibVanguard/、vChewing-macOS/Packages/vChewing_CandidateWindow/。
  • 唯音之配置助手:vChewing-macOS/ValueAdd/WebConfigAssistant/(建置來源)、vChewing-macOS/Packages/vChewing_SettingsUI/Sources/SettingsUI/PrefsExchange.swift、vChewing-LibVanguard/Sources/Shared/UserDef/UserDef.swift(偏好交換格式)。

建議引用格式

  • APA:vChewing 專案團隊(2026)。《唯音輸入法技術白皮書(重構版)》版本 4.8.7。取自 https://vchewing.github.io/TechnicalWhitePaper-AIWritten.html
  • MLA:vChewing Project Team. vChewing Input Method Technical Whitepaper (Rewritten). Version 4.8.7, 2026. Web. https://vchewing.github.io/TechnicalWhitePaper-AIWritten.html
  • Chicago:vChewing Project Team. 2026. vChewing Input Method Technical Whitepaper (Rewritten). Version 4.8.7. Accessed YYYY-MM-DD. https://vchewing.github.io/TechnicalWhitePaper-AIWritten.html

版本註記

  • 本白皮書為 TechnicalWhitePaper.md 的重構版,以資訊架構重整、聚焦關鍵差異與安全模型。原始文檔保留作為歷史背景與細部敘述參考。適用版本:vChewing 4.8.7;小麥注音側對照 v3.1.1(2026-09 版)。