2008年3月14日

REBOL英中對照表

英文術語 -> 英譯中 -> 逐字元再中譯英(這是對中文感興趣的美國讀者要求的,華人讀者可以不用理會這部分)

action: 動作 [movement] [doing]
argument: 引數 [refer] [number]
-based: 基底 [base] [base]
binary: 二元 [two] [primary]
bind(ing): 繫結 [bind] [bind]
bitset: 位元集 2x[bit] [set]
block: 區塊 [division] [block]
callback: 回呼
char: 字元 [character] [primary]
closure:
component: 元件 [primary] [thing]
compile(r): 編譯(器)
concurrent: 共時
context: 脈絡
datatype: 資料型別 2x[data] 2x[type]
date: 日期 [day] [a period of time]
decimal: 小數 [little] [number]
dialect: 方言 [local] [language]
email: 電郵, 電子郵件 [electronic] [mail]
-er: 者 員(人), 器 子(程式)
error: 錯誤 [wrong] [mistake]
evaluate: 估算 [estimate] [compute]
event: 事件 [affair] [thing]
export: 匯出 [flow] [out]
file: 檔案 [file] [case]
frame: 框 [frame]
function: 函數 [letter] [number]
get-path: 取徑 [get] [path]
get-word: 取字 [get] [word]
gob: 圖形物件 2x[graphics] 2x[object]
handle: 代碼 [surrogate] [code]
image: 影像 [image] [image]
import: 匯入 [flow] [in]
integer: 整數 [whole] [number]
interface: 介面, 界面
interpret(er): 解譯器
issue: 期號 [issue] [code]
library: 程式庫 2x[program] [base]
list: 清單
lit-path: 原徑 [original] [path]
lit-word: 原字 [original] [word]
logic: 邏輯 [this is transliteration]
map: 對應, 對應表 [pair] [answer]
mezzanine: 中層 [middle] [layer]
module: 模組 [mold] [combination]
money: 錢 [money]
native: 原生, 原生函數 [original] [living]
none: 空, 無 [void]
object: 物件 [thing] [thing]
op: 運算子 2x[operate] [-er]
-or: 者 員(人), 器 子(程式)
-oriented: 導向 [direct] [direction]
pair: 對, 值對 [pair]
parameter: 參數 [refer] [number]
paren:
parse: 剖析 [dissect] [analyze]
path: 路徑 [path] [path]
percent: 百分比 [100] [division] [ratio]
profile: 特徵分析(v), 特徵描述(n)
program: 程式(n), 編程(v)
probe: 探測
prototype: 原型
plug-in: 插件 [plug] [thing]
port: 埠, 港埠 [port]
rebcode: 彙編碼 2x[assembly] [code]
refinement: 修飾 [decorate] [decorate]
routine: 常式 [common] [formula]
set-path: 設徑 [set] [path]
set-word: 設字 [set] [word]
scalable: 規模可變
script: 劇本(n), 編劇(v)
stack: 堆疊 [stack] [stack]
string: 字串 [character] [string]
struct: 結構 [knit] [compose]
tag: 標籤 [mark] [label]
task: 任務 [appointment] [business]
thread: 線程
time: 時間 [time] [period of time]
trace: 蹤跡(n) 追蹤(v)
transaction: 交易
tuple: 值組 [value] [combination]
typeset: 型別集 2x[type] [set]
Unicode: 統一碼 2x[unified] [code]
unset:
url:
utype: 自訂型別 [oneself] [define] 2x[type]
vector: 向量 [direction] [quantity]
VID: 視覺介面方言 2x[visual] 2x[interface] 2x[dialect]
word: 單字 [single] [word]

2008年3月13日

把REBOL當Shell用

所謂的Shell,就是圍繞在OS核心外圍的使用者介面,你可以參考「當劇本遇上殼」這篇文章對Shell的說明。

本文章介紹一些常用的函數與用法,讓你可以將REBOL當作Shell,用來對OS做一些基本的檔案操作。

【目前的目錄】

