什么是REBOL?

翻译:ShiningRay @ NirvanaStudio

简而言之,REBOL是提供了分布式计算和通信的一种轻量级软件技术。

REBOL技术包含两个部分:

REBOL语言

REBOL语言结合了编程语言和元数据语言(如XML)的概念。

这种结果是产生了一种新的语言,它提供了对现代网络分布应用的更有效解决方案。相比传统的语言,REBOL在更少的代码上提供了更强大的表达能力。REBOL应用程序和解决方案的一般典型的代码大小都在10KB的数量级上,而不是10MB。

REBOL发音为“reb-ol”(类似“rebel with a cause”中的),代表“基于相关表达式的对象语言”(relative expression based object language)。他第一次发布是在1997年到目前为止已经下载超过四百万次。他对客户端和服务器端应用程序都是十分合适的,就像下面所描述的。


你可以在《REBOL到底哪里不同》一文了解更多内容或者想迅速浏览一下REBOL语言的介绍,请看《REBOL 语言简介》。

X-Internet平台

X Internet是指可执行互联网(executable Internet),它是Internet发展的下一个阶段。

X Internet概念是本地计算机(客户端)成为像网络服务器一样强大,这样更多的计算责任可以被转换到客户端完成。这种方式由三个好处:

  1. 他改善了用户体验的质量。
    他让Internet应用程序运行的像本地应用程序一样快。Web设计造成的延迟不复存在。

  2. 他提高了服务器的性能。

    由于客户端作了更多的工作。这就让你在同一台服务器上可以进行的连接次数大大增加。现在典型的是大约10到50倍于原来的连接数量。这就好像以一台的代价可以做10-50台或更多服务器的事。

  3. 他使得网络通讯更加有效。

    应用程序不需要每次连接都传送用户界面信息(如:网页)。取代的是指需要发送用户产生的动作相关的数据和代码。这让X Internet程序仅仅占用目前典型Web应用程序所用带宽的1/10到1/50。

是不是说X Internet反对“瘦客户端”计算模型?当然不是,如果你使用REBOL。因为REBOL的先进的语言设计,X Internet应用程序将和大多数基于web的解决方案比,显得特别得小。这就是我们所谓的轻量级。当应用程序构建得较为完善,他们将花费更少的时间和金钱来进行开发,并且很容易维护和升级。

如果要了解X Internet和REBOL解决方案,请参见我们的IOS概览页面

REBOL 语言简介

翻译:ShiningRay @ NirvanaStudio

本文是一篇针对新用户的技术文档。他给出了一个REBOL的简明概述和一个例子。

Quick Facts

  • REBOL 代表基于相关表达式的对象语言(Relative Expression Based Object Language).
  • REBOL 发音为"reb-ol" ,和“rebel with a cause”中的一样。
  • REBOL 是一种消息式的语言。他的主要目的是提供一种轻量级的分步计算和通讯的方法。
  • REBOL Carl Sassenrath设计, 是Amiga OS——世界上第一个个人电脑的多任务操作系统——的系统架构师。
  • REBOL 不仅仅只是一个编程语言。他还是一种用于表示数据和元数据的语言。他给计算、存储和信息交换提供了同一种方法。
  • REBOL 有十分丰富的软件包。初学者可以从REBOL/Core和REBOL/View开始。专业人士会发现REBOL/Command和REBOL/SDK十分有用。公司和组织会发现REBOL/IOS是一个强大的协作交流平台。
  • REBOL 代码和数据跨越了40多种平台。在Windows上写的脚本和在Linux, UNIX和其他平台上运行得都一样,根本无须任何改动。
  • REBOL 引入了方言化的概念。方言是一个小巧有效专门针对特殊领域的子语言。
  • REBOL 本意就是要保持小巧——即使他已经包含了数百条函数,几十种数据类型,内置帮助,多种Internet协议、压缩、错误处理、调试控制台、加密和更多。
  • REBOL 程序很容易书写。你所需要的仅仅是一个文本编辑器。一个程序可以只有一行也可以是一整个应用程序包含了几十个文件。。同时,你的程序不需要对库和包含做声明。

上手例子

在REBOL中,简单的任务有简单的做法。这里有一些例子:

