Contents ...
udn網路城邦
使用 AI 來輔助「寫程式」:以 SiaTaigi GTK 3 程式為例
2026/02/25 19:18
瀏覽473
迴響0
推薦5
引用0
筆者從昨天晚上 6 點 (2026 年 2 月 24 日) 到今天下午 6 點 (2026 年 2 月 25),花費一天的時間,透過 Microsoft Copilot 以及 Gemini 的輔助 (主要還是 Copilot),把 English to POJ 的基本功能完成;Well,有 AI 來輔助寫程式真地可以少掉許多查詢與閱讀的時間,感覺真的很不錯!

新增功能:

在 GTK 3 TextViewWidget 當中鍵入一個英文字,cursor 緊停在該字後方的情況下,按下 Ctrl+Enter 組合鍵,就透過 Hashing 去找對應的「台語白話字」(POJ),若有找到就將該英文字代換成 Pe̍h-Ōe-Jī。

例如:鍵入 fish 之後按下 Ctrl+Enter 鍵,第一次會代換成 hî,再按一次 Ctrl+Enter 會代換成 hî-á,繼續按就是又回到 hî (looping)。

來看一下測試的截圖畫面:





第一次按下 Ctrl+Enter:




第二次按下 Ctrl+Enter:


第三次按下 Ctrl+Enter 會回到 hî (looping);

來看一下 GTK 3 的程式碼,如何在 TextViewWidget 當中由 insert cursor 所在位置去抓出前一個字 (測試用的程式碼,測好後整合到 SiaTaigi):


再讓大家看一下筆者所建立的 Eng2Poj 資料庫 (a static array),這些資料會經由 Hashing Function 存放到對應的 bucket 當中,collision 發生時採用最簡單的 linked list 方式來解決 (這 Hashing Function 是多年前筆者所寫的版本,It is a universal hash object, it just maintains a bucket array and keeps the function pointers to hashing function, comparison function, and dump function; users(callers) have to define and register their own hashing, comparison,  and dump functions.)。




然而,上述的程式碼遇到 "daughter-in-law" 時會發生問題,因為 GTK 3 的 API:

   gtk_text_iter_backward_word_start()  與 gtk_text_iter_forward_word_end()

會將 hyphen "-" 當成 word separator,以致於往回抓到的字是 "law",而不是完整的 "daughter-in-law"。







怎麼辦?還要回頭去查 GTK Documentation,查找有哪些 APIs 看起來好像可以用嗎?其實 GTK Official Site 的 Documentation 寫得不太好(GTK 做得很不錯,但 Documentation 寫得很爛),因為其說明實在是太過簡略而常常說得不清不楚,相關的APIs 如何協同合作以完成一個小工作的 code snippet 非常非常少,以致於大多數還得自己寫測試程式去 try APIs,那實在是非常花費時間與心力,即使有些議題在 Stack Overflow forum 可以找到相關討論與分享,但不一定找得到有用的資訊,畢竟使用 GTK 來開發應用程式的人不多,有時候搜尋了老半天終於找到相關議題,好高興呀!結果讀了之後,發現沒有人回答、或是回答的內容不對、或只是建議與引導(沒有回答問題)、抑或所回的 code snippet 無法運作等等;
於是,筆者就想說「找 AI 問看看」,沒想到問了之後,Copilot 的回答還蠻清楚扼要的,而且大部分其所回答的 code snippet 都還蠻切題的,真的是幫筆者省下了不少時間與心力!(真的很感謝 Copilot,沒想到免錢的版本就已經這麼好用)

備註:其實本來是在想,看看 AI 能不能查到可以直修改 TextViewWidget 的 word separator 的 API 或其它更簡潔的方法,不過似乎沒找到,於是就給了「倒回去逐次檢查每個字元」的 code snippet,雖然這解法實際上沒有幫到大忙,不過也是有省下一些心力與時間,不過其它問題其實都回答得還不錯,部分解答是筆者以前在論壇上找了許久都還找不到的。




筆者將 Copilot 所回答的 code snippet 整合到 SiaTaigi 程式中,測試後的確可以達成功能。






繼續測試:





AI 實在是太棒了,利用它們來輔助寫程式,的確可以省下不少心力,筆者還就此順便要求它們寫一些程式,例如 system UUID、system GUID、MAC addresses ... for MSYS2 platform 等等;就目前的測試結果而言,筆者覺得 Copilot 的程式能力比 Gemini 好上一些,雖然兩者是互有輸贏 (有時候 Copilot 的 code snippet 可以運作,Gemini 的不行;有時候是 Copilot 的不行,而 Gemini 的可以運作)。


第一項新增功能已經完成,剩下的就是要建 database,不知道 AI 懂不懂台語白話字,不然就可以透過它幫忙建立資料庫。


好了,今天的分享就寫到這裡!Have a nice day!



有誰推薦more