20071007

Haskell史傳:帶類的惰性語言(一)

Haskell史傳:帶類的惰性語言(一)二○○七年一月二十五日

Paul Hudak(耶魯大學)、John Hughes(查爾默斯大學)、Simon Peyton Jones(微
軟研究院)、Philip Wadler(愛丁堡大學)
摘要

本論文描述了Haskell語言的歷史,包括了它的創始和原則、技術貢獻、實現與工具和
應用與影響。
1. 介紹

"1987年9月,在俄勒岡的波特蘭召開的函數式語言與計算機體系結構大會(the
conference on Functional Programming Languages and Computer Architecture)
上舉行了一次會議,來討論函數式程序設計社群的一個不幸的現實:已經有成打的非
嚴格的(non-strict)、純函數式程序 設計語言正在出現了,所有這些語言在表達力
和支撐的語義上都很接近。缺乏一個共同的語言阻礙了這一類函數式語言獲得更廣泛
的使用,與會者對此形成了很強烈 的共識。他們決定建立一個委員會來設計這種語
言,以此促成新觀點更快的交流,提供真正應用開發的穩定基礎,以及可以鼓勵外界
使用函數式語言的一種工具。"

這一開篇之語,載于1990年4月間的第一份Haskell報告(Haskell Report)的第一個
版本,多少道出了些Haskell的來歷。它確立了設計Haskell的動機(需要一個共同的
語言),被設計的語言的本質(非嚴格 的、純函數式的),以及語言如何被設計的過
程(通過委員會)。

本文的第一部分描述Haskell的創始與原則:Haskell如何演化而來。我們描述了導致
Haskell出現的各種技術發展以及Haskell的早期歷史,(第2節)給出了過程和原則,
它們指導了Haskell的演化(第3節)。

第二部分描述Haskell的技術貢獻:Haskell是甚麼?我們特別關注那些語言與演化上
與眾不同的方面,或者沒有按照期望的、以令人驚奇方式 發展的那些方面。我們反思
五個領域:語法(第4節);代數數據類型(第5節);類型系統,特別是類型類(第
6節);Monads與輸入/輸出(第7節); 大型編程的支持設施,如模塊(modules)與
包(packages),以及外部函數接口(第8節)。

第三部分描述實現與工具:我們為Haskell用戶創建了什么?我們描述了Haskell的不
同實現,包括GHC、hbc、hugs、nhc和Yale Haskell(第9節),以及性能分析
(profiling)和調試(debugging)的工具(第10節)。

第四部分描述應用與影響:Haskell語言的用戶都開發了什么?這門語言已經被用來開
發出令人眼花繚亂的、各式各樣的應用,在第11節我們會思考 某些應用里與眾不同的
方面,只要我們能辨明它們。我們在這一節中得出結論,評估Haskell對不同用戶群體
的影響,如教育界、開放源代碼、公司和其他語 言的設計者們(第12節)。

貫穿本文的我們的目標就是講述故事,包括誰參與了,甚么給與他們靈感:本文應該
被視為歷史,而不是技術描述或者教程。

我們試圖用一種不偏不倚的方式描述Haskell的演化,但通過包含一些軼事與個人思
考,我們依然尋求傳達出這個過程中的興奮與激情。無可避免的, 尋求這種活潑的格
調意味著我們的記敘將偏重於我們個人參與的會議或者談話。然而,我們亦知許多、
許多人對Haskell貢獻頗多。Haskell社群的大 小與品質,它的寬度與深度,都是
Haskell成功的指標,也是它成功的原因。

一個必然的短處就是缺少全面的描述。Haskell至今已發明15年了,它已經成為無數創
造力的苗床。我們無法期望公平的對待所有它們,但我們借此機會向所有作出貢獻的
人致敬,Haskell如今已化為一匹野馬。