如果你想尝试这些例子,只要下载REBOL。他确实很小,下载得很快。它不需要任何复杂的安装也不需要任何特殊的类库。他很简单。要运行REBOL,只要点击他的图标。(如果你在使用REBOL/View,在他启动之后点击console图标来打开控制台窗口。)

先尝试一下经典的Hello World例子:

或者,把它作为一个邮件消息发送给一个朋友:

要直接从一个网站运行一个脚本

这个叫本会显示你的计算机有多快。

如果要查看脚本的源代码:

如果要保存源代码到一个文件:

要在本地运行代码,你可以输入:

当然,你可以用同样的方法保存任何网页:

要给一个朋友通过邮件发送一个网页:

要下载一封REBOL的拷贝,你要指明它是二进制的。像这样:

同时,你可以看见REBOL并不关心你代码中的换行。

如果你要把一个目录中的所有文件作为邮件发送(假设他们都是文本文件):

但是,也许你只想发送包含单词REBOL的文件:

如果你想把那些文件连成一个单独的消息并发送出去:

进阶例子

如果要查看你所有的email消息但是不把他们从服务器上删除,这样:

当然,你也许想一次性都读出他们:

要删掉所有包含单词“spam”的邮件:

当你准备发送一个信息到你的经纪人,信息可以被她的基于REBOL的股票交易程序自动处理:

以上的例子用到了REBOL的dialecting(方言化)概念——一种在网络上收发消息的极其有用的技术。

如果你的老板要求你每小时自动发送几个网页作为邮件:

如果你需要摘录并打印网页的标题,你可以这样解析:

生成脚本文件

你可以把上述任何例子输入文本编辑器(如Windows上的Notepad)然后保存为一个文件。你可以把这个文件拖至REBOL图标的上方来启动它。

你需要添加一个简短的REBOL头到你的文件的顶端:

这个标头表示这个文件是一个REBOL的代码同时可以提供一些有用的文档说明和其他的选项。

你的程序应该看起来像这样:

如果你正在使用REBOL/View,你也许想在你的脚本的底部添加一行这样你可以看到结果(在窗口关闭之前)。只要在结尾添加一个halt,这样控制台窗口就会开着:

内嵌帮助

如果要在REBOL中获得帮助,输入:

你可以查询某个特殊字的信息:

或者,查找符合一个字符串模式的帮助:

或者,察看REBOL所有的数据类型:

然后你可以查看REBOL中所有的高级函数用:

当然,还有本地代码、动作和其他类型的函数。

如果你想看高级函数的代码:

通过查看内嵌函数的代码,你可以了解很多有用的REBOL的编程方法。

仅仅是一个开始

我们希望以上的例子能给你一个好的REBOL的概念。我们在保持REBOL简洁上作了相当多的工作。当然,REBOL远不止这些东西。在,REBOL是一个高级编程语言,它在很多地方都很独特。常常有人说REBOL就像一片湖水,你看到了表面,同时你可以在湖面上尽情欢乐,但这不是湖水的全部。仍然有很多东西需要去深入了解。当然,作为初学者你不需要去了解那些东西。当你学到更多的东西,我们希望你能发现REBOL到底能做多少事情。请看一下我们的文档索引如果你想“游”得更深一些。

REBOL十步

翻译:ShiningRay @ NirvanaStudio

这是REBOL的一个简短概要。他在十步之内展示了REBOL的基本概念,仅仅需要阅读几分钟而已。更多的详细信息可以在 REBOL/Core Manual中找到。

1. 值(Value)

是REBOL的未处理的数据。不同的值可以在REBOL中直接书写。你已经对他们很熟悉了。这里有一些例子:

数字:
1234
-432 3.1415 1.23E12
0,01 1,2E12

时间:

12:34 20:05:32 0:25.34

日期:

20-Apr-1998 20/Apr/1998 (US)
20-4-1998 1998-4-20 (国际通用)

1980-4-20/12:32 (有时间的日期)
1998-3-20/8:32-8:00
(带着一个时区)

货币:

.34 USD.34 CAD3.45 DEM34,56

元组:

3.1.5 (版本号)
255.255.0 (颜色值)
199.4.80.7
(IP地址)

字符串:

"Here is a string"
{Here is another way to write
a string that
spans many lines
and contains "quoted"
strings.}

标签:

<title> </body>
<font size="2"
color="blue">

