網路城邦
RSS Feed Link 部落格聯播

文章數:614
的確,Claude 寫程式真地是最厲害的!
創作其他 2026/06/14 13:07:14

最近有一家中國 AI 公司,創辦團隊特地「潤」到新加坡成立公司,半年之後被 Meta 以天價收購,隨即就有中國學者與官方智庫跳出來指責說,雖然該公司註冊在新加坡,但其核心技術最初是在中國境內研發成型,且核心創辦團隊仍具有中國公民身分,因此依然受中國法律與技術出口管制的管轄;果然,四個月後,中國最高經濟規劃機構「國家發展和改革委員會」(發改委,NDRC)在 2026 年 4 月 27 日正式出手,發布禁令全面阻擋這項收購案。

好笑的事情是,現在疑似有內部的吹哨者跳出來說,其實絕大部分的程式碼,都是美國 AI 公司 Claude 寫的,雖然這項消息還未經證實,但可能或多或少,也是接近部分真實!

筆者最近就以 GTK Programs 對三家 AI 公司做測試,分別以基礎型、中階型、以及進階型的要求來測試其寫程式的能力;當然,程式語言是以 C language 為主。

基礎型的測試,三家的差距不大,但中階型就已經顯示出差異,若是指定中階程度的 Open Question 讓它們自由發揮,Claude 寫的程式就比較具有意義,而且解釋也是最為扼要清楚;當提出進階型的要求時,Wow! 差異就顯現出來了!例如,筆者對 Copilot、Gemini、以及 Claude 提出下列的要求:

Please write a GTK3 C program that uses a GtkEntry widget for text input. When the user presses Enter, the program should send the entered text to the application that previously had keyboard focus.


針對這項要求,Copilot 寫出來的版本是完全沒有做到,可說是 0 分;Gemini 的版本是可以運作,但是不穩;它的作法是將 widget 隱藏起來,讓 keyboard focus 自動回到上一個 application,然後將 GTK 的 Event Queue 清光,這裡的「清光」不是指「刪除」,而是把 Event Queue 裡面的每一個 Event 都做完,接著睡個幾個 millisecond,讓 Windows 有時間將 keyboard focus 轉回上一個 application,接著就開始將 text 透過 Windows API SendInput() 傳給 Windows;其主要程式碼如下:




if (GTK_IS_WINDOW(toplevel)) {

  // Hide the GTK application to seamlessly shift the focus back to Chrome/Notepad++.

  gtk_widget_hide(toplevel);

  // Flush the event queue of GTK.

  while (gtk_events_pending()) {

     gtk_main_iteration();

  }

  Sleep(300);

  send_string_to_ime(text_to_send);

  ...
}


Gemini 的版本的確做到了筆者所提出的要求,但經過測試是「有做到但不穩」,那資料有時候會沒送到或亂掉!此外,在整個操作過程中,筆者會去點 Notepad++ 或是 Chrome,抑或是其它的 application,在這樣的情況下,Gemini 的版本會搞錯上一個具有 keyboard focus 的 application 是哪一個。



最後,我們來看 Claude 所撰寫的版本。同樣一個要求,Claude 寫的版本最正確,它使用 GLib 的 timer mechanism 寫了一個 timer,這個 timer 每隔一段時間會去詢問:「上一次擁有 keyboard focus 的 application 是哪一個,並將它記住。」這個 timer 的主要程式碼如下:




g_timeout_add(200, track_foreground_window, NULL);   // 200 millisecond


static gboolean track_foreground_window(gpointer user_data)

{

  (void) user_data;  

  HWND fg = GetForegroundWindow();  // Win32 API: get the current foreground window

  if (fg != NULL && fg != our_hwnd) {

    sglb_prev_fg_win = fg;          // remember it if it’s not our GTK window

  }

  return G_SOURCE_CONTINUE;         // tell GTK to keep calling this function

}


請注意,GLib 的 timer mechanism 跟 Unix 的 signal handler 不一樣,因為 GLib 的 timer routine 實際上是一個 GTK Event,因此它是在 GTK 的 Event Loop 裡面跑,不是由作業系統所管轄。

在這裡順道一提的是:gtk_main() 在 GTK 4 中已經被拿掉,這讓筆者覺得有點可惜!由最早的 Xlib event loop 到 Xt event loop,程式裡都很清楚地表達了 Event Loop 的觀念,GTK 4 之前的 gtk_main() 也隱含了 event loop 的觀念,但 GTK 4 將 gtk_main() 拿掉,代之以更為簡便的寫法,筆者認為是有好有壞,壞的是有可能因此弱化了 Event Loop 的觀念,就像現在新的程式語言是把更多的事情以更為簡潔與更短的 syntax construct 來取代,這個趨勢同樣也是有好有壞,不是都只有好的一面而已;就像現在透過 AI 來幫忙寫程式是很方便,因此有人開始提倡 Computer Science 不需要再將重點放在 Data Structure 與 Algorithm,而是要學習如何使用 AI agent 來寫程式,而更為激進的人們甚至認為,Computer Science 已經不需要學習 Data Structure 與 Algorithm 了,就像有了計算機之後就不需要學習如何撥打算盤了一樣,然而筆者認為這個比喻是不恰當的類比、而且是比得不倫不類;Data Structure 與 Algorithm 學的是「如何思考」以及「常見問題類型與其常用的解決方法論」,怎麼將它拿來跟單純的計算功能來做類比?2026 年春季,美國 Berkeley 大學的學期考試,學校禁止學生使用 AI 應試,結果有好門電腦科學的課程,被當掉的學生人數是創歷史新高!其中一門 CS 10 的課程 ── The Beauty and Joy of Computing,就類似台灣的計算機概論或電腦概論課程,這課程只是基礎的內容而已,但被當掉的學生比例卻高達 35.3%!

回到正題;Claude 除了使用 GLib timer 來抓取上一個擁有 keyboard focus 的 application 之外,它將 text 送到 Windows 的方式,也是有點創意,例如 Gemini 的版本,是以一個一個字元的方式,分別傳給 Windows,而 
Claude 的作法是:先將 text 拷貝到 system clipboard,然後模擬 Ctrl + V 這個 keystroke,將這 keystroke 透過 Windows API SendInput() 傳給 Windows,這個方式除了有創意之外,還避開了 Windows API SendInput() 的一些問題;例如,如果以毫無 delay 的方式,將字元一個接著一個透過 SendInput() 傳給 Windows,結果 Windows 竟然會發生其 buffer 來不及處理而掉字的問題,筆者是分別問了 Gemini 與 Copilot 之後,才確認這個問題真的存在,因此在傳送的過程中,字元跟字元之間要稍微讓程式睡一下,例如 50 millisecond,這樣 Windows 的 buffer 才不會來不及處理!這實在是太誇張,你 Windows 自己提供的 API,竟然還會因為資料送太快而來不及處理?Well, let me guess! 你 Windows API SendInput() 是不是做了一個假設:「所有的 keystroke 都是真人、也就是人類敲的,所以資料敲入的速度不會很快!不可能幾乎沒有 delay!」如果真的是做了這樣的假設,那現在「這樣的假設」應該要拿掉了!


經過測試,Claude 所撰寫的版本,跑起來很穩定!Wow, 真的很厲害捏!

經過上述進階題目的比較,Claude 寫程式真地是最厲害的!Copilot 改到第三版都還無法正常運作,Gemini 改到第三版才達成「有做到但不穩」,而 Claude 給出的第一個版本就做對了!它真的是最厲害的!難怪疑似有吹哨者說,那家被 Meta 天價收購的牆國 AI 公司,其程式碼有不少根本不是牆國人自己寫的,而是美國 AI 公司 Claude 寫的!哈哈哈!




以上三家 AI 公司,筆者都是使用免付費版本;其中 Copilot 完全沒有限制,可以問到飽;Gemini 問太多會將模型降階,Claude 有總量限制,超過得等 5 個小時之後才能再發問,不然就是得付費升級。





 

 

最新創作
的確,Claude 寫程式真地是最厲害的!
2026/06/14 13:07:14 |瀏覽 126 回應 0 推薦 0 引用 0
台語版「葬送的芙莉蓮」EP02 ── 蒼月草!
2026/06/12 20:01:56 |瀏覽 282 回應 0 推薦 5 引用 0
台語版「葬送的芙莉蓮」EP01:How did you get so old?
2026/06/10 23:16:45 |瀏覽 328 回應 0 推薦 6 引用 0
台語版「葬送的芙莉蓮」EP01 -- Himmel 與 Frieren 的對話
2026/06/10 18:07:41 |瀏覽 375 回應 0 推薦 5 引用 0
「邊 -ing 邊 -ing」的台語怎麼講?
2026/06/08 19:24:22 |瀏覽 412 回應 0 推薦 8 引用 0

最新影像 3922658
07. 台語音標
06. 卡住 (POJ; 古早音)
05. SiaTaigi