PureScript
編程範型 | 函數式 |
---|---|
設計者 | Phil Freeman |
面市時間 | 2013年 |
當前版本 |
|
型態系統 | 類型推論, 靜態, 強類型 |
許可證 | 三條款BSD許可證[2] |
文件擴展名 | .purs |
網站 | www.purescript.org |
啟發語言 | |
Haskell, JavaScript |
PureScript是一種強類型、純函數式、最終編譯為JavaScript的編程語言。PureScript可以開發網絡應用程序、服務端應用程序,也可以藉助Electron開發桌面應用程序。其語法大多與Haskell相當[3]。此外,它還引入了行多態性和可擴展記錄。[4]不過,與Haskell相反的是,PureScript堅持嚴格求值策略。
歷史
PureScript最初由費爾·弗里曼在2013年設計[5]。他曾屢次嘗試在保留語義的情況下,將Haskell編譯成JavaScript(如使用Fay、Haste或GHCJS[6]),但結果並不滿意,於是他開始着手在PureScript上工作。[7]
從此以後它由社區接手並在GitHub繼續開發[8]。社區開發的額外核心工具包括專門的構建工具Pulp[9]、文檔目錄Pursuit[10]和包管理器Spago[11]。
特徵
PureScript特徵主要為嚴格求值、持久性數據結構和類型推論。PureScript的類型系統同類似的函數式語言如Haskell共享了很特徵:代數數據類型及模式匹配、高種類類型、類型類及函數依賴和高秩多態。PureScript的類型系統增加了對行多態和可擴展記錄的支持[12]。但是,PureScript缺乏對Haskell的某些更高級特徵如GADT和類型家族的支持。
PureScript編譯器嘗試產生儘可能可讀的JavaScript代碼。通過一個簡單的FFI接口,它還允許重用現存的JavaScript代碼[12]。
PureScript支持增量編譯,而且編譯器發行包括了支持為迭代開發建造源代碼編輯器插件[13]。存在編輯器插件針對很多流行的編輯器,包括Vim、Emacs、Sublime Text、Atom和Visual Studio Code。
PureScript通過它的「類型孔洞」特徵支持「類型驅動開發」[14],在其中可以構造具有缺失子表達式的程序。編譯器隨後將嘗試推論出缺失子表達式的類型,並將這些類型報告給用戶。這個特徵已經啟發了GHC的類似工作[15]。
示例
一個最精簡的Hello world程序如下:
module Main where
import Effect.Console (log)
main = log "Hello World!"
在這裡,程序的類型是由PureScript編譯器推論出並檢查。相同程序的更冗長版本可以包括顯式的類型標註:
module Main where
import Prelude
import Effect (Effect)
import Effect.Console (log)
main :: Effect Unit
main = log "Hello World!"
參見
- Elm——一種領域特定編程語言,用於聲明式創建基於網頁瀏覽器的圖形用戶界面。
- Reason——OCaml的語法擴展和工具鏈,也可以轉譯成JavaScript。
- JS++——一個強型別、純函數式、最終編譯為JavaScript的程式語言。
- TypeScript——程式語言,編譯成JavaScript的JavaScript超集。
引用
- ^ Release 0.15.15. 2024年2月7日 [2024年2月20日].
- ^ purescript/purescript. GitHub. [2021-02-14]. (原始內容存檔於2021-04-25).
- ^ PureScript for the Haskeller - Where to get started in PureScript for the Haskell programmer. [2021-02-28]. (原始內容存檔於2020-11-08).
- ^ PureScript. www.purescript.org. [2019-03-14]. (原始內容存檔於2021-02-05).
- ^ PureScript - Strongly Typed Programming Language Compiling to JavaScript - Interview with Phil Freeman. [2021-02-28]. (原始內容存檔於2021-01-18).
- ^ The JavaScript Problem. [2021-02-28]. (原始內容存檔於2020-12-09).
- ^ Read PureScript by Example | Leanpub. leanpub.com. [2019-03-14]. (原始內容存檔於2020-11-29).
- ^ awesome-purescript. [2021-02-28]. (原始內容存檔於2021-11-21).
- ^ A build tool for PureScript projects, PureScript Contrib, 2019-03-08 [2019-03-14], (原始內容存檔於2020-12-05)
- ^ Pursuit. pursuit.purescript.org. [2019-03-14]. (原始內容存檔於2021-03-01).
- ^ 🍝 PureScript package manager and build tool powered by Dhall and package-sets: spacchetti/spago, spacchetti, 2019-03-14 [2019-03-14]
- ^ 12.0 12.1 Documentation for the PureScript language, compiler, and tools.: purescript/documentation, PureScript, 2019-03-14 [2019-03-14], (原始內容存檔於2021-04-25)
- ^ purs ide: Editor and tooling support for the PureScript programming language, 2019-04-21 [2019-04-21]
- ^ Implementing type directed search for PureScript, 2016-10-27
- ^ Matthías Páll Gissurarson, Suggesting Valid Hole Fits for Typed-Holes (Experience Report), 2018-09-27