Email:

info@rebol.com

pres-bill@oval.whitehouse.gov

URLs:

http://www.rebol.com (网页)
ftp://ftp.rebol.com/sendmail.r (文件传输协议)

mailto:info@rebol.com (email)

文件:

%data.txt
%images/photo.jpg

%../scripts/*.r

号码:
#707-467-8000
(电话号码)
#0000-1234-5678-9999 (信用卡)
#MFG-932-741-A
(模型数字)

二进制:

#{0A6B14728C4DBEF5} (十六进制编码)
64#{45kLKJOIU8439LKJklj}
(base-64
编码)

只要可能,REBOL允许国际通用格式的使用,像十进制数、货币和日期。更多关于值得信息可以在 REBOL/Core Manual 中找到。

2. 词(Word)

词Words
是REBOL的符号。他们用来直接表示某个东西为一个词,或者间接表示为一个变量(稍后会解释)。你写词就和写英文一样的(或者和其他一些自然语言一样)。

破折号和一些其他的特殊字符也可以使用。他们会被认为是词的一部分。

单词的末尾被标记为一个空格,或者以下某个字符:

同样,这些字符不能出现在单词中:

更多关于单词的内容可以在 REBOL/Core Manual.中找到

3. 块(Block)

值和词都是在块中组合。一个块由一个'[‘开始,以’]’结束。你可以以任何顺序组织值和词,用任意多行代码。REBOL允许在块中以一种自由体来创建数据库、目录、表格、集合、序列、代码、函数,等等。

块通常用来组织代码和数据:

关于块的更多信息可以查阅 REBOL/Core Manual.

 

4. 计算(Evaluation)

块可以被计算得到他们的值。块中的值和词都按照从左到右的顺序计算。下面的例子展示了他如何工作的,假设你是输到之REBOL的命令行。Blocks
can be evaluated to compute their results. The values and words of
the block are computed from left to right. The examples below show how this
works as if you typed into REBOL at the prompt. (Lines typed at the prompt
create a block, even though the brackets [ ] are not shown):.

当计算块时,它的结果以一个值返回:

括号可以用来决定计算顺序:

更多关于计算的内容可以看 REBOL/Core Manual.

 

5. 变量(Variable)

词可以用作变量。一个词后面更上冒号就可以设置它的值:

出现一个没有使用冒号的词,他就会被计算:

一个变量可以用来保存任何类型的值。在上面的例子中,词print,if,> third
都是存了函数的变量。他们刚好已经被REBOL预定义了,但他们在其他方面和其他词没什么区别。

变量只有在定义他们的上下文中才有意义。一个上下文可以跨越整个程序或者被严格限定在某个特定的块、对象、函数中。在下面的例子中,use函数声明一个词age。Age是一个局部变量,在这个块外面,他可能就含有别的值,但是这不会影响age在块中的值。

局部变量同时是由函数创建的,下一节就会叙述他。

更多关于变量的内容可以查阅 REBOL/Core Manual.

6. 函数(Function)

一个函数就是一个块,这种块可以有局部变量,当每次计算这个块的时候,局部变量都会被给与新的值。局部变量是函数的参数。函数可以用多种方法来创建。这里是最常见的:

他会新建一个函数并设置为一个词sum。第一个块描述了函数的参数,第二个块便是当调用函数的时候所计算的块(这里,他把两个值相加并返回结果)。如果要使用这个函数:

当调用sum函数时,a的值设为2同时b的值为3。他们被相加,结果被返回,同时结果被作为参数传给了print函数。

对于某些函数,你也许需要局部变量但不要把他们作为参数。你可以使用function代替以上情况中出现的func

这个series是参数,total是一个局部变量用来进行计算的。注意在两个地方用到了return,将结果作为函数结果返回。如果没有要返回的结果,可以使用exit

当然,还有更多关于函数的东西可讲,请参看 REBOL/Core Manual.

7. 路径(Path)

路径指明了一个精化。他提供了一种简便的方法来指出需要更多的信息。你可能已经对他们作为文件和URL中的一部分很熟悉了。斜杠(/)是用来分隔路径中的词的。

在REBOL中,路经也可以对块、函数、对象和字符串使用:

下面的例子演示了使用块作为小数据库并通过路径访问的简便之处:

更多关于路径的信息可以查阅 REBOL/Core Manual.

8. 对象(Object)

一个对象是一组在特定上下文中含有值的变量。对象可以用来管理有更复杂行为的数据结构。例如,一个银行帐户可以从使用对象指定属性和方法中受益:

name, balancess-number, deposit,以及withdraw 都是account 对象的局部变量。deposit和withdraw变量是在对象中定义的局部函数。account的变量可以通过路径来访问:

要生成其他的account,并设置一个新的balance但是其他的值保持不变:

你也可以通过添加一个银行名称和最后活动日期扩展已有的account对象来新建一个account:

对象还有一些别的特性,包括隐藏变量。想要发现更多内容,请看 REBOL/Core
Manual
.

9. Messages消息

一个REBOL消息,简单的说,是一个从一个地方发送到另一个地方的文本文件。不管消息时在计算机之间、进程之间、还是人之间发送的——消息的形式都是一样的。他们由REBOL头开始,标示了内容、日期和其他属性:

头可以包含其他信息,由消息的目的和重要性决定。头接下来跟着的是消息的内容本身。就像上一节所显示的,他可以包含数据、代码或者两者的混合。

消息和在已有的互联网协议如http, mail
(SMTP & POP), new 和
ftp上传送。消息也可以被嵌在别的内容形式中,例如网页或者文档文件。在下面的例子,REBOL从一个网站读取一个消息并且计算它:

这个例子通过EMAIL发送一个简短的REBOL消息:

这个例子会检查每一个发送到你邮箱的消息是否从其他的REBOL程序中发出的:

import 函数把EMAIL消息转换成REBOL对象以便访问。如果email包含一个x-rebol行,那么它就是从REBOL发出的。

 

10. 方言(Dialect)

方言是携带了以不同的值和词的语法(顺序)的使用方式产生的精炼了的含义。方言一般是唯一的并且针对他们所设计解决的问题是十分合适的。

其实你已经看到了一写简单的方言。例如,一个函数的参数列表就是一种方言,除了那些已经在这里显示了的还包含很多种变体。其他的方言也可以用来分析表达式和格式化输出。

这里有一些其他方言的例子,可以用来解决特殊的问题。第一个是影像工作室控制脚本::

一个图形用户界面:

足球赛程:

安装脚本:

这有无穷无尽的可能性。更多关于方言的介绍将会在REBOL继续开发之前几个月提供给大家。

REBOL到底哪里不同?

翻译:ShiningRay @ NirvanaStudio

REBOL并非一个传统的计算机语言像C、BASIC或者Java。相反,REBOL是设计为解决在计算中的一个根本问题:在分布的计算机系统之间的信息的交换和解释

REBOL并不是通过综合一种编程语言和一种元数据语言的概念来解决这个问题的。就好像你也可以直接在C/C++中表达和处理元数据或者在XML中书写代码算法一样。解决这个问题是通过相关表达式relative expression)的概念(这也是REBOL名称的由来——Relative
Expression Based Object Language)。按照技术术语来说,REBOL是一种元循环语言meta-circular language)。也就是,REBOL扮演了自身的元语言。

相关表达式,也叫做“方言”,给代码和数据的表示提供了极高的效率,同时,他们也是REBOL最强大的力量。比如,REBOL可以不仅仅可以只用一行代码就建立一个图形用户界面,还能把这一行作为数据发送出去在世界上的另一台网络计算机系统上进行处理和显示。

REBOL的一致的架构提供了广泛而且强大的能力,从他小巧的解释器(称为REBOL/Core)到一整套互联网操作系统(Internet Operating System ,称之为REBOL/IOS)。

rebol_layers.gif

REBOL的最终的目标是要为一切连接在互联网上的设备之间信息的存储、交换和处理提供一种新的架构。不像其它的方法需要几十兆代码,一层又一层的复杂结构,又只能在单一平台上运行,需要特定的编程工具,REBOL很小巧、很轻便、可移植并且易于管理。

REBOL应用程序(称为“reblets”)的大小很重要。不仅仅因为可以让他们只要几秒钟就下载完(即使使用调制解调器或者是无线网络)还因为reblets很小,他们就很容易创建、修改和增强。大多数REBOL应用程序,即使是很重要的能做很多事情的应用程序像建立网站、处理信用卡或者共享一个日历等等,都仅仅只有10-30KB。

例如,我们用来展示REBOL的图形化幻灯片展示程序只有9KB,他的效果像这样:

REBOL的图形化幻灯片

这里还有另外一个例子。这个用户状态和活动监视器只有7KB:

用户状态和活动监视器

还想看更多的例子么?这里有几个不同的例子,用REBOL/View写的,这里还有一些“reblets”为IOS写的。几乎所有这些加起来都不超过30KB,但他们效率仍然很高,而且是分布式应用程序。

REBOL脚本快速入门

By Carl Sassenrath REBOL Technologies

翻译:ShiningRay @ NirvanaStudio


目录

  1. 介绍
  2. 数据类型的世界
  3. 集成网络操作
  4. 创建脚本文件

1. 介绍

REBOL是针对互联网通讯设计的。REBOL是一种高级解释语言允许你访问和控制互联网的资源,而且他的便捷让你可以开始考虑把互联网当成你的个人操作系统。你已经熟悉了如何使用浏览器在网上冲浪。有了REBOL,你可以编写互联网。

在REBOL总部我们用REBOL建立手册和文档(比如当前这个),生成全部我们的网站、自动上传页面和图像到网络上、发送邮件通知、处理信用卡、远程共享文件、跟踪客户订单、进行即使通讯、主持电子会议、自动更新软件、运行技术支持、管理我们的错误数据库、删除垃圾邮件、备份服务器、遍历网络、过滤网页广告、还有——最重要的——在42种不同的系统上构建REBOL。

每天我们在几十台机器上用数百个REBOL脚本给我们带来了极大的便利。我们只要一种语言就能完成所有的事情。就像一个神奇的魔术师,REBOL使我们这个小小的小组事倍功半。

这篇指南提供了使用REBOL的简要的介绍。如果你正在慢慢得阅读那份720页的REBOL手册,我们也很理解,谁会有时间把它全部看下来呢?抱着这种想法,这篇文档的目标是在20分钟之内给你一个REBOL的大体概念并且给出一些可以找到更多资料的链接。


2. 数据类型的世界

语言是建立在一系列基本的数据类型的基础上的,他们被用来构建一切的其他东西。整数和字符串都是数据类型的例子。大多数语言有大约5种或者6种数据类型。相反,REBOL有45种数据类型。这种结果是很多任务下你可以关注于你的程序要做什么,而不是如何去做。

例如,所有的语言都可以让你对数字相加:

然而,在REBOL中,你可以一样很容易的加减时间、日期、货币、元组和坐标。这里有一些例子,还有他们的结果:

注意你不需要包含(include)任何文件,使用引入(import)语句,或者进行函数声明。他们是语言中的基础部分。

同时注意你使用同一种记号来相加各种类型。大多数函数都可工作于多种数据类型上。他们是多态的;他们可以和多种数据类型一起工作。结果是什么?你将变得更高效,却无需让你的程序变得更复杂。简单的东西就应该让他简单。

这里是另一个例子,它搜索第一个字符串中出现的第二个字符串:

同样的搜索操作也可以操作其他数据类型,比如电子邮件地址,URL,文件,标签,序列号,二进制和块:

对REBOL的其他35种数据类型感到好奇了?在控制台下面输入这一行来把他们都列出来:

过着看一下REBOL指南的值附录


3. 集成网络操作

作为“互联网操作系统”的脚本语言,你需要能访问互联网的协议就像操作文件一样简单。REBOL已经内置了14种标准协议,也不需要包含文件或者函数声明。你只要使用他们。

例如,要从你的硬盘上读取并显示一个文本文件,你可以写:(注意百分号在REBOL中表示他是一个文件名。这必须出现来防止REBOL把他认作是一个REBOL单词。)

你可以一样简单的使用各种不同的协议从网路上读取文本。下面几行例子展示了他做了什么:

如果你自己要实验这些代码,只要在这些read的前面加上一个print并且给出一个有效的URL信息。注意如果你使用了一个防火墙,你需要设置你的REBOL代理设置来看到结果。当然,这些例子仅仅是一个开始。还有很多其他特性可以使用。例如,要从一个网站读取一个图像并且把他存到磁盘上的一个文件中:

write函数使用了一个/binary精化来指明这是一个二进制文件,不是一个文本文件。

什么是“精化”(Refinement)?
一个“精化”(refinement)指定了一个函数的变体。精化以一个斜杠(/)开始同时一个函数可以包含多个精化。要了解一个函数有哪些可用的精化,在命令行下输入help并在后面加上函数名称。例如:

将会给出write函数的描述和他的参数以及精化。

如果你想将一个文本文件作为邮件内容发送出去,你可以写:

而且甚至,你可以一样简单的发送一个网页:

当然,如果你要做的只是发送一个文本消息,你可以写:

要写一行可以读取一个图像文件并且上传到一个Internet服务器的代码,你可以这样写:

注意你必须给出用户名和密码作为URL的一部分。

你是不是想上传一整个目录的文件?这个脚本可以完成这个工作:

注意这里用到了site单词的另一个精化。当一个精化是用在URL上的,他会把这个URL和他提供的文件名组合在一起。file前面的冒号是在说“获取文件名”。添加一个print到循环中来看看结果:

也许你只想要上传目录中的JPEG文件。用find检查文件名就像前面一节演示的那样:

如果要上传所有的GIF和JPEG文件,你可以写成:

现在,让我们设想你只想上传那些在两天内修改过的文件:

变量date被设置为当前的日期和时间减去两天。再用他和文件和文件的日期——通过modified?函数来获取——相比较。

你可以很简单地写出只传输小于一定大小的文件将比较的一行代码换成:

或者,你可以避开子目录:

这些函数也可以和URL一起工作。你可以检查远程文件的大小:

你也可以检查文件的修改日期and you can check the file modification date with:

这一层次上的互联网集成让你可以在你的程序中十分简单的操作网络资源。例如,在REBOL/View中如果你想建立一个窗口并使用一个来自互联网上的图像文件,你可以写成:

这个的结果是产生了一个窗口显示图像像这样:

intro1.png

如果你想改变窗口的颜色并且把图像放到一个按钮中,点击之后浏览一个网站,这里是扩展的例子:

他会看起来像:

intro2.png

类似的,你可以把前面的网络函数添加到这个脚本中。例如,这个按钮可以进行FTP上传或者下载、接收邮件、发送邮件,监测新闻组,获取一个用户的信息,和任何其他的事情。

最后,要展示REBOL和互联网的完整的集成,你可以直接从网络上运行其它的REBOL程序。他们可以从以上任何一种返回一个有效的脚本的协议中运行。例如,这里是一个他如何从一个网站上运行一个脚本:

do函数下载脚本并运行它。要从FTP运行它,你可以写成:

你现在可以对REBOL如何“编写互联网”有一个更好的概念。作为最后一个例子,我们结合了图像按钮和do例子:

当你点击图像的时候,他会启动RIM,REBOL即时通讯软件。你对RIM好奇吗?试试这个:

这个即时通讯软件怎么这么小呢?看看代码:

你就知道了。

要了解网络编程的更多内容,请阅读REBOL指南的网络编程一章。


4. 创建脚本文件

REBOL文件可以用作代码、数据或者是两者的结合。这些文件可以用任何文本编辑器建立,或者他们可以作为其他程序的运行结果创建。例如,我们公司使用REBOL文件来储存很多我们每日使用的数据库。

每个REBOL文件以一个标识他的内容、作者、版本、历史和各种其他可选的字段的头部。这个信息十分有用,我们也鼓励你在你的每个脚本中给出他。他将帮助大家了解:

  • 这个脚本做什么
  • 谁写的
  • 他现在什么版本
  • 他最后什么时候修改的
  • 谁拥有它
  • 他应该使用什么文件名

这个脚本头总是用REBOL自身来描述。他们是REBOL可以读取的元数据。这允许基于REBOL的搜索引擎和存档服务更方便得建立有用的文件索引。另外,智能的文本编辑器和代码版本软件可以自动跟踪版本。

这里有一个最小化头的范例,你可以用于上面演示的任何脚本中:

注意日期和版本并没有加引号。他们是按照REBOL的数据类型来写的。前者是date类型,后者是一个元组tuple(注意它必须要有三个部分)。

从前一节中拿出最后一个例子,这里是完整的例子脚本文件:

要了解跟多REBOL脚本和头信息的资料,请参考REBOL指南的脚本一章。