PureScript

PureScript
编程范型函数式
設計者Phil Freeman
发行时间2013年,​11年前​(2013
当前版本
  • 0.15.15 (2024年2月7日;穩定版本)[1]
編輯維基數據鏈接
型態系統类型推论, 静态, 强类型
許可證三条款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共享了很特征:代数数据类型模式匹配高种类类型英语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 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超集。

引用

  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 

外部链接

范型
过程式
面向对象
多范型
函数式
逻辑式
脚本语言
动态语言
Shell语言
ECMA-262
特定平台
.NET
JVM
特定领域
科学计算
GPU计算
  • Cg/HLSL
  • GLSL
  • Brook英语BrookGPU
  • OpenCL
  • CUDA/PTX英语Parallel Thread Execution
  • Futhark
  • SPIR-V英语Standard Portable Intermediate Representation
数据查询
可视化
传媒设计
 
其它
  • 分类 目录
  • 列表级条目 列表
  • 历史
  • 比较英语Comparison of programming languages
  • 时间线英语Timeline of programming languages
代码分析
編譯器
概念
调试工具
  • Firebug
  • Komodo IDE英语Komodo IDE
  • Microsoft Script Debugger英语Microsoft Script Debugger
  • Microsoft Script Editor英语Microsoft Script Editor
  • Opera Dragonfly英语Opera Dragonfly
  • Venkman
  • Safari
文档生成器英语Documentation generator
  • JSDoc英语JSDoc
編輯器(比较英语Comparison of JavaScript-based source code editors
引擎
軟體框架
相關語言
相關技術
軟體套件管理系統
伺服器端
單元測試
  • Jasmine英语Jasmine (JavaScript framework)
  • Mocha英语Mocha (JavaScript framework)
  • QUnit英语QUnit
  • JavaScript单元测试框架列表英语List of unit testing frameworks#JavaScript
人物
语言
引擎列表
引擎比较
框架
客户端
  • Ample SDK英语Ample SDK
  • Chaplin.js英语Chaplin.js
  • Dojo
  • Echo
  • Extjs
  • Google網頁工具包
  • JQuery
  • Lively Kernel英语Lively Kernel
  • midori英语Midori JavaScript Framework
  • MochiKit英语MochiKit
  • MooTools英语MooTools
  • Prototype
  • Pyjs英语Pyjs
  • qooxdoo英语qooxdoo
  • Rialto英语Rialto Toolkit
  • Rico
  • script.aculo.us英语script.aculo.us
  • SmartClient英语SmartClient
  • SproutCore英语SproutCore
  • Spry英语Spry framework
  • Wakanda框架英语Wakanda (software)
  • 雅虎UI库
服务器
  • AppJet英语AppJet
  • Jaxer英语Jaxer#Aptana Jaxer
  • Node.js
  • Deno
  • WakandaDB英语Wakanda (software)
多種實作
  • Cappuccino英语Cappuccino (application development framework)
    • Objective-J英语Objective-J
  • PureMVC英语PureMVC
函式庫
  • Backbone.js
  • SWFObject英语SWFObject
  • SWFAddress英语SWFAddress
  • Lodash
人物
其他
  • DHTML
  • Ecma国际
  • JSDoc英语JSDoc
  • JSGI英语JSGI
  • JSHint
  • JSLint
  • JSON
  • JSSS英语JavaScript Style Sheets
  • Sputnik英语Sputnik (JavaScript conformance test)
  • SunSpider英语Browser speed test#SunSpider
  • 异步模块定义英语Asynchronous module definition
  • CommonJS
列表级条目列表
JavaScript库列表
Ajax框架英语list of Ajax frameworks#JavaScript
列表级条目比较
JavaScript框架英语Comparison of JavaScript frameworks
服务器端JavaScript英语comparison of server-side JavaScript solutions