fbpx
维基百科

REBOL

REBOL(發音reb-ol ['reb-ol],英文Relative Expression Based Object Language的缩写),自R3发行版改称为Rebol[6],是跨平台数据交换语言多范型动态编程语言。由AmigaOS的系统架构师Carl Sassenrath英语Carl Sassenrath设计,用于网络通信和分布式计算

Rebol
编程范型面向语言, 数据交换, 同像性, 指令式, 函数式, 基于原型
設計者Carl Sassenrath英语Carl Sassenrath
實作者REBOL技术
发行时间1997年,​27年前​(1997
当前版本
  • 2.101.0 (2012年12月12日)
型態系統动态, 强类型
操作系统跨平台
許可證2.7.8为免费重新发布软件英语Freely redistributable software[1]
R3为Apache 2.0许可证[2]
文件扩展名.r, .reb[3]
網站www.rebol.com
啟發語言
Self, Forth, Lisp, Logo[4]
影響語言
JSON[5], Red英语Red (programming language)

简介 编辑

REBOL介入了方言化的概念:用于代码和数据的小型的、优化英语Program optimization领域特定语言[7][8],据设计者Carl Sassenrath英语Carl Sassenrath所说这是这个语言最显著的性质:“尽管它可以用于编程、写函数和进行处理,它最大的长处是轻易的建立领域特定语言或方言的能力。[9]

知名于JavaScript开发上贡献的道格拉斯·克羅克福特,曾经描述Rebol为是对JSON有影响者之一:“更加现代的语言,但具有一些非常类似于Lisp的想法,它全部建造在数据表示之上,然后再被作为程序执行。[5]

最初,这个语言和它的官方实现,是REBOL技术公司开发的专有和封闭源代码的软件。经过跟Lawrence Rosen英语Lawrence Rosen (attorney)的讨论[10],Rebol版本R3解释器于2012年12月12日在Apache 2.0许可证下发行[11]。老版本能以二进制形式获得到,没有发行它们的源代码的规划。

Rebol已经被用于编程互联网应用客户端服务器端二者)、数据库应用、实用工具多媒体应用[7]

实例 编辑

Rebol的设计原理之一就是“以简单方式做简单的事情”[7]。使用下面的“可视界面方言”例子来描述一个具有图形用户界面的简单的Hello world程序:

view layout [text "Hello world!" button "Quit" [quit]] 

使用R3-GUI的类似的例子:

view [text "Hello world!" button "Quit" on-action [quit]] 

 

方言 编辑

Rebol的领域特定语言叫做“方言”,是为特定用途优化的微型语言。方言可以用来定义业务规则、图形用户界面或在程序安装期间的屏幕序列。用户可以定义他们自己的方言,重用任何现存的Rebol单词并给予它在方言中的特殊含义[7]。方言是有处理Robol块的函数以特殊方式解释的。

Rebol的方言能力的例子可以从单词return看出来。在“数据交换方言”中return就是个没有任何特殊含义的单词。在“执行方言”中, return是个全局变量,指称传递回一个函数结果值的一个原生函数[4] 。在“可视界面方言”(VID)中return是一个关键字,导致布局引擎去模拟一个回车返回,移动“呈现笔”下至下一行的开始处[8]

具有图形能力的Rebol解释器必须理解和解释很多方言。下表按重要性依次列出最主要的方言。

方言名字 解释于 用途
数据交换方言 load函数 表示数据和元数据;Rebol方言的共用平台
执行方言 do函数 编程
解析方言 parse函数 模式匹配
函数规定方言 make函数 函数定义;函数式编程
对象规定方言 make函数 对象定义/继承;基于原型编程
可视界面方言或
RebGUI
layout函数或
display函数
指定图形用户界面
绘图方言 view函数 定义图形元素(直线、多边形等)
脚本规定方言 do函数 脚本定义
安全政策方言 secure函数 指定安全政策

语法 编辑

Rebol的语法英语syntax (programming languages)自由形式的,不要求特殊定位。但是,通常使用缩进来更好将文本结构传达给人类读者。

不同方言的语法属性可以不同。对于所有Rebol方言的公共平台是“数据交换方言”;其他方言通常从它派生。除了是所有方言的公共平台之外,“数据交换方言”直接用来表示数据和元数据、迁移(populate)数据结构,在互联网上发送数据,并把它们保存在数据存储中。

对比于编程语言比如C,“数据交换方言”不构成自声明英语declaration (computer science)语句表达式英语expression (programming)关键字。有效的“数据交换方言”文本流是树数据结构,构成自块(根块是隐含的,子块由方括号界定英语delimiter),圆块(圆括号界定)、字符串双引号或适用多行字符串的花括号来界定;脱字符表示法用于不可打印字符)、URL、e-mail地址、文件、路径或其他复合值。不同于ALGOL,Rebol的块是复合(composite)值,类似于Lisp中引用起来的表达式。代码以Rebol块的形式写成的事实,使语言具有同像性[4]

块还有圆块可以包含由空白分隔的其他复合值(一个块可以包含子块、圆块、字符串等等)或标量值比如:word(单词)、set-word(后缀着冒号的单词)、get-word(前缀着冒号的单词)、lit-word(前缀着撇号的单词)[12],数字、钱款、字符等。注意在单词中允许特殊字符,所以a+b是一个单词,不同于a + b,它是空格分隔的三个单词。

注释可以出现在分号之后直到行结束。多行注释或不被词法分析器忽略的注释,可以使用平常的数据类型比如多行字符串来书写[4]

语义 编辑

块包含领域特定语言,它可以作为实际参数提交给特定的“求值器”函数[7]

do 编辑

最常用的求值器是do函数。它被缺省的用来解释给解释器控制台的文本输入。

do函数解释的“执行方言”,是一个面向表达式英语expression-oriented programming languages的“数据交换方言”的子语言。语言的主要语义单元是表达式英语expression (programming)。对比于派生自ALGOL的指令式编程语言,“执行方言”既没有关键字也没有语句。

单词被用作大小写不敏感变量。像在所有动态类型语言中那样,变量没有关联的类型,类型是关联于值的。在do函数遇到一个单词的时候,返回对这个单词的求值结果。set-word单词可以用于赋值。尽管没有语句,赋值和有副作用的函数在一起,可以用于指令式编程[4]

根块的子块自行用do求值。块作为解释器实际参数这个性质被用来处理数据块,通过把块作为实际参数提交给控制函数如ifeitherloop等用于结构化编程,在把块传递给特定解释器函数时用于方言[7]

值得注意的特殊问题是赋值给变量的复合值是不复制的。要制作一个复本,这个值必须传递给copy函数[4]

do函数通常服从前缀表示法求值,这里函数处理跟随在其后的实际参数。但是,也存在使用中缀算符英语Operator (computer programming)中缀求值。中缀求职优先于前缀求值。例如:

abs -2 + 3 

返回1,因为中缀加法优先于计算绝对值。在求值中缀表达式的时候,求值的次序是从左至右,没有算符优先于其他算符。例如

2 + 3 * 4 

返回20,对于乘法优先于加法的求值这将产生14。所有算法都有前缀版本。Do在将实际参数传递给函数之前通常对实际参数进行求值。所以,下列表达式:

print read http://en.wikipedia.org/wiki/Rebol 

首先读取维基百科的Rebol页面,接着把结果传递给print函数。圆括号可以用来改变求值的次序。使用前缀表示法,可以避免使用圆括号[4]

这种简单的优先级规则有如下优势:

  • 不需要在写表示式的时候查看优先级表格,
  • 不需要在定义新算符的时候重写优先级表格,
  • 表达式可以轻易的从中缀转写成前缀表示法或反之。

还有一个劣势:

  • 习惯了常规优先级规则的用户容易出错[7]

parse 编辑

parse函数适合用于规定、验证、变换和解释方言。它通过在运行时间匹配“解析表达式”来完成工作[7]

“解析表达式”是使用“解析方言”来书写的,它类似于“执行方言”,是“数据交换方言”的面向表达式的子语言。不同于“执行方言”,“解析方言”使用关键字来代表算符和大多数重要的非终结符,中缀分析算符没有前缀等价者并使用优先级规则(序列优先于选择)[7]

动作也可以被包含而在解析处理期间进行,并且parse函数可以被用来处理块或字符串。在“字符串解析”层级,parse必须处理“低层”解析,需要考虑到字符界定符英语delimiter。“块解析”是更高层级,处理在Rebol值的级别上的扫描[7]

解析方言属于由自顶向下解析语言英语top-down parsing language解析表达文法(PEG)为代表的文法家族。主要的类似性是所有家族成员都有序列和选择算符的出现。解析方言的语法和在解析方言和PEG之间的类似性可以用分析算术表达式的PEG示例的如下转写来展示:

Digit: charset [#"0" - #"9"] Value: [some Digit | "(" Expr ")"] Product: [Value any [["*"| "/"] Value]] Sum: [Product any [["+"| "-"] Product]] Expr: Sum parse/all "12+13" Expr 

引用 编辑

  1. ^ REBOL Technologies. The REBOL/View and REBOL/Core 2.7.8 license (页面存档备份,存于互联网档案馆
  2. ^ R3 source at GitHub
  3. ^ . Rebol.com. August 18, 2013 [January 23, 2014]. (原始内容存档于2020-09-24). 
  4. ^ 4.0 4.1 4.2 4.3 4.4 4.5 4.6 Goldman, E., Blanton, J. (2000). REBOL: The Official Guide. McGraw-Hill Osborne Media. ISBN 0-07-212279-X.
  5. ^ 5.0 5.1 Crockford, Douglas. The JSON Saga (页面存档备份,存于互联网档案馆, jsonsaga.ppt 互联网档案馆的,存档日期October 4, 2012,.
  6. ^ . December 14, 2012 [December 2, 2013]. (原始内容存档于December 3, 2013). 
    Sassenrath, Carl. . [16 September 2016]. (原始内容存档于2020-12-02). 
  7. ^ 7.00 7.01 7.02 7.03 7.04 7.05 7.06 7.07 7.08 7.09 Roberts, Ralph (2000). REBOL for Dummies. Hungry Minds. ISBN 0-7645-0745-1.
  8. ^ 8.0 8.1 Auverlot, Olivier (2001). Rebol Programmation. Eyrolles. ISBN 2-212-11017-0.
  9. ^ Sassenrath, Carl. . Dr. Dobb's Journal. 2000-07-01 [2021-02-19]. (原始内容存档于2009-04-27). 
  10. ^ . Rebol.com. September 25, 2012 [January 23, 2014]. (原始内容存档于2013-12-03). 
  11. ^ Sassenrath, Carl. . December 12, 2012 [August 14, 2014]. (原始内容存档于2014-08-19). You probably thought the source release would never happen? Am I right? Well, it's there now in github at github.com/rebol/rebol. 
  12. ^ . [2022-02-10]. (原始内容存档于2022-02-10). 

延伸阅读 编辑

  • Mikes, Nora. . LinuxWorld. November 20, 1999. (原始内容存档于March 24, 2005). 
  • Story, Derrick. . Web Review. Aug 27, 1999. (原始内容存档于October 12, 1999). 

外部链接 编辑

rebol, 發音reb, 英文relative, expression, based, object, language的缩写, 自r3发行版改称为rebol, 是跨平台的数据交换语言和多范型的动态编程语言, 由amigaos的系统架构师carl, sassenrath, 英语, carl, sassenrath, 设计, 用于网络通信和分布式计算, rebol编程范型面向语言, 数据交换, 同像性, 指令式, 函数式, 基于原型設計者carl, sassenrath, 英语, carl, sassenrath,. REBOL 發音reb ol reb ol 英文Relative Expression Based Object Language的缩写 自R3发行版改称为Rebol 6 是跨平台的数据交换语言和多范型的动态编程语言 由AmigaOS的系统架构师Carl Sassenrath 英语 Carl Sassenrath 设计 用于网络通信和分布式计算 Rebol编程范型面向语言 数据交换 同像性 指令式 函数式 基于原型設計者Carl Sassenrath 英语 Carl Sassenrath 實作者REBOL技术发行时间1997年 27年前 1997 当前版本2 101 0 2012年12月12日 型態系統动态 强类型操作系统跨平台許可證2 7 8为免费重新发布软件 英语 Freely redistributable software 1 R3为Apache 2 0许可证 2 文件扩展名 r reb 3 網站www wbr rebol wbr com啟發語言Self Forth Lisp Logo 4 影響語言JSON 5 Red 英语 Red programming language 維基教科書中有關Rebol Programming的文本 目录 1 简介 2 实例 3 方言 4 语法 5 语义 5 1 do 5 2 parse 6 引用 7 延伸阅读 8 外部链接简介 编辑REBOL介入了方言化的概念 用于代码和数据的小型的 优化 英语 Program optimization 的领域特定语言 7 8 据设计者Carl Sassenrath 英语 Carl Sassenrath 所说这是这个语言最显著的性质 尽管它可以用于编程 写函数和进行处理 它最大的长处是轻易的建立领域特定语言或方言的能力 9 知名于JavaScript开发上贡献的道格拉斯 克羅克福特 曾经描述Rebol为是对JSON有影响者之一 更加现代的语言 但具有一些非常类似于Lisp的想法 它全部建造在数据表示之上 然后再被作为程序执行 5 最初 这个语言和它的官方实现 是REBOL技术公司开发的专有和封闭源代码的软件 经过跟Lawrence Rosen 英语 Lawrence Rosen attorney 的讨论 10 Rebol版本R3解释器于2012年12月12日在Apache 2 0许可证下发行 11 老版本能以二进制形式获得到 没有发行它们的源代码的规划 Rebol已经被用于编程互联网应用 客户端 和服务器端 二者 数据库应用 实用工具和多媒体应用 7 实例 编辑Rebol的设计原理之一就是 以简单方式做简单的事情 7 使用下面的 可视界面方言 例子来描述一个具有图形用户界面的简单的Hello world程序 view layout text Hello world button Quit quit 使用R3 GUI的类似的例子 view text Hello world button Quit on action quit nbsp 方言 编辑Rebol的领域特定语言叫做 方言 是为特定用途优化的微型语言 方言可以用来定义业务规则 图形用户界面或在程序安装期间的屏幕序列 用户可以定义他们自己的方言 重用任何现存的Rebol单词并给予它在方言中的特殊含义 7 方言是有处理Robol块的函数以特殊方式解释的 Rebol的方言能力的例子可以从单词return看出来 在 数据交换方言 中return就是个没有任何特殊含义的单词 在 执行方言 中 return是个全局变量 指称传递回一个函数结果值的一个原生函数 4 在 可视界面方言 VID 中return是一个关键字 导致布局引擎去模拟一个回车返回 移动 呈现笔 下至下一行的开始处 8 具有图形能力的Rebol解释器必须理解和解释很多方言 下表按重要性依次列出最主要的方言 方言名字 解释于 用途 数据交换方言 load函数 表示数据和元数据 Rebol方言的共用平台 执行方言 do函数 编程 解析方言 parse函数 模式匹配 函数规定方言 make函数 函数定义 函数式编程 对象规定方言 make函数 对象定义 继承 基于原型编程 可视界面方言或RebGUI layout函数或display函数 指定图形用户界面 绘图方言 view函数 定义图形元素 直线 多边形等 脚本规定方言 do函数 脚本定义 安全政策方言 secure函数 指定安全政策语法 编辑Rebol的语法 英语 syntax programming languages 是自由形式的 不要求特殊定位 但是 通常使用缩进来更好将文本结构传达给人类读者 不同方言的语法属性可以不同 对于所有Rebol方言的公共平台是 数据交换方言 其他方言通常从它派生 除了是所有方言的公共平台之外 数据交换方言 直接用来表示数据和元数据 迁移 populate 数据结构 在互联网上发送数据 并把它们保存在数据存储中 对比于编程语言比如C 数据交换方言 不构成自声明 英语 declaration computer science 语句 表达式 英语 expression programming 或关键字 有效的 数据交换方言 文本流是树数据结构 构成自块 根块是隐含的 子块由方括号界定 英语 delimiter 圆块 圆括号界定 字符串 双引号或适用多行字符串的花括号来界定 脱字符表示法用于不可打印字符 URL e mail地址 文件 路径或其他复合值 不同于ALGOL的块 Rebol的块是复合 composite 值 类似于Lisp中引用起来的表达式 代码以Rebol块的形式写成的事实 使语言具有同像性 4 块还有圆块可以包含由空白分隔的其他复合值 一个块可以包含子块 圆块 字符串等等 或标量值比如 word 单词 set word 后缀着冒号的单词 get word 前缀着冒号的单词 lit word 前缀着撇号的单词 12 数字 钱款 字符等 注意在单词中允许特殊字符 所以a b是一个单词 不同于a b 它是空格分隔的三个单词 注释可以出现在分号之后直到行结束 多行注释或不被词法分析器忽略的注释 可以使用平常的数据类型比如多行字符串来书写 4 语义 编辑块包含领域特定语言 它可以作为实际参数提交给特定的 求值器 函数 7 do 编辑 最常用的求值器是do函数 它被缺省的用来解释给解释器控制台的文本输入 由do函数解释的 执行方言 是一个面向表达式 英语 expression oriented programming languages 的 数据交换方言 的子语言 语言的主要语义单元是表达式 英语 expression programming 对比于派生自ALGOL的指令式编程语言 执行方言 既没有关键字也没有语句 单词被用作大小写不敏感变量 像在所有动态类型语言中那样 变量没有关联的类型 类型是关联于值的 在do函数遇到一个单词的时候 返回对这个单词的求值结果 set word单词可以用于赋值 尽管没有语句 赋值和有副作用的函数在一起 可以用于指令式编程 4 根块的子块自行用do求值 块作为解释器实际参数这个性质被用来处理数据块 通过把块作为实际参数提交给控制函数如if either loop等用于结构化编程 在把块传递给特定解释器函数时用于方言 7 值得注意的特殊问题是赋值给变量的复合值是不复制的 要制作一个复本 这个值必须传递给copy函数 4 do函数通常服从前缀表示法求值 这里函数处理跟随在其后的实际参数 但是 也存在使用中缀算符 英语 Operator computer programming 的中缀求值 中缀求职优先于前缀求值 例如 abs 2 3 返回1 因为中缀加法优先于计算绝对值 在求值中缀表达式的时候 求值的次序是从左至右 没有算符优先于其他算符 例如 2 3 4 返回20 对于乘法优先于加法的求值这将产生14 所有算法都有前缀版本 Do在将实际参数传递给函数之前通常对实际参数进行求值 所以 下列表达式 print read http en wikipedia org wiki Rebol 首先读取维基百科的Rebol页面 接着把结果传递给print函数 圆括号可以用来改变求值的次序 使用前缀表示法 可以避免使用圆括号 4 这种简单的优先级规则有如下优势 不需要在写表示式的时候查看优先级表格 不需要在定义新算符的时候重写优先级表格 表达式可以轻易的从中缀转写成前缀表示法或反之 还有一个劣势 习惯了常规优先级规则的用户容易出错 7 parse 编辑 parse函数适合用于规定 验证 变换和解释方言 它通过在运行时间匹配 解析表达式 来完成工作 7 解析表达式 是使用 解析方言 来书写的 它类似于 执行方言 是 数据交换方言 的面向表达式的子语言 不同于 执行方言 解析方言 使用关键字来代表算符和大多数重要的非终结符 中缀分析算符没有前缀等价者并使用优先级规则 序列优先于选择 7 动作也可以被包含而在解析处理期间进行 并且parse函数可以被用来处理块或字符串 在 字符串解析 层级 parse必须处理 低层 解析 需要考虑到字符和界定符 英语 delimiter 块解析 是更高层级 处理在Rebol值的级别上的扫描 7 解析方言属于由自顶向下解析语言 英语 top down parsing language 或解析表达文法 PEG 为代表的文法家族 主要的类似性是所有家族成员都有序列和选择算符的出现 解析方言的语法和在解析方言和PEG之间的类似性可以用分析算术表达式的PEG示例的如下转写来展示 Digit charset 0 9 Value some Digit Expr Product Value any Value Sum Product any Product Expr Sum parse all 12 13 Expr引用 编辑 REBOL Technologies The REBOL View and REBOL Core 2 7 8 license 页面存档备份 存于互联网档案馆 R3 source at GitHub Carl s REBOL Blog Let s switch to reb suffix Rebol com August 18 2013 January 23 2014 原始内容存档于2020 09 24 4 0 4 1 4 2 4 3 4 4 4 5 4 6 Goldman E Blanton J 2000 REBOL The Official Guide McGraw Hill Osborne Media ISBN 0 07 212279 X 5 0 5 1 Crockford Douglas The JSON Saga 页面存档备份 存于互联网档案馆 jsonsaga ppt 互联网档案馆的存檔 存档日期October 4 2012 Calling REBOL Rebol December 14 2012 December 2 2013 原始内容存档于December 3 2013 Sassenrath Carl Cross compiling Rebol for your favorite embedded board 16 September 2016 原始内容存档于2020 12 02 7 00 7 01 7 02 7 03 7 04 7 05 7 06 7 07 7 08 7 09 Roberts Ralph 2000 REBOL for Dummies Hungry Minds ISBN 0 7645 0745 1 8 0 8 1 Auverlot Olivier 2001 Rebol Programmation Eyrolles ISBN 2 212 11017 0 Sassenrath Carl Inside the REBOL scripting language Dr Dobb s Journal 2000 07 01 2021 02 19 原始内容存档于2009 04 27 REBOL to become open source Rebol com September 25 2012 January 23 2014 原始内容存档于2013 12 03 Sassenrath Carl Comments on R3 Source Code Released December 12 2012 August 14 2014 原始内容存档于2014 08 19 You probably thought the source release would never happen Am I right Well it s there now in github at github com rebol rebol REBOL 3 Datatypes Word 2022 02 10 原始内容存档于2022 02 10 延伸阅读 编辑Mikes Nora A REBOL incursion It s not a scripting language not a programming language and not a new Amiga either Or is it LinuxWorld November 20 1999 原始内容存档于March 24 2005 Story Derrick Rebol Might Be the Language for the Rest of Us Web Review Aug 27 1999 原始内容存档于October 12 1999 外部链接 编辑开放目录项目中的 REBOL A REBOL tutorial 页面存档备份 存于互联网档案馆 Rebol 3 Tutorial 页面存档备份 存于互联网档案馆 取自 https zh wikipedia org w index php title REBOL amp oldid 78090033, 维基百科,wiki,书籍,书籍,图书馆,

文章

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