fbpx
维基百科

Ur语言

Ur也叫作Ur/Web,是一个自由开源函数式编程语言,专门用于web开发,由Adam Chlipala在麻省理工学院创建[3],它从一个单一的程序产生服务器代码、web浏览器客户端代码、和特定于选择的数据库后端SQL代码。

Ur
编程范型函数式, 响应式
语言家族ML
設計者Adam Chlipala
发行时间2014年12月,​9年前​(2014-12 [1]
当前版本
  • 20200209 (2020年2月9日;穩定版本)
系统平台POSIX
許可證三条款BSD许可证
文件扩展名.ur, .urs, .urp
網站impredicative.com/ur
啟發語言
ML[2], Haskell

概述 编辑

Ur的语法基于了Standard ML,然而语言也包括来自Haskell的概念,具有额外的类型操纵。Ur支持一种基于行类型的强力的元编程[2]。Ur/Web是Ur加上特殊的标准库和用于解析和优化的关联规则。Ur/Web编译器还产生不使用垃圾回收的非常高效的目标代码[2]。所有这些实现都是开放源代码[2]

Ur/Web支持构造以SQL数据库为后端的动态web应用。嵌入到语言中的SQL语法模板便利了表格处理。浏览器客户端,包括了函数式响应式编程设施,使用了(source a)类型和signal单子Ajax调用/反响,通过叫作“事务”(对应于Haskell的IO)的单子序列化,并且它的集结和解码被封装在rpc函数中。

标准库的签名(signature),使得有良好类型的Ur/Web程序,在非常宽广的意义上不会出错。不只是在特定页面生成期间不崩溃,它们还能够做到[2]

  • 不遭受任何种类的代码注入攻击。
  • 不返回无效的HTML
  • 不包含应用内部死链接。
  • HTML表单和它们的处理器所预期的字段之间,没有不匹配。
  • 不包括对远程web服务器提供的Ajax风格服务有不正确假定的客户端代码。
  • 不尝试无效的SQL查询。
  • web浏览器web服务之间或与SQL数据库的通信中,不使用不正确的集结(marshaling)或解散(unmarshaling)。

这种类型安全正是Ur/Web方法论的基础。还有可能使用元编程,通过分析类型结构来建造重要的应用部件[2]

例子程序 编辑

下面是展示客户端、服务器和数据库采用Ajax通信的演示程序,来自web demos[4],有着勾画每个构件的额外注释:

接口文件(类似ML的签名)具有.urs扩展名:

(* 环境单子叫做transaction,对应于Haskell的IO单子 *) val main : unit -> transaction page 

实现文件(.ur扩展名):

datatype list t = Nil | Cons of t * list t table t : { Id : int, A : string } PRIMARY KEY Id (* 服务器端数据库访问,通过AJAX XmlHttpRequest调用,  封装为rpc函数(远程过程调用) *) fun add id s = (* sql dml模板,据有表达式{[expression]} *) dml (INSERT INTO t (Id, A) VALUES ({[id]}, {[s]})) fun del id = dml (DELETE FROM t WHERE t.Id = {[id]}) fun lookup id = (* haskell风格单子代码 *) ro <- oneOrNoRows (SELECT t.A FROM t WHERE t.Id = {[id]}); case ro of None => return None (* return是单子提升函数 *) | Some r => return (Some r.T.A) (* check由客户端onClick事件处理器调用,  所以它将被编译成JavaScript,成为嵌入了客户端脚本的页面 *) fun check ls = case ls of Nil => return () | Cons (id, ls') => ao <- rpc (lookup id); (* Ajax调用至服务器端 *) alert (case ao of None => "Nada" | Some a => a ); check ls' fun main () = idAdd <- source ""; aAdd <- source ""; idDel <- source ""; (* 生成包含有JavaScript的web页面 *) return <xml><body> <button value="Check values of 1, 2, and 3" onclick={fn _ => let val mylist = 1 :: 2 :: 3 :: [] in check mylist end }/><br/> <br/> <button value="Add" onclick={fn _ => id <- get idAdd; a <- get aAdd; rpc (add (readError id) a) (* Ajax调用到服务器端 *) }/> <ctextbox source={idAdd}/> <ctextbox source={aAdd}/><br/> <br/> <button value="Delete" onclick={fn _ => id <- get idDel; rpc (del (readError id)) (* Ajax调用到服务器端 *) }/> <ctextbox source={idDel}/> </body></xml> 

项目文件(.urp扩展名),必须包含可选的指令(directive)列表,跟随着项目模块的列表[5]

 # hash号前缀于行注释  rewrite url Module1/main # 设置根URL至Module1/main函数  exe myexename  database dbname=test # 数据库特性和参数  sql noisy.sql  $/list # stdlib模块前缀着"$/"  module2 # 如果被module1所用则必须前导于它  module1 # main模块 
  • 服务器端,没有副作用的检索函数的页面(HTTPGET方法),经由一个URL而可访问为/ModulePath/functionName,它们应当具有类型(unit -> transaction page)
  • 要导出可能导致副作用的一个页面,只能通过HTTPPOST方法来访问,包括指定页面处理器的一个实际参数,它具有类型Basis.postBody[6]

编译:

 urweb module1 # 查找module1.urp 

作为一个web服务器来执行(其他模态有CGIFastCGI等等):

 ./module1.exe -p 8081 # -h : RTS选项帮助 

引用 编辑

  1. ^ . [2021-03-03]. (原始内容存档于2016-06-04). 
  2. ^ 2.0 2.1 2.2 2.3 2.4 2.5 . impredicative.com/ur. [3 April 2016]. (原始内容存档于2020-11-30). 
  3. ^ Adam Chlipala. (PDF). MIT / Association for Computing Machinery (ACM). January 2015 [2021-09-04]. (原始内容 (PDF)存档于2022-01-16). 
  4. ^ . [2021-03-04]. (原始内容存档于2020-11-12). 
  5. ^ Chlipala, Adam. . urweb-doc. January 2015 [8 January 2015]. (原始内容存档于2016-03-04). 
  6. ^ . [2021-03-04]. (原始内容存档于2016-03-04). 

外部链接 编辑

ur语言, ur也叫作ur, 是一个自由和开源的函数式编程语言, 专门用于web开发, 由adam, chlipala在麻省理工学院创建, 它从一个单一的程序产生服务器代码, web浏览器客户端代码, 和特定于选择的数据库后端的sql代码, ur编程范型函数式, 响应式语言家族ml設計者adam, chlipala发行时间2014年12月, 9年前, 2014, 当前版本20200209, 2020年2月9日, 穩定版本, 系统平台posix許可證三条款bsd许可证文件扩展名, urp網站impredicative. Ur也叫作Ur Web 是一个自由和开源的函数式编程语言 专门用于web开发 由Adam Chlipala在麻省理工学院创建 3 它从一个单一的程序产生服务器代码 web浏览器客户端代码 和特定于选择的数据库后端的SQL代码 Ur编程范型函数式 响应式语言家族ML設計者Adam Chlipala发行时间2014年12月 9年前 2014 12 1 当前版本20200209 2020年2月9日 穩定版本 系统平台POSIX許可證三条款BSD许可证文件扩展名 ur urs urp網站impredicative wbr com wbr ur啟發語言ML 2 Haskell 目录 1 概述 2 例子程序 3 引用 4 外部链接概述 编辑Ur的语法基于了Standard ML 然而语言也包括来自Haskell的概念 具有额外的类型操纵 Ur支持一种基于行类型的强力的元编程 2 Ur Web是Ur加上特殊的标准库和用于解析和优化的关联规则 Ur Web编译器还产生不使用垃圾回收的非常高效的目标代码 2 所有这些实现都是开放源代码的 2 Ur Web支持构造以SQL数据库为后端的动态web应用 嵌入到语言中的SQL语法模板便利了表格处理 浏览器客户端 包括了函数式响应式编程设施 使用了 source a 类型和signal单子 Ajax调用 反响 通过叫作 事务 对应于Haskell的IO 的单子来序列化 并且它的集结和解码被封装在rpc函数中 标准库的签名 signature 使得有良好类型的Ur Web程序 在非常宽广的意义上不会出错 不只是在特定页面生成期间不崩溃 它们还能够做到 2 不遭受任何种类的代码注入攻击 不返回无效的HTML 不包含应用内部死链接 在HTML表单和它们的处理器所预期的字段之间 没有不匹配 不包括对远程web服务器提供的Ajax风格服务有不正确假定的客户端代码 不尝试无效的SQL查询 在web浏览器和web服务之间或与SQL数据库的通信中 不使用不正确的集结 marshaling 或解散 unmarshaling 这种类型安全正是Ur Web方法论的基础 还有可能使用元编程 通过分析类型结构来建造重要的应用部件 2 例子程序 编辑下面是展示客户端 服务器和数据库采用Ajax通信的演示程序 来自web demos 4 有着勾画每个构件的额外注释 接口文件 类似ML的签名 具有 urs扩展名 环境单子叫做transaction 对应于Haskell的IO单子 val main unit gt transaction page 实现文件 ur扩展名 datatype list t Nil Cons of t list t table t Id int A string PRIMARY KEY Id 服务器端数据库访问 通过AJAX XmlHttpRequest调用 封装为rpc函数 远程过程调用 fun add id s sql dml模板 据有表达式 expression dml INSERT INTO t Id A VALUES id s fun del id dml DELETE FROM t WHERE t Id id fun lookup id haskell风格单子代码 ro lt oneOrNoRows SELECT t A FROM t WHERE t Id id case ro of None gt return None return是单子提升函数 Some r gt return Some r T A check由客户端onClick事件处理器调用 所以它将被编译成JavaScript 成为嵌入了客户端脚本的页面 fun check ls case ls of Nil gt return Cons id ls gt ao lt rpc lookup id Ajax调用至服务器端 alert case ao of None gt Nada Some a gt a check ls fun main idAdd lt source aAdd lt source idDel lt source 生成包含有JavaScript的web页面 return lt xml gt lt body gt lt button value Check values of 1 2 and 3 onclick fn gt let val mylist 1 2 3 in check mylist end gt lt br gt lt br gt lt button value Add onclick fn gt id lt get idAdd a lt get aAdd rpc add readError id a Ajax调用到服务器端 gt lt ctextbox source idAdd gt lt ctextbox source aAdd gt lt br gt lt br gt lt button value Delete onclick fn gt id lt get idDel rpc del readError id Ajax调用到服务器端 gt lt ctextbox source idDel gt lt body gt lt xml gt 项目文件 urp扩展名 必须包含可选的指令 directive 列表 跟随着项目模块的列表 5 hash号前缀于行注释 rewrite url Module1 main 设置根URL至Module1 main函数 exe myexename database dbname test 数据库特性和参数 sql noisy sql list stdlib模块前缀着 module2 如果被module1所用则必须前导于它 module1 main模块 服务器端 没有副作用的检索函数的页面 HTTPGET方法 经由一个URL而可访问为 ModulePath functionName 它们应当具有类型 unit gt transaction page 要导出可能导致副作用的一个页面 只能通过HTTPPOST方法来访问 包括指定页面处理器的一个实际参数 它具有类型Basis postBody 6 编译 urweb module1 查找module1 urp 作为一个web服务器来执行 其他模态有CGI FastCGI等等 module1 exe p 8081 h RTS选项帮助引用 编辑 UrWeb is out of beta 2021 03 03 原始内容存档于2016 06 04 2 0 2 1 2 2 2 3 2 4 2 5 The Ur Programming Language Family impredicative com ur 3 April 2016 原始内容存档于2020 11 30 Adam Chlipala Ur Web A Simple Model for Programming the Web PDF MIT Association for Computing Machinery ACM January 2015 2021 09 04 原始内容 PDF 存档于2022 01 16 Ur language demo programs 2021 03 04 原始内容存档于2020 11 12 Chlipala Adam The Ur Web Manual Project files urweb doc January 2015 8 January 2015 原始内容存档于2016 03 04 The Ur Web Manual The Structure of Web Applications 2021 03 04 原始内容存档于2016 03 04 外部链接 编辑Ur language home page 页面存档备份 存于互联网档案馆 Ur Web project page on GitHub 页面存档备份 存于互联网档案馆 Ur wiki 页面存档备份 存于互联网档案馆 取自 https zh wikipedia org w index php title Ur语言 amp oldid 77145620, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。