每日最新頭條.有趣資訊

宅男程序員三個月寫出的編程語言是如何改變世界的?

大數據文摘出品

來源:Zdnet

編譯:洪穎菲、李可、Vicky、李雷

1989年,荷蘭的一位叫GuidoVan Rossum的宅男程序員覺得其他語言都不好用,於是花三個月創造了一種新的編程語言。

Guido肯定沒有想到,30年後,每天都有數百萬人使用他創立的這一新語言——Python。

無論是專業人士還是非專業人士,都在使用Python解決大大小小的問題,尤其是網絡開發者、數據科學家和系統管理員。

今年早些時候,研究人員首次將5500萬光年之外黑洞的圖像拚接出來,使用的編程語言也是Python,。

一些全球大廠也在用Python處理關鍵業務,比如網飛(Netflix),用它將視頻流傳輸到全球超過1億個家庭,Instagram用它實現照片共享功能,NASA更是用它處理太空探索數據。

今天,文摘菌就和大家一起深扒一下Python的前世今生,一起看看這款編程語言是怎樣被創造出來,並且成長為火遍全球的編程語言的。

命名自喜劇團體,宅男程序員三個月寫出的編程語言

20世紀80年代末,GuidoVan Rossum為荷蘭國家數學和計算機科學研究中心Centrum Wiskunde&Informatica(CWI)開發分布式系統。因為當時的編程語言存在缺陷,他決定創建一種新的語言—— 一種更易於使用又功能強大的語言。

2014年,Guido Van Rossum在Dropbox 總部。照片來源:Dan Stroud

對於一個從未開發過語言的人來說,創建編程語言就像是說“我要自己造一架飛機”。當時,三十多歲的Van Rossum已經從事編程多年,他已經在CWI的ABC語言開發團隊工作了三年,所以他很了解了構建指令解釋器需要什麽,也知道新語言需要哪些語法構建塊。

要知道,Van Rossum當時所用的編程語言非常具有局限性,要完成任何任務都很難。他正在研發的Amoeba分布式計算系統需要使用C或Unix shell,但是這兩者都有很大的局限性:C語言不僅要求開發人員自己解決複雜的記憶體管理及各種坑,而且還缺少實現常用功能的可重用代碼庫,使得開發人員不得不針對每個新項目都重新進行開發;而Unix shell則有 不同的缺點——它雖然為常見任務提供了一套實用程序,但其運行速度太慢,因此無法處理複雜的邏輯。

這些語言對開發人員的限制使得Van Rossum想要創建新解釋型語言——一種具備ABC編程語言功能特徵的解釋型語言——這一想法成為了當時的最佳選擇。

“我的初衷就想著,好吧,為什麽我不開發一種自己的語言,我可以利用現有的ABC語言,但將開發規模從需要三年完成的大項目縮小到自己可以在三個月內完成的小項目,於是Python誕生了。”Van Rossum說到。

1989年年底開始,他開始投入所有精力來開發Python。

Van Rossum從他最喜歡的喜劇劇團Monty Python的名字中借用Python一詞給這個語言命名。至於Python與蛇的聯繫,以及後來雙蛇纏繞圖標,則都是後話。

“我當時比較宅,會在家看電視,或者寫代碼,或者邊看電視邊寫代碼,”他承認道。

雖然一開始的初衷是創建Python來輔助自己工作,但Van Rossum認為,他的動力可能更多是來源於創建屬於自己的編程語言這一挑戰。

“我認為,在某種程度上,我的確很喜歡自己創建一個大項目這種想法,按照我的理念,我的方式來布局和設計代碼,這樣的編程對我來說很有趣。”他說。

在短短三個月內,Van Rossum就開發出了解釋型語言Python的原型,雖然他聲稱這個原型缺少現在的許多功能,但這便是今天Python的始祖。

“現在的Python語言多了很多重要的底層抽象功能,但從使用角度來說,還是與原型非常相似的。”他說。

“當時,我已經擁有了解釋器和語言的所有基本組件。用首個Python解釋器的編譯出的簡單Python程序今天仍然可以工作。”他說,並補充道,“函數定義方式相同,縮進格式相同,字典和元組是使用相同的語法創建,並且連用於互動式計算的提示符都是和原來一樣的。”

互聯網的興起,python社區逐漸壯大

