個人簡歷
姓名:唐宗漢
曾用名:唐宗漢
現用名:唐鳳(變為女性後改名為此)
性別:男(現已做過變性手術,變為“女”)
出生年月:1981
籍貫:台灣。
唐的外表:長發,面白,十指修長。
唐的行為:說話有力,吐字清晰,語速很快,隨時攜帶自己的筆記本電腦,包括上廁所,目的是紀錄下自己的隨時會有的想法。
唐的稱號:據稱目前是台灣十大電腦高手
唐個人網址:http://www.autrijus.org/
唐的工作態度:
每天一直努力幹活直到累倒為止(唐意指:累倒,是說感覺到十分的疲勞,沾床就睡的感覺)。
唐的教育經歷:
14歲輟學,一直憑興趣自學計算機知識(自稱擁有自8086以來每個類型的計算機,現在在用一台華碩訊馳1。8G,計畫很快去買台Mini-mac),是個絕對自學成材的自由軟體者。曾去大學蹭課聽,主聽中文系與哲學系的課程。自我感受聽中文系的老教授所講的知識很有受益。
英語的學習:
曾一段時間迷戀萬智牌,為了打好牌而常上irc與老外交流,切磋牌技,經過一段時間,在irc里熟練了英語。而且還曾打到台灣萬智牌的積分排名第一。
生活習慣:
平時當遇到某些困難問題的時候就需要大量的咖啡因(咖啡,後來換成可樂,之後想要換成茶)。
現工作狀態:
從2005-02-01開始領導一個開發團隊夜以繼日的編寫Pugs。這個團隊大約有十五六人,其中有三分之一來自於台北perl推廣組。
生活故事
上國小時自編軟體
唐宗漢的父母是台灣新聞界的名人。父親唐光華是《中國時報》前副總編輯,母親李雅卿曾任《中國時報》採訪部的副主任。唐宗漢四五歲時,下五子棋就能讓碩士叔叔、阿姨們俯首稱臣。
國小二年級時,他把一本厚厚的《APPLE BASIC入門》一頁頁地翻完。有人問他:“看得懂嗎?”他驚訝地反問:“非常懂,為什麼不懂?”看完書後,他央求媽媽買一台電腦。李雅卿當時認為電腦只是用來玩電子遊戲的,沒有把兒子的要求放在心上。沒想到唐宗漢卻在紙上反覆畫電腦,在紙的下方畫鍵盤,上面畫螢幕。每天一起床,他便敲敲紙上的“E n t e r”,寫上反應字後,再敲敲紙上的“D e l e t e ”,然後用橡皮擦去字跡。他就這樣玩著“紙上電腦”。最後李雅卿心軟了,給他買了一台電腦。從此,唐宗漢無師自通地開始了電腦之旅。
有一次,李雅卿帶兒子去買電腦軟體,售貨員好心地“演示”電腦里教授國小數學的最新軟體,唐宗漢一旁靜靜地看了一會兒後問媽媽:“你要買這套軟體嗎?”語氣中流露出不情願。第二天,唐宗漢寫了一個與昨天所見的具有相同功能的軟體。
6 年換6 所學校
唐宗漢強烈的求知慾,使原來照顧他的爺爺奶奶感到力不從心。經過一番痛苦的權衡,李雅卿毅然決定辭職回家,專心照顧宗漢。
入學之前,唐宗漢在父母的保護下,基本上過著正常孩子的生活。進入國小後,麻煩接踵而至。由於先天
聰穎,他無論在學習上還是在思想上,均明顯超過同齡的孩子。他在課堂上總有提不完的問題。於是有一天,
校長告訴李雅卿:“我們學校實在沒有能力教他。”他建議將唐宗漢轉到另一所學校的尖子班就讀。
在競爭激烈的尖子班,唐宗漢的成績仍然名列前茅,但這卻使他成為同學們排擠的對象。有一次,一名同
學一邊打他一邊喊:“世界上如果沒有你,我就是最好的啦……”唐宗漢的日子越來越難過,漸漸對生活失去
了信心和勇氣,曾一度想自殺。擔驚受怕的母親只好每晚親自摟著他睡覺,好讓宗漢獲得安全感。
在國小三四年級時,唐宗漢曾幾度休學,光國小6 年他就換了6 所學校。
終於放棄正規教育
上完初三課程,唐宗漢放棄了繼續升學的機會。他一邊繼續在電腦世界中縱橫馳騁,一邊閱讀羅素、尼采、柏拉圖和莎士比亞的書,並鑽研易經。
唐宗漢自從國小二年級無師自通地寫出第一個數學軟體以後,寫程式和玩電腦成了他生活中的重要內容。他常常是開上幾個視窗,寫一寫程式,玩一玩電腦遊戲,通一通電子郵件。有時甚至三天三夜不休不眠,樂在其中。這時他還沒有意識到自己的電腦知識和技能就是財富。
稚氣未脫地步入商界
終於有一天,在台灣大學商研所就讀的賀元找到唐宗漢,與他聯手出了一本名為《我的電腦探索》的書,使唐宗漢邁出了創業的第一步。在賀元的召集下,唐宗漢和另兩人聯手集資1 0 0 0 萬元新台幣,於1 9 9 5 年1 月成立了信息人文化事業公司,初期以出版電腦書籍為主。
1 9 9 6 年I n t e r n e t 風靡世界,唐宗漢用大約一周的時間,開發了一套專門用來在I n t e r n e t 上尋找信息的套用軟體,安裝後只要鍵入幾個簡單的漢字或英文字母,便可找到所需的信息。同時他還迷上了模仿星際探索、墾殖的“魔龍帝國S C 2 ”。這是一套高難度的電子遊戲。唐宗漢將網路的檢索程式進行了改進,因此他擁有全世界所有的S C 2 秘笈,成了玩“魔龍帝國S C 2 ”的高手。在賀元的合作下,“搜尋快手”誕生了。這套簡便的套用軟體在首次推出後不到一個月的時間裡,銷售了1 萬餘套,唐宗漢因此被譽為台灣十大電腦高手之一。
沒有受過正規教育的唐宗漢取得的驚人成就,引起了許多教育專家的注意。他們發現其平均智商高於1 8 0 。這個早慧的男孩現在雖然身高已達1 8 0 厘米,但仍然稚氣未脫。有一天,他對母親說:“我現在步入商界了,以後也許會變得髒一點!”
對於perl的經歷
唐宗漢學習perl當時只是由於正值網際網路的興起,有公司要他過去開發cgi,這才開始了perl的生涯。後來編寫了大量的perl模組,有100多個,可以在cpan上找到。
網址:http://search.cpan.org/~autrijus/
原來最初覺得寫perl很孤獨,但是經過長時間的與各種朋友的交流才發現,原來很多的軟體都是用perl寫,原來有很多的大公司都在使用perl,例如:微軟的員工在用perl,微軟贊助了windows下面的perl版本activeperl的開發;摩根士坦利整個公司都在使用perl,他們在2003年贊助了perl基金會大約一半的費用;眾多華爾街的金融機構都在使用perl來做金融數據的處理;生物工程科學也都在很大程度上使用perl,據稱現在的基因工程還十分得益於perl的快速開發。
唐宗漢由於在cpan上的貢獻,曾在2003年2次獲得perl基金會的獎勵,每次2000美金。
網址:http://www.perlfoundation.org/gc/grants/2003.html
與台北的perl愛好者成立了台北perl推廣組,每個月組織一次聚會,大約有30多人,大家見見面,並找個新的perl課題讓某個人上台給大家講演一下。這個活動已經成為了例行活動。(在台灣寫perl的人大家互相都很熟悉,從唐口中了解到了董仲愷,openwebmail的開發者,一個上了8年的博士生,將自己的精力都放在了openwebmail的開發上,一個perl寫的web mail)。
在2001年唐第2次參加開放原始碼大會的時候,需要在會上做一個5分鐘的演講,那時唐剛接管cpan的相關管理工作,所以他把自己在cpan 上最喜歡用的模組拿出來用中文創作了一段數來寶(cpan數來寶,有點中文rap的味道),最後還有一段一用英文唱的總結歌曲,這引起了與會者的滿堂喝彩。所以以後唐到西雅圖,德國,英國,都會應要求表演一段。
網址:http://wagner.elixus.org/~autrijus/favcpan/start.html
錄像:http://www.perl.org/tpc/2003/movies/perl-lt/
最初開發perl6的原因與歷史
在2000年,由larry wall在每年一次的開放原始碼大會(oscon2000)上提出了perl6的開發計畫。
那時perl5.6剛發布,但是當時的perl開發社群卻感覺卡住了,很難再往前了。Perl這門語言已經有很多年的歷史,由於一直保持向後兼容,而且perl5的代核心碼已經很成熟,可以說是渾然一體,所以很大程度的阻礙了添加新的功能,因為每次添加新的功能都有可能打破舊的代碼的運行。
Perl5是用c寫的核心,它跑得很快,功能也很強,但是它的核心代碼是那么的龐大,充滿了各種很難以理解的宏調用。修改核心來添加新功能對任何一個人來說都是一件極為複雜和困難的工作。特別是在開發perl5.6的時候,添加了unicode與多執行緒的支持,但是在添加的過程中,開發者發現這種添加是件很痛苦的事情,因為每次添加新的功能都要抽取舊的功能來補。perl5的開發者就把這種現象比作一種積木遊戲:疊疊樂(一堆小木頭疊成一座高塔,每層有三塊,每個遊戲者輪流把底下的一塊抽出來放到上面去,這樣這個塔的底部就越來越脆弱,而這個塔就越來越高,誰抽出最後一塊讓塔倒下的人就是輸家),大家認為perl5的核心越來越像疊疊樂,已經越來越脆弱,無法再進一步的改進,perl5已經到了其生命的極限。
所以larry wall就提出了開發perl6的計畫。網址:http://www.perl.com/pub/a/2000/07/perl6.html
當時的目的就是要從新設計一個perl,執行緒、unicode、可靠信號控制在一開始設計的時候就要被加進去,新的核心要更小,速度更快,外部擴展api要更加清晰,在過去的二進制兼容問題也要被徹底解決掉。
然而,在larry計畫新的perl6開發的同時,像python等其他語言也遇到了同樣的問題:它們最初設計的時候想要解決的問題現在都已經基本解決了,可當現在要添加新功能上去的時候會發現,由於最初的設計並沒有想像到現在的這種需求,所以再添加新功能也是件很困難的事情。
既然大家都遇到相同的問題,所以這時兩個開放原始碼社區就提議合作共同設計一個新的底層平台,使用這個底層從根本上來解決這些大家都遇到的問題,這個底層平台就是perl6的parrot。
在2001-04-01 larry wall(perl的設計者)與Guido van Rossum(python的設計者)一起宣布了parrot的開發計畫。網址:http: //www.perl.com/pub/a/2001/04/01/parrot.htm
這個訊息令整個的開放原始碼社區都十分的興奮,大家十分期待著新項目的成功。
這樣perl6項目的整個計畫就從原來的獨立的perl6設計,變成了一個多層次的設計項目。
Perl6整個項目的構想
Perl6的整個項目是建立在底層parrot之上的。
過去用perl5寫的程式或模組與其他語言例如python、ruby都不能共容,如果想要共容的話必須用一些很糟糕的方法,所以他們就先設計了一個底層平台叫做parrot(鸚鵡,就像.net的運行期或java的虛擬機)。
寫perl6的代碼,然後通過一個編譯器將perl6的代碼編譯成位元組碼(byte code),這個位元組碼才可以直接在parrot上面運行,而parrot再負責把這些位元組碼具體的翻譯成intel或sparc等平台上的機器碼來執行。
也就是說可以用任意的語言來編寫程式,然後通過一個編譯器來翻譯成統一規則的位元組碼,在統一的一個虛擬cpu平台parrot上運行。這樣就可以使用任意的語言來編寫程式,最後大家都編譯成統一規則的位元組碼,由於大家的位元組碼都遵循相同的規則,所以在位元組碼之間的相互調用就可以十分平滑的實現,這樣不論用何種語言編寫的程式,就可以很容易的互相使用(這種技術就是JIT技術,Just In Time)。用perl寫的模組,就可以用python來調用,各種語言實現了共通。而且計畫perl5寫的程式也可以移植到parrot上面使用,這就意味著在cpan上的幾千個perl模組就依然可以使用,而且其他語言也可以調用這些perl模組。而其他過去遇到的問題,如很難擴展,沒有執行緒支持等,在parrot上面就解決掉了。在perl6架構下的整個程式的執行過程,如下圖(執行自上而下):
Source Code
+------------+
| The Parser |
+------------+
Syntax Tree
+--------------+
| The Compiler |
+--------------+
Byte Code
+--------------------+
| Bytecode Optimizer |
+--------------------+
Better Byte Code
+---------+
| Runtime |
+---------+
Source Code原始碼,可以是各種語言的原始碼。 The Parser是各種語言的解析器(例如python就有python的解析器,c就有c的解析器),負責將原始碼轉換成語法樹。 Syntax Tree語法樹。 The Compiler編譯器,按照calling conviention規則,將各種語法樹編譯成位元組碼。 Byte Code位元組碼,就像虛擬cpu上面的彙編語言,而這個虛擬cpu就是parrot。 Bytecode Optimizer位元組碼最佳化器。 Better Byte Code最佳化後的位元組碼。 Runtime在這裡就是parrot。
因此最終成型的整個perl6項目實際上就是由兩個部分組成:一個是底層的parrot,一個是上層的perl6語言。而Perl6的語言又可以分為:語言的設計(perl6的語法,規則,也就是Source Code),語言的實現(通過一個解析器與編譯器將perl6的語言轉換成位元組碼)。
Perl6整個項目的想法與.net基本是同時想到的,整個概念其實與java和.net十分相似。
Parrot的特點
Paroot的設計就像一個軟體cpu,並且它的設計與硬體cpu的設計很相近,例如:它也有一個暫存器結構,它也支持底層的操作。它的設計還參考了硬體cpu的設計。
Parrot在設計上要滿足各種動態語言的需求,而且特別注意可擴充性,像unicode,多執行緒等都是直接內建支持。
Parrot的抽象層比.net與java更高,可以寫更少的代碼來運行更複雜的運算。象各種面向對象相關的調用都在parrot內部有相應的機械碼。
Parrot的現在大小在250K至700K之間,它會有足夠快的速度,並有足夠的靈活性。
Parrot支持多種平台,包括手持設備,如palm。
網址:http://www.parrotcode.org
Perl6語言設計的特點
Perl6語言的設計思想:easy things should stay easy, hard things should get easier, and impossible things should get hard。
例如:在perl6的語言設計上larry採用了霍夫曼編碼的思想:常用的功能使用較短的單詞來表示,不常用的功能用較長的單詞來表示,這樣就可以顯著的提高輸入程式的速度。比如說:過去perl5中的print”…”,現在在perl6中就可以用say”…”來直接代替,因為列印是程式中最常用的功能,所以就用較少的代碼來表示,這樣可以顯著的幫助減少代碼的輸入。
Perl語言還有一個特性就是把當時最流行大家最推崇的其他語言好的功能集合起來,統一融合到自己的語言中來。在perl中這叫做多重典範。
larry wall喜歡把這種情況比作英文,英文就是吸收了很多其他語言而組合而成的語言。Larry 的想法就是perl最好象英文那樣:每個當地人在學習英文的時候都會帶一些當地的方言,帶一些當地的講話習慣,但是大家也都能聽懂,兼收並蓄其他語言的長處,來形成自己的特點。
總之,把所有各種最流行的元素都集合起來,就組成了perl6語言。
Perl6還有很強的靈活性(perl的一句格言就是:條條大路通羅馬):如果特別喜歡oo,那么perl6感覺上就像java一樣,就可以特別oo。
如果不喜歡強制類型聲明,那perl6就可以不用聲明。
如果特別喜歡邏輯語言例如:prolog,那么perl6就可以按照邏輯語言的方式來編寫程式。
Perl6吸收了很多其他語言的特點,因此可以用自己喜歡的編程方式在perl6中編程,但是通過perl6中的語境相關的能力,不同的編程方式寫出的perl6程式仍然可以很好的搭配在一起。這樣設計的意圖就是讓程式設計師針對不同的問題,用不同的解決方式,從而對所有遇到的各種問題達到最優的解決方法。
Perl6語言的兩個特點就是:語境相關(context)與多重典範。
Perl6與perl5的比較:語言本身的感覺其實還是跟perl5語言是一樣的,只是在運行時的過程與perl5截然不同。對於過去perl5語言的很多語法perl6也繼續使用,對於perl5語法的不合理部分perl6做了改進。
網址:http://dev.perl.org/perl6
正在開發的Perl6及其相關軟體:
Parrot,perl6的執行引擎。已經開發到了0.1.2版,現在實際可以運行python、basic。
網址:http://www.parrotcode.org
在Parrot方面現在已經有了很多的半成品:比如ponie是一個能將perl5編譯到parrot上面來的軟體。
網址:http://www.poniecode.org/
有人正在將Php、Ruby移植到parrot上面來。有人聲稱要將gcc(gnu的開源c/c++編譯器)移植到parrot上面,這樣以後所有的可以用gcc編譯的程式可以直接編譯到parrot上面的位元組碼來運行。
甚至還有人決定要移植.net到parrot上來。
這當然是一個瘋狂的決定,然而成事是都要靠瘋子,瘋子與天才是靠最後的成敗來決定的,他未必會成功,但是如果成功是很了不起的(唐的原話)。
Pugs,不管其他perl6的開發,只是先對perl6做一個真實的實現,以此檢驗perl6語言的特性,幫助perl6語言的進一步設計,最後計畫轉變為perl6的編譯器到parrot。
網址:httP://www.pugscode.org