[REBOL][Prototype]

 REBOL []

 person: make object! [
   name: none
   age: none
 ]

 ; プロトタイプを生成
 tea: make person [
   name: "Tea"
   age: 24
 ]
 probe tea ; probe はオブジェクトをdumpして表示する関数。

 ; プロトタイプなので更に派生する事も可能。
 foo: make tea [ name: "foo" ]
 probe foo 

 ; 定義済みのobjectを新たに拡張する事も出来る。
 person: make person! [
   ; コンストラクタに相当する関数を定義してみる。
   new: func [new-name new-age] [
     ; self はobject自身を指す。makeでクローンを生成して返す。
     make self [ name: new-name age: new-age ]
   ]
 ]
 hina: person/new "Hina" 18
 probe hina

REBOLの第一印象は、括弧なしLISP, コンマなしIo。

  • Prototype based Object Oriented
  • Email, Money, Date, URL が組み込み型。Quoteなしに、EmailやURLをスクリプト中に書ける。
  • Seriesと呼ばれるデータ構造を持ち、REBOLスクリプト自身もそのデータ構造で表す事が出来る。(自己記述性)
  • 評価順序
    • write %output.file read %input.file が期待通りに解釈される。
    • 数式を扱う場合に注意。>> 10 + 20 * 30 + 100 は 710でなく 1000 になる。
      • ()で明示的に評価順序を指定すれば問題なし。
  • 変数のスコープ。
    • 関数宣言内で局所化する場合は明示的に/localで宣言する必要あり。
    • object宣言内のブロックでは別スコープ。
  • 引数の数が曖昧。()を使う事も出来るが省略も出来る為。
  • メソッドを追加する場合にスコープの制限あり。(総称関数が実現できない...?)
    • これってプロトタイプベースの利点が活かし切れていないのでは?
  • ソースがない。(非オープンソース?、拡張したかったけどライセンスが...)