不過,儘管他的兩位同事很快就接受開始使用這種語言,但Van Rossum並沒有對其更廣泛的傳播抱多大期望,因為在互聯網時代之前,要想使一門編程語言落地生根是非常困難的。

雖然今天分享一個軟體只需輕點滑鼠,但在上世紀80年代這可是一件十分費力的事情。Van Rossum回憶起推廣Python前身ABC語言時的艱辛。

“我記得大約是85年前後,我第一次到美國度假的時候,我的行李箱裡放了一盒裝有ABC語言安裝文件的磁帶。”Van Rossum說。

2001年的Guido Van Rossum,這一年Python軟體基金會成立。

因為當時簡陋的電子郵件系統無法傳輸如此大的安裝程序,Van Rossum只能搜集那些對ABC語言感興趣的人們的地址和電話號碼,然後挨家挨戶地遞送這些裝有安裝源文件的磁帶。儘管付出了很大的努力,ABC仍沒有真正為大眾所接受。

“因此,儘管ABC語言有強大的功能,我們在其推廣方面並不成功。”但隨著互聯網的蓬勃發展,Python的推廣就容易得多了,再不需要用磁帶。

1991年,Van Rossum在alt.sources新聞組裡發布了Python,這是一個類似開源軟體的版本(六年後開源軟體這一術語才首次出現)。雖然Python解釋器的安裝文件被壓縮成21個文件,需要一個晚上才能從Usenet上完成下載,但這仍然比幾年前的磁帶分發更有效率。

“我希望這能成功,即使沒有,我至少發布了我發明的語言,這本身就是一種成就。”Van Rossum說。

憑借以往經驗,Van Rossum表示,他花了很長的時間才從Python不斷增長的用戶群中看出些苗頭。經過一段時間與Python社區定期互動後,他漸漸意識到自己創造了一種成功的語言。

“這種進展非常非常緩慢。在我們發布第一個開源版本後,我開始定期發布新版本,並與各新興Python社區進行交流。這樣做非常重要。”Van Rossum說。

Python為何能超越對手並發展壯大?

從90年代初期到中期,Python開始逐漸受到關注,Van Rossum也意識到,Python的時代到來了。

Van Rossum認為Python受歡迎的原因是開發人員具有和他初創Python時一樣的感受。他們想要一種高級腳本語言,用起來方便,並且在處理複雜邏輯時沒有Unix shell那樣的局限性。他們希望解決C語言那種開發人員自己管理記憶體的問題,實現基礎功能的代碼複用。

來看看Python剛嶄露頭角就贏得廣大程序員青睞的樣子吧。

1994年底,來自美國各地的一群萬裡挑一的程序員開會討論他們的新秘密武器。

Barry Warsaw是參與Python語言創始研討會的20來位開發人員之一,他至今還能憶起使用Python給他們帶來的興奮。

Warsaw表示Python取得了某種平衡,易用,同時也沒有犧牲其功能性。在90年代初,還沒有任何一種主流編程語言能真正實現這種平衡。“我寫過很多Perl、Tcl和C的代碼,但感覺不到編碼的樂趣。這時Python出現了,我就找到了救星,它讓編程又變得有趣了。”他說。

Barry Warsaw在1994年Python創始研討會上。

從那時起,Python的語法一直是清晰明確的,用縮進將代碼分組成塊,使開發人員更容易理解代碼。

分析公司Gartner的應用程序平台戰略團隊研究主管Fintan Ryan表示,無論在現在還是90年代,語法清晰性都是Python贏得開發人員青睞的重要因素,儘管有些人不同意是縮進造就了如此重要的特性。“縮進提供了一種非常乾淨的語法。雖然在其他語言中你也可以這麽做,但Python是強製執行縮進的。有些程序員喜歡這樣,有些則討厭。”他說。

事實上,Python優先考慮代碼清晰可讀並不是出於偶然,Van Rossum認為,編程語言開發人員間進行思想交流與告訴計算機該做什麽同樣重要。

除了清晰易讀之外,Ryan還表示,Python的一系列內置功能,使其從其他語言中脫穎而出。“從一開始你就有類和異常處理等功能,Python還提供了對lambda,map和filter等函數的支持,在很多情況下被證明非常有用。”

