The Old Blog Archive (Traditional Chinese), 2004-2009

“hello, world!” 與浦島太郎

在日本民間故事《浦島太郎》(Urashima Taro) 裡,因好心救了落難的海龜,而被邀請入龍宮一遊的浦島太郎,渾然不知在龍宮的一晝夜間,陸上的世界已經悠悠過了三百年。在上岸前,龍宮公主給了太郎一個盒子,做為給太郎的紀念。太郎上岸後,打開了盒子,突然間,太郎從一位身強體壯的捕魚少年,變成了一位白髮蒼蒼的老人。

我最近就碰上了一件可以稱得上是浦島太郎般的事。

前一陣子我下載了新版的MinGW。這是一套奠基在 gcc (GNU C Compiler)、供Windows環境使用的C/C++編譯器。我好些年前就用過這套東西,用以取代先前流行的 djgpp

拿到新的編譯程式,想當然而,一定要拿個什麼程式來測試。拿什麼好呢?我的習慣還停留在寫一個 "hello, world!"。

然而,C++版的 "hello, world",竟然無法在新版的MinGW上編譯了。滿篇我完全看不懂的編譯時期錯誤,從我的 stdout(就是命令列模式的螢幕啦)上傾洩而出。

我發現,世界變了。

好心的朋友跟我說,不不,程式已經不是這樣寫的了。"hello, world" 的現代版應該是長成這個樣子的:

01: #include <iostream>
02: using namespace std;
03: int main()
04: {
05:     cout << "hello, world!" << endl;
06:     return 0;
07: }

為了解釋方便,每行程式前面我加上了行號。首先,iostream.h 消失了,取而代之的是不需要 .h 的形式。02行的namespace 是新東西。雖然我好些年前就已經聽聞,沒想到已經是正式的標準了。而且,最重要的是──沒有這第02行的「使用命名空間」指令,第05行的 cout 物件,編譯器是不認的!

「你難道不知道嗎?自從STL (Standard Template Library) 成為標準後,由於太多人使用相同的名字,命名空間被用光了,所以才會把 iostream 的東西放 std 命名空間裡呀!」好心的朋友是這樣跟我解釋的。

我覺得不可思議。

以前覺得有些事情是不會變的。沒有想到連教科書上做為C++語言的第一個範例,那個被認為應該是恆久不變的入門教材,新版的編譯器竟然不認了。兒童相見不相識,怒問客人的code是從哪個時代弄來的,滿紙荒唐。

這個時候我才突然想到,我不再碰觸任何跟程式有關的東西,讓我算算…… 從1994年到現在,正好整整十年的時間。

十年了。我最後一個還需要用到 makefile 的「計劃」,是整整十年前的事情了。在這之間,雖然偶爾還會從堆滿灰塵的 .zip檔中,挖出舊的程式和編譯器,玩弄一些小東西,但大體上來說我是遠離了寫程式的世界。完完全全地遠離了。

如今,連最簡單的程式,面貌都變了。而我,像是浦島太郎那般,打開了MinGW的盒子,發現自己從當時一個高中快畢業的小毛頭,來到了現在這個奇異的階段。

十年可以改變的事情很多。Linux成熟了,而「正義的味方」不再只有gcc,還多出了Perl、PHP、Python等所謂的 "3P"。中土世界因為Java而多了許多不必要的困擾。至於「黑暗料理界」則多出了ASP、C# (唸做 "C Sharp")、.net,以及在它們之前,每一兩年就新推出、被人大似吹捧的新資料庫存取模型(族繁不及備載)。十年前大家都還在用榆樹 (elm)、松樹 (pine) 在閱讀電子郵件,如今只剩下極少數的人沒被「外觀快遞」給收服。這樣的事還有太多太多。更不用提那些十年來起起落落的火燄舌戰,以及依然有效的摩爾定律。可以確定的是:雖然正義的味方越來越茁壯,但人們卻還沒有看到黑暗料理界倒台的可能 [1]

我把我的故事說給了 ilya 聽。他說:「能夠自廢武功到你這種程度,也真算是不容易了。」

是啊。

ilya問我當初為什麼做了那樣的選擇,我說那是個難回答的問題。難回答,不是說答不出來,而是那是個需要花時間說明白的過程。而那過程實在是太私人了。叨叨絮絮的成份多,虛妄、愚昧、無力、嘔吐(存在主義式的)的經歷也有。總之我目前都還不認為那是個我有能力處理(而你可能有興趣想聽)的故事。至少在我明白那整個過程的意義之前是如此。

但,不管怎麼說,在看似感傷的敘事線後,最近我倒是有了新的啟示:就在我慢慢恢復、或者說重新點燃了對電腦和技術世界的胃口後,我突然發現像我這樣一個全無武功(或者誠實地講是武功全無,後面這個用法預設了「先前有武功、後來卻丟失」的前提)的人,竟然對著各種新奇的東西充滿了好奇和興趣。我簡直,如新手般,墜入了科技眩目的世界中:

Miranda [2]: O Wonder!
How many goodly creatures are there here!
How beauteous mankind is! O brave new world!
That has such people in’t! (Shakespeare, The Tempest, 5.I)
米蘭達:「人類多麼地美!啊!美麗的新世界,有這樣的人在裡頭!」
(莎士比亞,《暴風雨》,第5幕第1景)[3]

附註

  1. 誰知道呢?當年某個為錢眼開的傢伙,他如果當時把做為DOS前身的程式碼丟進毀滅之山,那麼一切可能早就結束了。
  2. 做為某種令人不安 (uncanny; unheimlich) 的巧合,我的第一台notebook就叫Miranda。
  3. 中譯是從http://www.bwmc.org.tw/Tfr/tfr_02/tfr-02-01.htm找來的。

8 Responses to ““hello, world!” 與浦島太郎”

  1. on 03 Mar 2004 at 21:51epicure

    雖然我並沒有龍宮一遊,上次寫 C 程式大概也是將近八年前的事情了(印象中並沒有寫過除了玩弄 cout 之外的 C++ 程式)。因此讀到這篇文章我也驚駭不已。這,怎麼會改了呢?怎麼可以改呢?這是標準耶,標準改了,不是跟公分長度變了一樣駭人的事情嗎?

    不過也好。luki 要不要乾脆就來投靠函數語言陣營呀? :)

    有點好奇想知道 C++ 到底被用得多廣。我從沒編譯安裝過 C++ 寫的程式。以往都是 C, 近來出現一些 Java 程式,連 ML 都有。就是沒有 C++。於是在我的印象中,C++ 是個龐大、生不逢時、處境尷尬的怪物。這樣的印象不知合不合實情。畢竟我很久沒接觸學校外面的東西了。稍微搜尋一下的結果,似乎 C++ 與 Java 的程式設計師需求量大致打平,後者稍多一點。

    luki 知道排球規則改了嗎?老消息了,只要落地就得分,沒有先搶到發球權才能得分的事情了。我直到 03 年才知道這事情。那是看同學和敵對校比賽時,覺得看不懂比賽,一問之下才被嚇了一大跳。怎麼可以改呢?改了就不是排球了呀!我同學們大約也嚇了一跳,想不到世上有這種稀有的活化石。

    經你一提,我才發現確實難以想像如果當年 DOS 沒給 The Enemy 這樣騙去,世界會是什麼樣子。會是 CP/M 嗎?IBM 衰弱之後的反派角色該給誰演?沒有敵人,這故事怎麼演得下去呢?

  2. on 06 Mar 2004 at 13:23ljmid

    從 1984 年到 1994 年,過了十年。
    從 1994 年到 2004 年,又過了十年。
    沒關係,你現在已經可以用 Python + Tkinter (內建) 在 Mac OS X 上寫漂漂的 GUI, 然後還能跨平台在 Linux 上用…

  3. on 06 Mar 2004 at 13:25ljmid

    又,另一個好用、大家都在用的是 mutt .
    http://www.mutt.org
    “All mail clients suck. This one just sucks less.” -me, circa 1995

  4. on 10 Mar 2004 at 15:04orcas

    OS X 內附的 Python 的 Tkinter 好像少了 _tkinter.so. 只有 fink 的 tkinter 是全的。

  5. on 11 Mar 2004 at 00:05whiteg

    看到iostream也嚇一跳,我學的也是iostream.h。唔,好像是1996年的事(默)。反正現在也是幾乎甚麼都不寫了。

    mutt處理Big5跟utf8信件時不太行,有點討厭。看到有人寫elm真是眼睛一亮!

  6. on 12 Mar 2004 at 19:45b6s

    進入 STL 之後被拿掉 .h 尾巴的那些… 其實有很多 compiler 還是吃;還有更多更多語言規格方面的實作,不必換平台,只要換廠牌就搞死你。對現在還是會用到 C++ 的我來說,那真是件讓人萬分討厭的事… (這也是一種”There’s more than one way to do it?”)

    Java 挑起了許多乾脆令起爐灶革命之的風潮,不過現在 C# 跑得更遠了…

    然而,這一切的一切… 總是有人要去做。

    好多好多的 SDK,還是連 ++ 都沒有的 C 啊!*泣*

  7. on 12 Mar 2004 at 19:50b6s

    對了,再囉嗦一次,要是對「如果當年某某某沒有怎樣怎樣,今天的世界會如何如何?」這種事感興趣,可以找 Philip K. Dick 的《High Castle Man》來看看,請洽各大 p2p 軟體。:p

  8. on 05 Apr 2004 at 19:11lancetw

    我正在學:D
    Bloodshed Dev-C++ 非常好用,又是自由軟體。