PureScript

維基百科,自由的百科全書
跳至導覽 跳至搜尋
PureScript
File:PureScript Logo.png
編程範型函數式
設計者Phil Freeman
釋出時間2013年,​13年前​(2013
當前版本
    Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
    型態系統類型推論, 靜態, 強類型
    許可證三條款BSD許可證[1]
    文件擴展名.purs
    網站www.purescript.org
    受影響於
    Haskell, JavaScript

    PureScript是一種強類型純函數式、最終編譯JavaScript程式語言。PureScript可以開發網絡應用程式、服務端應用程式,也可以藉助Electron開發桌面應用程式。其語法大多與Haskell相當[2]。此外,它還引入了行多態性和可擴展記錄。[3]不過,與Haskell相反的是,PureScript堅持嚴格求值策略

    歷史[編輯]

    PureScript最初由費爾·弗里曼在2013年設計[4]。他曾屢次嘗試在保留語義的情況下,將Haskell編譯成JavaScript(如使用Fay、Haste或GHCJS[5]),但結果並不滿意,於是他開始着手在PureScript上工作。[6]

    從此以後它由社區接手並在GitHub繼續開發[7]。社區開發的額外核心工具包括專門的構建工具Pulp[8]、文檔目錄Pursuit[9]和包管理器Spago[10]

    特徵[編輯]

    PureScript特徵主要為嚴格求值持久性數據結構類型推論。PureScript的類型系統同類似的函數式語言如Haskell共享了很特徵:代數數據類型模式匹配高種類類型英語Kind (type theory)類型類函數依賴高秩多態。PureScript的類型系統增加了對行多態英語Row polymorphism和可擴展記錄的支持[11]。但是,PureScript缺乏對Haskell的某些更高級特徵如GADT英語Generalized algebraic data type類型家族英語Type family的支持。

    PureScript編譯器嘗試產生儘可能可讀的JavaScript代碼。通過一個簡單的FFI接口英語Foreign function interface,它還允許重用現存的JavaScript代碼[11]

    PureScript支持增量編譯,而且編譯器發行包括了支持為迭代開發建造原始碼編輯器插件[12]。存在編輯器插件針對很多流行的編輯器,包括VimEmacsSublime TextAtomVisual Studio Code

    PureScript通過它的「類型孔洞」特徵支持「類型驅動開發」[13],在其中可以構造具有缺失子表達式的程序。編譯器隨後將嘗試推論出缺失子表達式的類型,並將這些類型報告給用戶。這個特徵已經啟發了GHC的類似工作[14]

    示例[編輯]

    一個最精簡的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!"
    

    參見[編輯]

    引用[編輯]

    1. ^ purescript/purescript. GitHub. [2021-02-14]. (原始內容存檔於2021-04-25). 
    2. ^ PureScript for the Haskeller - Where to get started in PureScript for the Haskell programmer. [2021-02-28]. (原始內容存檔於2020-11-08). 
    3. ^ PureScript. www.purescript.org. [2019-03-14]. (原始內容存檔於2021-02-05). 
    4. ^ PureScript - Strongly Typed Programming Language Compiling to JavaScript - Interview with Phil Freeman. [2021-02-28]. (原始內容存檔於2021-01-18). 
    5. ^ The JavaScript Problem. [2021-02-28]. (原始內容存檔於2020-12-09). 
    6. ^ Read PureScript by Example | Leanpub. leanpub.com. [2019-03-14]. (原始內容存檔於2020-11-29). 
    7. ^ awesome-purescript. [2021-02-28]. (原始內容存檔於2021-11-21). 
    8. ^ A build tool for PureScript projects, PureScript Contrib, 2019-03-08 [2019-03-14], (原始內容存檔於2020-12-05) 
    9. ^ Pursuit. pursuit.purescript.org. [2019-03-14]. (原始內容存檔於2021-03-01). 
    10. ^ 🍝 PureScript package manager and build tool powered by Dhall and package-sets: spacchetti/spago, spacchetti, 2019-03-14 [2019-03-14] 
    11. ^ 11.0 11.1 Documentation for the PureScript language, compiler, and tools.: purescript/documentation, PureScript, 2019-03-14 [2019-03-14], (原始內容存檔於2021-04-25) 
    12. ^ purs ide: Editor and tooling support for the PureScript programming language, 2019-04-21 [2019-04-21] 
    13. ^ Implementing type directed search for PureScript, 2016-10-27 
    14. ^ Matthías Páll Gissurarson, Suggesting Valid Hole Fits for Typed-Holes (Experience Report), 2018-09-27 

    外部連結[編輯]