如果80年代後期的流行編程語言能做得更好,Python可能永遠不會出現,畢竟Van Rossum創建Python的動機之一就是Perl腳本語言與他在CWI使用的Amoeba分布式計算系統不兼容。“對於Python來說,幸運的是,Perl在Amoeba上不可移植,”他說, “如果可以將Perl移植到Amoeba,我就不會想要創造我自己的語言了。”

儘管Python在發布後吸引了眾多硬核粉絲,但在90年代,Python仍然不能算成功。Van Rossum說,它的競爭對手是Tcl/Tk和Perl,它們都部分實現了Python簡單易用和性能上的目標。

“在90年代最受歡迎的前三種語言中,Perl絕對是老大——就像一隻800磅重的大猩猩, Tcl/Tk排名第二,而Python隻排到第三。”他說。

今天,根據Stack Overflow年度開發人員編程語言使用情況調查, Python已成為成為開發人員中增長最快的編程語言,而Perl在最新的Stack Overflow報告中已經看不到了。

下圖的爆炸式增長,顯示了近年來Stack Overflow上Python相關問題查閱數的增長速度遠遠超過了其他語言。

相比於其他編程語言,Stack Overflow上Python問題查閱數量的增長反映了Python用戶數的巨幅增長。圖片來源:Stack Overflow

因此Python是如何超越昔日競爭對手的,又該如何解釋兩種語言截然不同的命運?

Van Rossum認為,這就得看當代碼量超過一定規模時,其維護的難易程度。“人們得出的經驗是,對於只有10行的腳本,Perl是完美的,” 他說,“但如果你的Perl代碼裡有500行的主程序和幾千行的功能庫,那麽需要制定並遵守大量的規則才能保證其維護。而在Python中,即使沒有那麽些規定,代碼仍然具有相當的可讀性和可維護性。”

這種可讀性和可維護性使Python易於上手,同時又非常強大,足以用於編寫大型應用程序,Van Rossum認為這正是90年代Python一出現便獲得成功的原因。

“一些互聯網開發人員——其中很多從事早期的互聯網工作,他們在編寫更大型的應用程序時,認為用Python編寫應用程序要比用C,C ++,或Java輕鬆得多。”

隨著Python在90年代的使用範圍越來越廣,仍然在CWI工作的Van Rossum發現他的語言也讓他越來越多地接觸到來自世界各地的人。

他說:“我創造了Python,而它將世界各地的人——澳洲人、美國人、歐洲人聯繫在一起,這讓我非常快樂。”

Python與互聯網的那些事

到90年代中期,Python開始有了新的應用場景,從音頻錄製和回放腳本,到首次涉足Web開發,互聯網應用成為Python的主要舞台。

Van Rossum說,“最重要的應用之一就是網頁開發,這對我來說也是一件非常有趣的事情。”這時,Python開始與Perl和Shell腳本一起用於Web伺服器上的後端腳本開發。“你可以創建動態網頁,這是我最喜歡的Python應用之一。”

Gartner公司的Ryan認為,90年代Python在開發人員中倍受歡迎的原因在於,它是快速創建強大腳本的最佳選擇。“作為一種功能強大的腳本語言,Python降低了使用者的入門門檻。”

不僅如此,這種語言功能多樣且容易上手,因此吸引了許多擁有各種技術專長的用戶。“系統管理員可以用Python進行系統自動化編程,功能開發人員可以使用函數式編程以及繼承類,而Perl這樣的語言在這方面的功能就要少得多,”Ryan說, “由於入門門檻相當低,一旦人們掌握了這種語言,就會很快開發出大量程序。”

1994年,Python引起了Michael McLay的注意,他當時在美國國家標準局(NBS)擔任高級職務,這個機構現在是美國國家標準與技術研究院(NIST)。這預示著Python將受到研究人員和科學家的青睞。McLay對於國家統計局的科學家們如何使用Python很感興趣,Van Rossum說這些科學家 “需要處理大量數據,但編程水準一般”。

為了向局內的其他人推廣Python,McLay邀請當時仍在荷蘭CWI工作的Van Rossum作為客座研究員,在NIST工作了兩個月。這段工作給Van Rossum的生活和Python的未來發展帶來了巨大的變化。

正是在這段工作期間,在國家統計局的辦公室舉行了Python初創研討會,Van Rossum,Barry Warsaw和一眾Python愛好者聚集在一起討論他們可以用Python做什麽以及Python未來如何發展。

Van Rossum,攝於Python初創研討會,Warsaw和Roger Masse在與其進行討論,那時Masse與Warsaw同在CNRI工作。圖片來源:Barry Warsaw

在國家統計局的辦公室,Van Rossum遇到了Bob Kahn,後者曾經參與開發TCP/IP協議。

那次會議給了Van Rossum與Kahn一起為國家創新研究組織(CNRI)工作的機會,CNRI是一家位於弗吉尼亞州的非營利性研究組織,專注於網絡技術的戰略發展。

當時Python滿足了對新型編程語言的需求,而Van Rossum則開始質疑他在CWI的未來,這個工作機會來得恰逢其時。

他說:“CWI更像是一個學術機構,在那裡工作沒什麽壓力,因此我要麽去讀博士學位,要麽就得找其他工作。”

“我那時35歲左右,轉去讀博對我來說沒有太大的吸引力。而在那之前,因為Python的緣故,讓我有了新的方向,經過深思熟慮,我決定不去讀博。我喜歡CNRI的同事,喜歡這裡的環境、項目,所以我去了。”

在CNRI,在一群Python愛好者的幫助下,Van Rossum將Python語言的功能特性進行了整合。從1995年4月加入CNRI之後,Van Rossum帶領開發團隊開始構建Knowbot程序,這是一種移動代理程序,運行在分布式計算機系統(互聯網)上。

開發團隊包括Jeremy Hylton,Roger Masse,Barry Warsaw,Ken Manheimer,Fred Drake和Van Rossum,使用的語言是Python,而這些人也成為Python社區的中堅力量。

“我們成立了一個4到10人組成的小組,其中大多數人在CNRI工作,他們是Python開發的核心,”Van Rossum說。

Van Rossum在CNRI工作時,這個小組幫助他創建了python.org網站和用於管理核心代碼庫的CVS伺服器,以及用於用戶反饋的“Python特殊興趣小組”的郵件列表。

自1991年公開發布以來,Python社區用戶數增長顯著,到90年代中後期,Python已經擁有相當大的全球用戶群。在此期間,隨著Python軟體基金會(PSF)前身的建立,(PSF於2001年創立),Python語言的管理開始正式化。隨著社區的發展,1994年開始的兩年一度的Python研討會越來越受歡迎,最終發展成PSF的年度大會PyCon,至今依然是年度盛事。

1994年,那時的Python用戶還會擔心“如果Guido被公共汽車撞了”怎麽辦。而到了21世紀之交,1994年那個夏天已經過去了很久,Python語言也早已不是一個人的語言,在其發展中社區的力量發揮著積極的作用。

然而,Van Rossum繼續扮演著核心角色,並且他是這一語言的靈魂的想法從未消失,正如他被昵稱為Python“仁慈的終身獨裁者”(BDFL),表明了他對Python的最終話語權,這一詼諧的頭銜也伴隨了他許多年。

“在這麽多年裡,我能夠很好地承擔各種壓力,同時培養了我的項目管理技能,這使我能夠將不少事情委派給其他人自行處理。” Van Rossum說。

Gartner公司的Ryan表示,語言的創建者同時作為該語言的管理者是件很平常的事,比如Larry Wall的Perl語言和Ryan Dahl的JavaScript 運行庫Node.js,但是他說,Van Rossum尤以其對Python的平衡式管理而為人所稱道。

“大家都承認,他對項目的方向把控和整體管理都非常有條不紊。”這是人們對Van Rossum的評價。

然而Van Rossum很謙虛,他認為社區核心開發人員間的公開討論,賦予了Python在發展中的開放性,這是Python成功的決定性因素。

Python社區眾口難調

Python社區的迅猛擴張,對Van Rossum反而成了一個沉重的負擔。

在這些年裡,Python 不斷取得重大飛躍。2008年發布的Python 3.0標誌著Python的現代化,而最近在其管理方式上又出現了顯著變化。

這些變化是從去年開始的,因為公眾對Python增強提案PEP572中引入的賦值表達式存在異議,Van Rossum辭去了Python“終身獨裁者”的身份。

儘管賦值表達式的引入是為了編寫出更有效率的代碼,Van Rossum還是在網上遭到了那些反對者的嚴厲批判,一些人認為使用賦值表達式會降低代碼的可讀性和可維護性。