如果你想知道目前的工作目錄為何,你可以利用what-dir函數,如下:

>> what-dir
== %/c/Documents%20and%20Settings/Jerry%20Tsai/桌面/

「==」表示前面的函數有傳出值,其值為「%/c/Documents%20and%20Settings/Jerry%20Tsai/桌面/」。

你也可以用pwd取代what-dir,效果完全一樣:

>> pwd
== %/c/Documents%20and%20Settings/Jerry%20Tsai/桌面/

REBOL的檔案表示方式,依照下面的規則:

  1. 開頭使用「%」
  2. 目錄的分隔符號使用「/」
  3. 中間如果有特殊字元,則使用「%」後面接著兩個十六進位數字,代表該特殊字元的編碼。以這裡的例子來說,空白的值,在ASCII編碼是十六進位的20。所以寫成%20
  4. 如果是目錄,則最後是「/」
  5. 如果是絕對路徑,則開頭的「%」後面會接著一個「/」。如果是相對路徑,則開頭的「%」後面不會出現一個「/」。

【檔案的轉換】

如果你對於上面描述的檔案規則覺得不習慣,可以利用to-local-file,將what-dir傳出的檔案轉成作業系統慣用的格式,作法如下:

>> to-local-file what-dir
== "C:\Documents 20and 20Settings\Jerry Tsai\桌面\"

因為to-local-file的傳出值是字串不是檔案,所以前後加上雙引號「"」。有一個函數和to-local-file做的事剛好事相反的,可以把作業系統檔案字串,轉成REBOL檔案,此函數名為to-rebol-file,範例如下:

>> to-rebol-file "C:\Program Files\"
== %/C/Program%20Files/

【改變目錄】

你可以使用change-dir(或cd)函數,改變目前的目錄,例如:

>> cd %/c/
>> pwd
== %/c/

你也可以利用相對路徑的表示方式(也就是開頭的「%」後面不寫「/」),例如:

>> pwd
== %/c/
>> cd %Program%20Files
>> pwd
== %/C/Program%20Files/

有兩個特殊的相對路徑表示方式:「%.」表示目前的目錄,「%..」表示往上一個目錄。依此類推,「%../../表示往上兩層目錄」。下面是一個範例:

>> pwd
== %/C/Program%20Files/
>> cd %..
>> pwd
== %/c/

【製造目錄】

你可以使用make-dir(或mkdir)函數,製作新的目錄,例如:

>> mkdir %abc/

這表示在目前的目錄下,建立一個abc目錄。再看一個例子:

>> mkdir/deep %/c/rebol/my-script/

這裡的mkdir後面緊接著出現「/deep」,意思是:在建立此目錄的過程中,如果有其他的目錄尚未建立,就一併建立。所以如果%/c/rebol/尚未存在,就會先建立%/c/rebol/,然後再建立%/c/rebol/my-script/。

像這種函數後面加上的修飾,我們稱為refinement。

【列出檔案】

你可以使用list-dir(或ls)函數,將某目錄下的檔案列出來,例如:

>> ls %/c/

如果後面沒有寫目錄,預定就是目前的目錄(%.),例如:

>> ls

list-dir(與ls)可以使用下面的refinement:
/l:表示每個檔案用一行顯示
/f:只列出檔案,不列出目錄
/d:只列出目錄,不列出檔案
/r:列出此目錄以及底下所有子孫目錄內的檔案

例如:

>> ls/l/r

當同時使用兩個以上的refinement時,順序無所謂,所以「ls/l/r」和「ls/r/l」是完全一樣的效果。

【取得檔案資訊】

你可以利用「modified?」取得檔案最後修改時間,用「size?」取得檔案大小,用「dir?」得知否為目錄(而非檔案)。例如:

>> modified? %/c/rebol/core.exe
== 5-Mar-2008/6:31
>> size? %/c/rebol/core.exe
== 219136
>> dir? %core.exe
== false

2008年3月10日

各種函數的區別



REBOL的函數(function)有7種,分別是:
  1. Function!
  2. Closure!
  3. Rebcode!
  4. Native!
  5. Action!
  6. Op!
  7. Routine!

