跳轉到

1987:Haskell 構想會議(FPCA '87)#

事件#

1987 年 9 月,在奧勒岡州波特蘭舉行的 FPCA '87(Functional Programming Languages and Computer Architecture)會議上,與會者在漫長的討論後達成共識:成立一個委員會,設計一門開放標準的惰性純函數式語言——這就是 Haskell 的誕生起點。委員會由 Paul Hudak(耶魯)主持,Philip Wadler(格拉斯哥)、John Hughes(Chalmers)等人共同領導,成員來自 Yale、Glasgow、Chalmers、Oxford 等學界機構。

成立的理論與實用原因#

1. Miranda 的商業授權限制#

  • 理論原因:當時惰性純函數式語言的學術基礎(組合子圖歸約、call-by-need、代數資料型別)已相當成熟,理論上不存在技術障礙,缺的只是一個開放、可自由演進的載體。
  • 實用原因:Miranda 由 Research Software Ltd 商業發行,大學不能自由將它用於教學與研究(無法修改、無法自由散布實作),數十所大學的課程被卡在授權問題上。
  • 彌補缺陷:學術社群需要一個像 C 一樣可自由取得與實作的標準語言。

授權差異可以這樣對照——同一個 primes 程式,Miranda 卡在授權,Haskell 則任何人皆可自由實作:

-- Miranda(1985):Research Software Ltd 商業發行
--   ✓ 教學示範   ✗ 自由散布實作   ✗ 修改語言   ✗ 大學全面採用
-- Haskell(目標):委員會報告即標準
--   ✓ 教學示範   ✓ 自由散布實作   ✓ 開放演進   ✓ 任何人可實作

2. 惰性函數式語言方言過多(dozen+)#

  • 理論原因:Miranda 之外,還有 SASL、KRC、Hope、LML、Clean(當時稱 Concurrent Clean 的前身)等十幾種惰性語言方言,語法與語意互不相容,研究成果難以累積與互相比較。
  • 實用原因:委員會目標正是「統一現有惰性函數式語言」——設計一門可作為研究、教學與語意實驗共同基準的語言。
  • 彌補缺陷:重蹈 LISP 方言大戰的覆轍(見 1984-CommonLisp標準化 的教訓)。

方言互不相容可從語法差異看出——同一個「無窮質數」在 Miranda 與 Haskell(1990 版之前各實驗方言)寫法各異,委員會的目標就是讓一份程式碼通行所有實作:

-- Miranda:where 子句、分號分隔的列表推導
primes = sieve [2..]
         where sieve (p:x) = p : sieve [n | n <- x; n mod p > 0]
-- Haskell:where 子句、逗號分隔的列表推導(1990 年定稿語法)
primes = sieve [2..]
  where sieve (p:x) = p : sieve [n | n <- x, n `mod` p > 0]

3. 「avoid success at all costs」名言的背景#

  • 理論原因:委員會深知標準化語言一旦廣泛採用,向後相容的包袱將阻礙語言繼續作為研究實驗平台。
  • 實用原因:主持委員 Paul Hudak 因此留下名言——Haskell 的目標是「不惜一切代價避免成功(avoid success at all costs)」,意在讓語言保持自由演進、不必背負商業相容性包袱。諷刺的是,Haskell 後來成為影響最深遠的函數式語言之一。
  • 彌補缺陷:避免 Miranda 式的商業綁架,也避免 Common Lisp 式的龐大相容包袱。

4. 委員會的設計決策#

  • 理論原因:委員會決定語言應是純函數式(完全無副作用)、惰性求值、具備型別類(解決 ad-hoc 多型)與打點排版規則,並採用 Miranda 風格語法。
  • 實用原因:語言需免費、開放、任何人皆可實作,並以委員會報告(而非商業公司)作為標準文件。
  • 彌補缺陷:Miranda 的授權封閉與各惰性方言的不一致。

委員會的設計決策可化為一份「標準化目標清單」,日後的 Haskell 1.0 逐一兌現:

-- Haskell 設計目標(FPCA '87 決議):
--   1. 純函數式:完全無副作用
--   2. 惰性求值:call-by-need
--   3. 型別類:解決 ad-hoc 多型(Miranda 未解的難題)
--   4. 打點排版:offside rule
--   5. Miranda 風格語法,利於方言使用者遷移
--   6. 開放標準:報告即規格,任何人都可實作

彌補了什麼缺陷#

1987 年的構想會議彌補了兩大缺陷:Miranda 商業授權使教學研究受限,以及惰性函數式語言方言過多導致研究無法累積。三年後的成果即為 1990-Haskell-1-0問世,並在 1998 年定著於 1998-Haskell-98標準化。

相關條目#