Rebol 编程范型 面 めん 向 こう 语言 , 数 かず 据 すえ 交换 , 同 どう 像 ぞう 性 せい , 指令 しれい 式 しき , 函数 かんすう 式 しき , 基 もと 于原型 がた 設計 せっけい 者 しゃ Carl Sassenrath 實 じつ 作者 さくしゃ REBOL技 わざ 术 发行时间 1997年 ねん ,27年 ねん 前 まえ (1997 ) 当 とう 前 ぜん 版本 はんぽん 2.101.0 (2012年 ねん 12月12日 にち )
型 かた 態 たい 系統 けいとう 动态 , 强 つよ 类型操作 そうさ 系 けい 统跨 またが 平台 ひらだい 許可 きょか 證 しょう 2.7.8为免 めん 费重新 しん 发布软件[ 1] , R3为Apache 2.0许可证 [ 2] 文 ぶん 件 けん 扩展名 めい .r, .reb[ 3] 網 あみ 站www .rebol .com Self , Forth , Lisp , Logo [ 4] JSON [ 5] , Red
REBOL (發音 はつおん reb-ol ['reb-ol],英文 えいぶん R elative E xpression B ased O bject L anguage的 てき 缩写),自 じ R3发行版 ばん 改称 かいしょう 为Rebol [ 6] ,是 ぜ 跨 またが 平台 ひらだい 的 てき 数 かず 据 すえ 交换语言和 わ 多 た 范型的 てき 动态 编程语言 。由 ゆかり AmigaOS 的 まと 系 けい 统架构师Carl Sassenrath 设计,用 よう 于网络通信和 しんわ 分布 ぶんぷ 式 しき 计算 。
REBOL介入 かいにゅう 了 りょう 方言 ほうげん 化 か 的 てき 概念 がいねん :用 よう 于代码和数 すう 据 すえ 的 てき 小型 こがた 的 てき 、优化 的 てき 领域特定 とくてい 语言 [ 7] [ 8] ,据 すえ 设计者 しゃ Carl Sassenrath 所 ところ 说这是 ぜ 这个语言最 さい 显著的 てき 性 せい 质:“尽 つき 管 かん 它可以用于编程 ほど 、写 うつし 函数 かんすう 和 わ 进行处理,它最大 さいだい 的 てき 长处是 ぜ 轻易的 てき 建立 こんりゅう 领域特定 とくてい 语言或 ある 方言 ほうげん 的 てき 能力 のうりょく 。[ 9] ”
知名 ちめい 于JavaScript 开发上 じょう 贡献的 てき 道 みち 格 かく 拉 ひしげ 斯·克 かつ 羅 ら 克 かつ 福 ぶく 特 とく ,曾经描述Rebol为是对JSON 有 ゆう 影 かげ 响者之 の 一 いち :“更 さら 加 か 现代的 てき 语言,但 ただし 具有 ぐゆう 一些非常类似于Lisp的 てき 想 そう 法 ほう ,它全部 ぶ 建造 けんぞう 在 ざい 数 すう 据 すえ 表示 ひょうじ 之 の 上 うえ ,然 しか 后 きさき 再 さい 被 ひ 作 さく 为程序 じょ 执行。[ 5] ”
最初 さいしょ ,这个语言和 わ 它的官 かん 方 かた 实现,是 ぜ REBOL技 わざ 术公司 こうし 开发的 てき 专有 和 かず 封 ふう 闭源代 だい 码的软件。经过跟Lawrence Rosen 的 てき 讨论[ 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的 てき 语法 是 これ 自由形 じゆうがた 式 しき 的 てき ,不 ふ 要求 ようきゅう 特殊 とくしゅ 定位 ていい 。但 ただし 是 ぜ ,通常 つうじょう 使用 しよう 缩进 来 らい 更 さら 好 こう 将文 まさふみ 本 ほん 结构传达给人类读者 しゃ 。
不同 ふどう 方言 ほうげん 的 てき 语法属性 ぞくせい 可 か 以不同 ふどう 。对于所有 しょゆう Rebol方言 ほうげん 的 てき 公共 こうきょう 平台 ひらだい 是 ただし “数 かず 据 すえ 交换方言 ほうげん ”;其他方言 ほうげん 通常 つうじょう 从它派生 はせい 。除 じょ 了 りょう 是 ぜ 所有 しょゆう 方言 ほうげん 的 てき 公共 こうきょう 平台 ひらだい 之 の 外 そと ,“数 かず 据 すえ 交换方言 ほうげん ”直接 ちょくせつ 用 よう 来 らい 表示 ひょうじ 数 すう 据 すえ 和 わ 元 もと 数 すう 据 すえ 、迁移(populate)数 すう 据 すえ 结构,在 ざい 互联网上发送数 すう 据 すえ ,并把它们保存 ほぞん 在 ざい 数 すう 据 すえ 存 そん 储中。
对比于编程 ほど 语言比 ひ 如C ,“数 かず 据 すえ 交换方言 ほうげん ”不 ふ 构成自 じ 声明 せいめい 、语句 、表 おもて 达式或 ある 关键字 じ 。有效 ゆうこう 的 てき “数 かず 据 すえ 交换方言 ほうげん ”文 ぶん 本流 ほんりゅう 是 ぜ 树数据 すえ 结构 ,构成自 じ 块(根 ね 块是隐含的 てき ,子 し 块由方 かた 括 くく 号 ごう 界 さかい 定 じょう ),圆块(圆括号 ごう 界 さかい 定 じょう )、字 じ 符 ふ 串 くし (双 そう 引号或 ある 适用多 た 行 くだり 字 じ 符 ふ 串 くし 的 てき 花 はな 括 くく 号 ごう 来 き 界 かい 定 てい ;脱字 だつじ 符 ふ 表示法 ひょうじほう 用 よう 于不可 ふか 打 だ 印字 いんじ 符 ふ )、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
函数 かんすう 解 かい 释的“执行方言 ほうげん ”,是 ぜ 一 いち 个面 めん 向 こう 表 ひょう 达式的 てき “数 かず 据 すえ 交换方言 ほうげん ”的 てき 子 こ 语言。语言的 てき 主要 しゅよう 语义单元是 ぜ 表 おもて 达式 。对比于派生 はせい 自 じ ALGOL 的 てき 指令 しれい 式 しき 编程语言,“执行方言 ほうげん ”既 すんで 没 ぼつ 有 ゆう 关键字 じ 也没有 ゆう 语句。
单词被 ひ 用作 ようさく 大小 だいしょう 写 うつし 不敏 ふびん 感 かん 变量 。像 ぞう 在 ざい 所有 しょゆう 动态类型 语言中 ちゅう 那 な 样,变量没 ぼつ 有 ゆう 关联的 てき 类型,类型是 ぜ 关联于值的 てき 。在 ざい do
函数 かんすう 遇 ぐう 到 いた 一个单词的时候,返 かえし 回 かい 对这个单词的求 もとめ 值结果 はて 。set-word
单词可 か 以用于赋值 。尽 つき 管 かん 没 ぼつ 有 ゆう 语句,赋值和 わ 有 ゆう 副作用 ふくさよう 的 てき 函数 かんすう 在 ざい 一起 かずき ,可 か 以用于指令 しれい 式 しき 编程[ 4] 。
根 ね 块的子 こ 块自行用 ぎょうよう do
求 もとめ 值。块作为解释器实际参 さん 数 すう 这个性 せい 质被用 よう 来 らい 处理数 すう 据 すえ 块,通 つう 过把块作为实际参数 すう 提 ひさげ 交给控 ひかえ 制 せい 函数 かんすう 如if
、either
、loop
等 ひとし 用 よう 于结构化 か 编程 ,在 ざい 把 わ 块传递给特定 とくてい 解 かい 释器函数 かんすう 时用于方言 ほうげん [ 7] 。
值得注意 ちゅうい 的 てき 特殊 とくしゅ 问题是 ぜ 赋值给变量的 りょうてき 复合值是不 ふ 复制的 てき 。要 よう 制作 せいさく 一 いち 个复本 ほん ,这个值必须传递给copy
函数 かんすう [ 4] 。
do
函数 かんすう 通常 つうじょう 服 ふく 从前 ぜん 缀表示法 ひょうじほう 求 もとめ 值,这里函数 かんすう 处理跟随在 ざい 其后的 てき 实际参 さん 数 すう 。但 ただし 是 ぜ ,也存在 そんざい 使用 しよう 中 ちゅう 缀算 さん 符 ふ 的 てき 中 ちゅう 缀求值 。中 ちゅう 缀求职优先 さき 于前缀求值。例 れい 如:
abs -2 + 3
返 かえし 回 かい 1
,因 いん 为中缀加法 ほう 优先于计算 さん 绝对值。在 ざい 求 もとめ 值中缀表达式的 てき 时候,求 もとめ 值的次序 じじょ 是 ぜ 从左至 いたり 右 みぎ ,没 ぼつ 有 ゆう 算 ざん 符 ふ 优先 于其他 た 算 さん 符 ふ 。例 れい 如
返 かえし 回 かい 20
,对于乘法 じょうほう 优先于加法的 ほうてき 求 もとめ 值这将 はた 产生14。所有 しょゆう 算法 さんぽう 都 みやこ 有 ゆう 前 ぜん 缀版本 はんぽん 。Do
在 ざい 将 しょう 实际参 さん 数 すう 传递给函数 すう 之 の 前 ぜん 通常 つうじょう 对实际参数 すう 进行求 もとめ 值。所以 ゆえん ,下 しも 列 れつ 表 ひょう 达式:
print read http://en.wikipedia.org/wiki/Rebol
首 くび 先 さき 读取维基百科 ひゃっか 的 てき Rebol页面,接着 せっちゃく 把 わ 结果传递给print
函数 かんすう 。圆括号 ごう 可 か 以用来 らい 改 あらため 变求值的次序 じじょ 。使用 しよう 前 ぜん 缀表示法 ひょうじほう ,可 か 以避免 めん 使用 しよう 圆括号 ごう [ 4] 。
这种简单的 てき 优先级规则有如下优势:
不 ふ 需要 じゅよう 在 ざい 写 うつし 表示 ひょうじ 式 しき 的 てき 时候查看优先级表格 かく ,
不 ふ 需要 じゅよう 在 ざい 定 てい 义新算 さん 符 ふ 的 てき 时候重 じゅう 写 うつし 优先级表格 かく ,
表 おもて 达式可 か 以轻易 えき 的 てき 从中缀转写 成 なり 前 ぜん 缀表示法 ひょうじほう 或 ある 反 はん 之 これ 。
还有一 いち 个劣势:
习惯了 りょう 常 つね 规优先 さき 级规则的用 よう 户容易 ようい 出 で 错[ 7] 。
parse
函数 かんすう 适合用 よう 于规定 じょう 、验证、变换和解 わかい 释方言 ほうげん 。它通过在运行时间匹 ひき 配 はい “解析 かいせき 表 ひょう 达式”来 らい 完成 かんせい 工作 こうさく [ 7] 。
“解析 かいせき 表 ひょう 达式”是 ぜ 使用 しよう “解析 かいせき 方言 ほうげん ”来 らい 书写的 てき ,它类似 に 于“执行方言 ほうげん ”,是 ぜ “数 かず 据 すえ 交换方言 ほうげん ”的 てき 面 めん 向 むこう 表 ひょう 达式的 てき 子 こ 语言。不同 ふどう 于“执行方言 ほうげん ”,“解析 かいせき 方言 ほうげん ”使用 しよう 关键字 じ 来 らい 代表 だいひょう 算 ざん 符 ふ 和大 かずひろ 多数 たすう 重要 じゅうよう 的 てき 非 ひ 终结符 ふ ,中 ちゅう 缀分析 ぶんせき 算 ざん 符 ふ 没 ぼつ 有 ゆう 前 ぜん 缀等价者并使用 しよう 优先级规则(序列 じょれつ 优先于选择)[ 7] 。
动作也可以被包含 ほうがん 而在解析 かいせき 处理期 き 间进行 ぎょう ,并且parse
函数 かんすう 可 か 以被用 よう 来 らい 处理块或字 じ 符 ふ 串 くし 。在 ざい “字 じ 符 ふ 串 くし 解析 かいせき ”层级,parse
必须处理“低 てい 层”解析 かいせき ,需要 じゅよう 考 こう 虑到字 じ 符 ふ 和 わ 界 さかい 定 てい 符 ふ 。“块解析 かいせき ”是 ぜ 更 さら 高 だか 层级,处理在 ざい Rebol值的级别上 じょう 的 てき 扫描[ 7] 。
解析 かいせき 方言 ほうげん 属 ぞく 于由自 じ 顶向下 か 解析 かいせき 语言或 ある 解析 かいせき 表 ひょう 达文法 ほう (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).