屬於Function!、Closure!、Rebcode!型別的函數,都可以利用source函數來觀看其源碼(source code)。例如,在REBOL console中輸入「source what」,就可以看what的源碼:

屬於Native!、Action!、Op!型別的函數,都「無法」利用source函數來觀看其源碼,因為它們的程式是用C語言寫的,經過編譯。至於Routine!,是用來連接到外部動態連結程式庫的函數,REBOL 3.0尚未決定是否要支援Routine!。

Native!、Action!、Op!都是REBOL系統內部內建的函數,我們無法在REBOL程式中自行定義這些函數。Routine!只是用來和外部的程式做連結,我們也無法在REBOL程式中定義它的邏輯。我們在REBOL程式中,能夠自行定義的函數,只有Function!、Closure!、Rebcode!。

一般來說,我們寫REBOL程式時,定義的函數是Function!。如果希望執行過後,函數內的context能夠保留,就不要使用Function!,改用Closure!,缺點是效率會比較差。如果希望函數的執行速度提高,就不要使用Function!,改用Rebcode!,但是Rebcode!不是使用REBOL語言,而是使用Rebcode方言,相當於REBOL虛擬機器的組合語言。使用Rebcode!的缺點是,程式比較不容易讀寫(因為Rebcode方言比REBOL語言更低階的緣故)。

Native!和Action!的差別只會影響REBOL內部,和我們沒有關係,所以可以不用理會它們的差異。Op!比較特別的地方在於,它是中序的(infix),而其他六種函數都是前序的(prefix)。

閱讀REBOL文件或書籍時,請注意。當提到「函數」時,有可能泛指所有的七種函數,也有可能單指function!,必須利用前後文來判斷為何者。如果提到mezz,則一定指function!。如果提到「原生函數」,有可能泛指native!、action!、op!,也有可能單指native!。

使用Windows Console


REBOL預計會有兩個Console,一個是文字模式的DevStdIO,一個是圖形模式的DevConsole。目前已完成的只有DevStdIO。在Windows作業系統上,DevStdIO也就是Windows console。因此,你需要知道Windows Console的基本用法,整理如下:
  • 左右方向鍵:在目前的命令列左右移動編輯游標。
  • Ctrl+左右方向鍵:按住Ctrl鍵不放開,再按下向左方向鍵,或向右方向鍵,在目前的命令列左右移動編輯游標,一次移動一個word,而不是一個字元。
  • Home:將編輯游標移動到目前命令列的開頭。
  • End:將編輯游標移動到目前命令列的尾端。
  • 上下方向鍵:調出歷史命令(之前輸入過的命令)。
  • 插入(Ins)鍵:在字元插入與字元覆蓋(overwrite)模式之間切換。
  • 刪除(Del)鍵:刪除游標後的字元。
  • 倒退(Backspace)鍵:刪除游標前的字元。
  • F7:在文字視窗內,躍出一個「命令歷史清單視窗」(如上圖所示),然後使用上下鍵選取命令,最後按下Enter執行命令。除了F7,我發現F2、F3、F4、F9也有特殊功能。
  • Ctrl+空白鍵:中文輸入切換。
  • 用滑鼠拖檔案進來:可以輸入該檔案的全名。

可惜的是目前還不能使用tab,進行補完(completion)。

想要離開此console,使用q或quit函數即可,如下所示:

>> quit

2008年3月9日

DevCon 2008在布拉格的夏天

聽說今年9月要在布拉格(Prague)開研討會,我只希望機票不要太貴...。

REBOL DevCon研討會第一次是2005年在美國,第二次是2007年在法國,第三次就是今年。地點的選擇顯然是考慮到使用者的多寡。目前REBOL開發者最多的國家,似乎依序就是美國、法國、捷克(首都布拉格)。

今年的研討會重點應該就是REBOL 3.0。我想選擇9月的意義,或許代表9月時3.0可以正式推出。這雖然是臆測,但可能性很高。