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的一次鼓勵


推薦閱讀:

PyQt5系列教程(1):我與PyQt5有個約會

TAG:Python | Scala | Lisp | 反射編程語言 | 元編程 |