Scala程序能不能像處理數據一樣,優雅地處理Scala代碼?
我看到一個段子(來源 http://article.yeeyan.org/view/58498/209584):
在 ILC 2002 大會上前Lisp大神,當今的Python倡導者Peter Norvig,由於某些原因,做一個類似於馬丁路德在梵蒂岡宣揚新教的主題演講,因為他在演講中大膽地聲稱Python就是一種Lisp。
講完後進入提問環節,出乎我意料的是,Peter點了我過道另一側,靠上面幾排座位的一個老頭,他衣著皺褶,在演講剛開始的時候踱步進來,然後就靠在了那個座位上面。
這老頭滿頭凌亂的白髮,邋遢的白鬍須,像是從旅行團中落下的遊客,已經完全迷路了,閑逛到這裡來歇歇腳,隨便看看我們都在這裡幹什麼。我的第一個念頭是,他會因為我們的奇怪的話題感到相當失望;接著,我意識到這位老頭的年紀,想到斯坦福就在附近,而且我想那人也在斯坦福 —— 難道他是……
「嗨,John,有什麼問題?」 Peter說。
雖然這只是10個字左右的問題,我不會假裝自己記住了Lisp之父約翰麥卡錫說的每一個字。他在問Python程序能不能像處理數據一樣,優雅地處理Python代碼。
「不行。John, Python做不到。」 Peter就回答了這一句,然後靜靜地等待,準備接受教授的質疑,但老人沒有再說什麼了。此時,無語已勝千言。
如果說Python做不到的話,那麼,Scala能不能像處理數據一樣,優雅地處理Scala代碼呢?
Quasiquotes - Introduction並不算優雅吧,還是要摸到一點AST,但比def macro時期要好多了。
hygiene 據說會在2.12以後支持(不知道支持沒)
感興趣可以看看:GitHub - scalameta/scalameta: Simple, robust and portable metaprogramming toolkit for Scala------------------感覺非同像性語言用macro註定優雅不起來ㄟ( ▔, ▔ )ㄏScala 有一個實驗性的 AST 庫:Reflection - Symbols, Trees, and Types
不過 KFFD 當然是沒有的。在非同像語言中實現 Hygiene macro 難如登天。
謝莎莎邀。可能是我在別人那兒批評過這個雞湯故事,莎莎看見了,才又讓我到這裡來再批評一次?
首先是我對scala不熟悉,所以我不知道,它有沒有這樣的能力。然後,我不認為那次是Peter輸了。相反我認為是John輸了。(看我叫的多親熱~臉紅~)John看重把代碼當數據的能力是因為他是老派ai研究者。Peter不強調這種能力是因為他是新派ai研究者。也就是說可以片面的認為是John過時了。
Peter在這個段子裡面沒有和John展開辯論。但他在自己的博客上和人工智慧的另一個爹明斯基辯論了。下面開地圖炮。我將不會對我說的下面的話負責。所以強調LISP的這種能力的人,不是思想過時的落伍者,就是人云亦云的跟屁蟲。每次看到這種問題,都是對自己使用racket的一次鼓勵
推薦閱讀: