PureScript

一个強型別、純函數式、最終編譯為JavaScript的程式語言

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

PureScript
編程範型函數式
設計者Phil Freeman
面市時間2013年,​11年前​(2013
當前版本
  • 0.15.15(2024年2月7日;穩定版本)[1]
編輯維基數據鏈接
型態系統類型推論, 靜態, 強類型
許可證三條款BSD許可證[2]
文件擴展名.purs
網站www.purescript.org
啟發語言
Haskell, JavaScript

歷史

編輯

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

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

特徵

編輯

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

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

PureScript支持增量編譯,而且編譯器發行包括了支持為迭代開發建造源代碼編輯器插件[13]。存在編輯器插件針對很多流行的編輯器,包括VimEmacsSublime TextAtomVisual 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超集。

引用

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

外部連結

編輯