Van Rossum表示他過去習慣了為新功能進行辯解,但某些抨擊者的固執和別有用心讓他下定決心放棄最終話語權。

他說:“我對那些人感到很失望。他們在技術層面上有分歧,就去社交媒體上嚷嚷說提案過程出了毛病,或者就說我犯了個天大的錯誤。這種感覺就像是被人在背後捅了一刀。”

“在過去,如果我們要針對語言改變或功能改進做個決定,一群核心開發人員就會討論此決定的利弊,一直都是這樣的。我們要麽會得出個明確的共識,或者如果沒達成共識,我會在腦中仔細斟酌並想個什麽方法將其確定下來。對於這個PEP572,即便它存在明顯的分歧,我的選擇是——我要這麽做,但大家就是不能求同存異。”

“這不算是嚴格意義上的反抗,但我覺得我已經沒有了來自核心開發者社區的足夠信任來使我繼續這一(獨裁者)身份。”

他認為如何結束語言變化的紛爭在一定程度上取決於現如今Python使用者的數量。

“這也有可能是因為Python社區規模太大了,這樣就更難達到任何形式的共識,因為不管你決定什麽,總是會有那麽些異類跟你唱反調。”

Warsaw表示,對於管理一門用戶群增長如此迅猛的語言來說,這種變化是必須的。

“我認為Guido Van Rossum真不能把所有的問題都自己扛。”他說。

“25年前這樣或許還行得通,當時Python社區規模還很小,Python也只是門小眾語言,但現在讓一個人來承擔這一切真的太過了,你知道嗎?我覺得單純為了他的個人健康和增強整社區參與度著想,有5個人一起分擔重任真的很好了。”Warsaw提道。

每當新的Python功能發布後,指導委員會都會進行新一輪選舉,Warsaw說這將為新一代的Python核心領導層鋪平道路。

“如果想要Python在未來的25年內健康成長,就不能只有Guido和我來進行管理,不是嗎?” Warsaw說道。

指導委員會的設立也受到了Python核心開發者社區的廣泛歡迎,核心開發人員Mariatta Wijaya表示此舉意味著他們向著正確的方向邁出了一步,“對我而言,有個指導委員會比由一個人確定一切要更好——一個人的責任與重擔都太大了。這是個好兆頭,而且它使得社區能夠有更多的參與。”

Python核心開發員Mariatta Wijaya對選舉指導委員會來監督Python的發展表示歡迎。圖片來源:A. Jesse Jiryu Davis

Python的未來之路:社區驅動

雖然Python繼續以驚人速度吸粉,但社區裡的部分人也看到了未來的挑戰:要想保持其推廣,Python就得不斷發展。

在今年的Python峰會上,BeeWare的聯合創始人Russell Keith Magee警告說,如果不改善其對移動端和新網絡平台的支持,Python就將會面臨著“生存風險”。

“手機和平板電腦的市場滲透率遠遠超過了台式機與筆電曾經的輝煌,但作為一個社區,我們並沒有去考慮關於如何在這些設備上使用Python的場景。“他提到他兒子在學校用iPad的例子,並問:“當平板電腦成為下一個巨大市場時,Python會發生哪些改變呢?”

Keith Magee所開發的BeeWare項目目的是使Python應用程序可以任意平台上運行。他不假思索地列出了一長串Python現階段所面臨的問題,都是與非標準x86 PC系統以外的其它平台相關的。

他還給出了一系列為了更好地支持在新的非x86硬體平台上編譯代碼的理由:Python的測試框架很容易在移動端和網頁平台上崩潰;Python應用安裝時佔用空間太大,且無法分割成更小的從屬子集;編寫運行於Android、Windows和網頁上的GUI代碼時需要先設置asyncio庫;以及標準庫中有不少模塊與除CPython以外的其他Python解釋器互不兼容。

Warsaw稱Keith-Magee提出了很好的觀點,並認為考慮Python如何能在新平台(包括手機、平板和WebAssembly等新網絡技術)中繼續發揮作用這一點至關重要。

“目前的Python還沒有在各平台之間實現無縫的拓展。” Warsaw說,他希望能未來人們在iPhone或安卓手機上下載運行應用程序的時候,可以“永遠不知道它是用Python編寫的”。

隨著現代芯片中處理器內核數目不斷攀升(英特爾最新的伺服器可達48核),Warsaw也希望Python可以有更好機制將任務分散到多核上進行處理。

他非常看好Eric Snow所主導的Python子解釋器項目的潛力,這將擴展Python並行運行代碼的能力。“我希望看到更多對多核處理器的利用。”他說。

Snow的子解釋器項目,其目的在於讓Python在多核環境下更有效地分割任務,Snow關注的重點是對Python現有的子解釋器功能進行修訂,並解決每個子解釋器與Python全局解釋器鎖(GIL)之間的互動。

“Python 3.8裡還不包含這些修訂,Python 3.9或許可以。” Warsaw說,“我想在未來的兩年至兩年半時間裡,我們就能看到這些新機制,這一點我持樂觀態度的,Eric的努力讓我感到很高興,因為我覺得這真的非常重要。”

他還提到,即便是之前的失敗項目The Gilectomy,這是一個旨在多核處理器上運行多線程Python程序的項目,也能產生有意義的經驗教訓,像是如何讓Python在跨核分布工作負載方面做得更好。

Python社區也在采取措施使語言的內置代碼標準庫更加現代化。社區最近發布了一個刪除內置代碼庫中過時模塊的提議。這個提議解決了最近對Python標準庫的一些質疑。通用代碼庫通常被視作Python的優勢之一,因為它可用於執行大多數常見任務,這就是為什麽Python會被稱作為“自帶裝備”的原因。然而,今年Python峰會上的一場演講提出了一個問題:讓人們從PyPI庫中選擇某代碼庫,而不是將所有標準庫打包與Python捆綁安裝,可能會使Python更加有的放矢。

還有些問題如,語言開發的監督機構組成——Python的核心開發人員和指導委員會,是否能更好地代表目前Python的不同用戶群體。

Wijaya說:“我想看到這個機構能更好地代表各類群體,不僅僅是不同性別,還包括種族和其他一切。”

“我在PyCon與來自印度和非洲的 PyLadies 成員進行了對話。他們認為,‘當聽到Python或PyLadies時,人們通常會聯想到北美或加拿大的成員,而實際上許多用戶群都是來自世界上的其他地區。為什麽我們沒看到他們呢?我認為他們說的很有道理,所以我當然希望看到更多來自其他地區的開發人員,而且為此貢獻我們的力量。”

Warsaw認為,儘管過去是一言堂,但是自從Python敞開心扉迎接各路新用戶的那一刻開始,推動Python發展的各種想法就不斷從社區中騰湧而出。

“比起自上而下的發展策略,社區中產生的萌芽可多得去了。”

其中一個例子就是類型提示(Type Hints),表明簡單社區項目也能Python產生巨大影響。這是Python 3.5的一個功能,由一位博士生受mypy項目啟發在2012年所創。這種類型提示允許使用可選的類型檢查,幫助開發者發現可能導致軟體漏洞的錯誤。

這種額外的安全檢查不僅在大型代碼庫上多人協同工作時有好處,而且對指導代碼開發中什麽該做什麽不該做也有重要意義。

“對我來說,這意味著Python可以應用於更大型的組織系統——比如基於Python 3的Instagram,前途不可估量。”不僅如此,Warsaw還提到了另一個社區衍生思想的例子:asyncio,它對編程語言的可塑性產生了極大影響。

面對指導委員會的出現和比以往任何時候都要大的用戶群,Van Rossum樂觀地表示社區驅動下的語言演變將會繼續“前所未有地成功”。

“Python的鐵杆粉絲們現在有了個新的管理機構,所以無論Python作什麽樣的變化,我們都已經做好了準備。”他說道,並高度讚揚了社區對Python某些方面的充分理解。

Warsaw則表示,如果還有人懷疑Python社區發現語言新用途的能力,那麽就丟一張Python協助捕捉到的有史以來第一張黑洞圖像給他們看。

“黑洞照片真的把我給震到了。社區裡總有那麽幾個人讓我覺得他們就是Python界的科學狂人。對於他們我只能說,不逼一下自己,怎麽知道自己有多優秀呢?”

相關報導:

https://www.zdnet.com/article/python-is-eating-the-world-how-one-developers-side-project-became-the-hottest-programming-language-on-the-planet/?2

志願者介紹

點「在看」的人都變好看了哦

獲得更多的PTT最新消息
按讚加入粉絲團