(Translated by https://www.hiragana.jp/)
REBOL - Wikipedia コンテンツにスキップ

REBOL

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』
REBOL
パラダイム マルチパラダイム
登場とうじょう時期じき 1997ねん
設計せっけいしゃ カール・サセンラス
開発かいはつしゃ REBOL Technologies
最新さいしんリリース 3.0/ 2012ねん12月12にち (11ねんまえ) (2012-12-12)[1]
型付かたつ つよ動的どうてき型付かたつ
影響えいきょうけた言語げんご Self, Forth, LISP, LOGO
プラットフォーム クロスプラットフォーム
ライセンス Apache License 2.0(バージョン3以降いこう[2]
ウェブサイト www.rebol.com
テンプレートを表示ひょうじ

REBOL は、データ交換こうかん言語げんごであり、通信つうしん分散ぶんさん処理しょりとくしたプログラミング言語げんごである。Relative Expression Based Object Languageりゃく設計せっけいしゃカール・サセンラスはこれをメッセージング言語げんごび、「REBOL のおもなアイデアは、サーバ、クライアント、そのあいだ通信つうしんやそれらのストレージで使つかえる言語げんごにするというものであった。REBOLの能力のうりょくは、プログラミング言語げんご概念がいねんとメタデータ言語げんご概念がいねん統合とうごうしたことに由来ゆらいする。REBOLの究極きゅうきょく目的もくてきは、インターネットじょうのあらゆる機器ききあいだ情報じょうほうがどのように格納かくのうされ、交換こうかんされ、処理しょりされるかをあらわあらたなアーキテクチャを提供ていきょうすることである。すなわち、人間にんげん機械きかいあいだ情報じょうほう意味いみろんてき交換こうかん使つかわれることを意味いみする」とべている。

歴史れきし

[編集へんしゅう]

1997ねんにリリースされたREBOLは、カール・サセンラスが20ねんわたって設計せっけいしたものである。サセンラスは AmigaOS主要しゅようアーキテクトであり、REBOLの設計せっけいにあたっては、表示ひょうじてき意味いみろん知識ちしきもとづいて、LISPForthLOGOSelf といったプログラミング言語げんご概念がいねん利用りようした。

REBOO/Command は2000ねん9がつにリリースされ、暗号あんごう機能きのうODBCアクセスなどが追加ついかされている。REBOL/View は2001ねん4がつにリリースされ、グラフィックス機能きのう追加ついかされている。2001ねん8がつにリリースされた REBOL/IOS は、拡張かくちょう可能かのう共同きょうどう作業さぎょう環境かんきょうである。2002ねん12月には、ソフトウェア開発かいはつキットがリリースされた。

2012ねん9がつ、R3(REBOL 3)オープンソースとして公開こうかいされることが発表はっぴょうされる[2]。2012ねん12月には、安定あんていばんがリリースされた[2][3]。ライセンスはApache License 2.0[2]

言語げんごとしての特徴とくちょう

[編集へんしゅう]

プログラミング

[編集へんしゅう]

REBOL はインタプリタかた高級こうきゅう言語げんごであり、マルチプラットフォームマルチパラダイムであり、動的どうてきリフレクションをサポートした言語げんごである。どう図像ずぞうせい(Homoiconicity)があり、コードとデータがおな形式けいしき表現ひょうげんされ、メタプログラミング最適さいてきである。

構造こうぞうプログラミング関数かんすうがたプログラミングプロトタイプベースプログラミングをサポートしている。REBOLは純粋じゅんすい関数かんすうがた言語げんごではなく、副作用ふくさようのある命令めいれいがたプログラミング要素ようそもある。また、純粋じゅんすいオブジェクト指向しこう言語げんごでもなく、オブジェクトでないデータがたっていて、プログラミングパラダイムもサポートしている。REBOLはとく言語げんご指向しこうプログラミングてきしており、さらにえばダイアレクティング方言ほうげん派生はせい)にてきしている。

REBOLは動的どうてきプログラミング言語げんごであり、動的どうてき型付かたつつよ型付かたつだが、変数へんすうはそうではない)である。メモリ管理かんりにはガベージコレクション使つかい、例外れいがい処理しょり動的どうてき名前なまえ解決かいけつをサポートしている。

データ定義ていぎとその交換こうかん

[編集へんしゅう]

データ交換こうかん言語げんごとしての利用りよう可能かのうとするため、REBOLには以下いかのような最小限さいしょうげん構文こうぶんがある。

  • ぶん概念がいねんはない。構文こうぶん基本きほん単位たんいしきである。
  • キーワードは存在そんざいしない。
  • 空白くうはく[, ], (, ), ", {, }区切くぎ記号きごうとしてもちいる。
  • 数々かずかずデータがたそなわっていて、そのおおくは字句じく形式けいしき後述こうじゅつ)で定義ていぎされている。

データ言語げんごとしてのREBOLはつよ型付かたつけされたつ。30以上いじょうのデータがたもとからそなわっている。おおくのほか言語げんご同様どうよう整数せいすう、10進数しんすう文字もじれつといった基本きほんてきがある。REBOLではさらに字句じく形式けいしき識別しきべつされるデータがたがあり、たとえば、電子でんしメールアドレスがた (name@host.dom)、URLがた (http://www.rebol.com)、マークアップタグがた (<b>, <font size="2" color="blue">)、価格かかくがた ($100.00, USD$25.25)、日付ひづけがた (30-Nov-2005, 1-Dec-2005/10:30-7:00)、時刻じこくがた (12:00:00)、座標ざひょうたいがた (5x5)、タプルがた (255.255.255, 192.168.100.1)、単語たんごれつがた (how are you?) などがある。これらのデータがたはプログラマ以外いがいにもわかりやすい字句じく形式けいしき使つかっていて、それによってデータ交換こうかん言語げんごとして使つかえるようになっている。REBOLにおいてをグループするのに使つかわれるおもなデータ構造こうぞうを「ブロック」とび、これはLISPの「リスト」にある意味いみている。

実装じっそう

[編集へんしゅう]

REBOLインタプリタにはいくつかのエディションがある(/Core、/View、/Command、/Base、/Face、/Pro)。本稿ほんこう執筆しっぴつ時点じてんでは、/Core が /Base 以外いがいほかのエディションのサブセットになっていて、43 のプラットフォーム利用りよう可能かのうになっている。

REBOLインタプリタのソースコードは非公開ひこうかいである。REBOL/Core と REBOL/View で開発かいはつしたアプリケーションは有償ゆうしょう配布はいふしても課金かきんされない。REBOL/Pro などの拡張かくちょうエディションではライセンスりょう支払しはらいが必要ひつようである。これにはODBCアクセス、ダイナミックリンクライブラリ利用りよう、スタンドアロンのEXEファイル生成せいせいといった機能きのうがある。

ランタイム環境かんきょうは、現状げんじょうでは単一たんいつ実行じっこうファイルとなっている。REBOL/Core ではやく300kB、REBOL/View(GUIエディション)はやく650kBである。アプリケーションのスクリプトはかずキロバイトえることはすくないため、インタプリタ本体ほんたいとスクリプトをいちまいフロッピーディスク格納かくのうできるし、電子でんしメールでスクリプトをおくるのも容易よういで、インターネットうえ転送てんそうして実行じっこうすることもできる。

インターネットじょう各種かくしゅプロトコルをサポートしており、電子でんしメールエージェント、Webアプリケーションといったインターネット・アプリケーションも容易よういける。

REBOL/View はプラットフォーム独立どくりつなグラフィック/サウンド・アクセスを提供ていきょうしており、独自どくじのウィンドウツールキットと拡張かくちょう可能かのうウィジェットぐんつ。これにより、分散ぶんさんGUIアプリケーションが容易ようい構築こうちくできる。REBOLのダイアレクティング・モデルにより、軽量けいりょう分散ぶんさんコンピューティングアプリケーションの開発かいはつもできる。

REBOLコミュニティは、"REBOL desktop" をとおしてリンクしている。REBOL desktop はインターネットじょうのREBOL関連かんれんファイルをグラフィカルに表現ひょうげんしたもので、REBOLインタプリタに付随ふずいしてインストールされる。REBOL desktop 自体じたいオープンソースのREBOLアプリケーションである。

コンソールに Hello world表示ひょうじするだけなら、つぎのようにめばよい。

  print "Hello World!"

クロスプラットフォームのGUIばんでは、つぎのようになる。

 REBOL [
   Title: "Hello World in a Window"
   File: %hello-view.r
   Date: 12-January-2002
]

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

さらに、HTTPSMTP使つかった単純たんじゅんなインターネットアプリケーションのれいしめす。

 REBOL [
   Title: "Web Page Emailer"
   File:  %sendwebpage.r
   Date:  12-January-2002
   Purpose: "Get an HTML document from the web and send it through e-mail"
]

send branko@collin.example read http://www.rebol.com

REBOL という単語たんごはじまるヘッダは、インタプリタがスクリプトの開始かいしるために必要ひつようとされる。ヘッダはたんREBOL [] でもよいのだが、一般いっぱんれいにあるような説明せつめいてき記述きじゅつをするのがよいとされている。

方言ほうげん(ダイアレクト)

[編集へんしゅう]

REBOLはコンテンツ依存いぞん言語げんごであり、ダイアレクト(dialect)とばれるドメイン固有こゆうサブ言語げんごをサポートしている。たとえば、return という単語たんご解釈かいしゃくがコンテンツによってわることをてみよう。通常つうじょうreturn関数かんすう完了かんりょうしてもとかえすのに使つかわれる。しかし、Visual Interface Dialect (VID) では、return という単語たんごがあるとレイアウトエンジンが改行かいぎょう(carriage return)と解釈かいしゃくし、レンダリングペンをつぎぎょう先頭せんとうっていく。REBOLプログラマは独自どくじのダイアレクトを生成せいせいでき、既存きそんのREBOLの単語たんごべつ意味いみ付与ふよすることができる。

ダイアレクトは、REBOLブロックを特定とくてい方法ほうほう処理しょりする関数かんすう実装じっそうされるのが一般いっぱんてきである(後述こうじゅつれいのように文字もじれつ処理しょりでの実装じっそうもある)。同様どうよう関数かんすうでも、ネイティブのダイアレクトとREBOLでかれたダイアレクトを識別しきべつ可能かのうである。

ダイアレクトのれい:

  • do ダイアレクト - REBOLの通常つうじょうdo 関数かんすう理解りかい解釈かいしゃくできる(ネイティブ)。
  • reduce ダイアレクト - doダイアレクトで結果けっかあつめるよう変更へんこうしたもの(ネイティブ)
  • compose ダイアレクト - reduceダイアレクトで括弧かっこだけを評価ひょうかするよう変更へんこうしたもの(ネイティブ)
  • function spec ダイアレクト - 関数かんすうヘッダ記述きじゅつ使つかわれるダイアレクト(ネイティブ)
  • parse ダイアレクト - バッカス・ナウア記法きほうふう文法ぶんぽう規則きそく記述きじゅつするためのツール(ネイティブ)
  • VID - GUIようダイアレクトで、layout関数かんすうとして実装じっそうされている(mezzanine)。

ユーザーは任意にんいのREBOL関数かんすう使つかってダイアレクトを生成せいせいできるが、reduce 関数かんすうcompose 関数かんすうがよく使つかわれており、parse 関数かんすうはダイアレクト生成せいせい最適さいてきされている。

parse関数かんすう目的もくてきは、BNFふう形式けいしきParsing Expression Grammar構文こうぶん規則きそく指定していすることでダイアレクトの解釈かいしゃくあたえることであり、yaccBisonのような構文こうぶん解析かいせきツールにている。REBOLは実行じっこうにそういった規則きそく解釈かいしゃくする。構文こうぶん解析かいせきちゅう実行じっこうすべきことも指定していできる。

parse関数かんすうは、REBOLブロックまたはREBOL文字もじれつ処理しょりするのに使つかわれる。

parseによる文字もじれつ処理しょり非常ひじょう柔軟じゅうなんせいがあるが、ていレベルな手法しゅほうであるため、手間てまがかかる。ブロック解析かいせきのほうが簡単かんたんだが、制限せいげんがある。ブロック解析かいせきでは、ROBOLはかれている規則きそくをREBOLのならびとして字句じく解析かいせきする(文字もじれつ解析かいせきでは文字もじ区切くぎ文字もじとして解釈かいしゃくする)。そのため、より抽象ちゅうしょうされた規則きそくとして記述きじゅつできるが、通常つうじょうのREBOLの字句じく形式けいしきにマッチしていなければならない。

構文こうぶん規則きそく

[編集へんしゅう]

parse 関数かんすう解釈かいしゃくさせる規則きそくぐん自体じたいも REBOL のダイアレクトでく。文字もじれつとして解析かいせきする場合ばあい、REBOLのデータがた一部いちぶ規則きそく使用しようできる。ブロックとして解析かいせきする場合ばあいすべてのREBOLデータがた使つかえ、ほかにもダイアレクト構築こうちく容易よういにする機能きのう使つかえる。

文字もじれつ解析かいせきれい

[編集へんしゅう]

最初さいしょれいは、文字もじれつ解析かいせきして特定とくてい単語たんごさがし、関連かんれんするデータの一部いちぶ変数へんすうとしてコピーし、場所ばしょでそれを使つかう。このれいでは、文字もじれつからコピーされた部分ぶぶん文字もじれつである。具体ぐたいてきえば、"write" または "send" ではじまる命令めいれい文型ぶんけい文字もじれつ入力にゅうりょくとして、簡単かんたん構文こうぶん解析かいせきで「なにを」「だれが」「どうする」のかを把握はあくする処理しょり記述きじゅつされている。

 strings: [
    "write Graham a thank-you note"
    "send Allen the new source code"
]

foreach string strings [
    print string
    ; 規則きそくはブロックであらわされ、かく括弧かっこかこまれている。
    parse string [
        ; かく文字もじれつつぎのいずれかの単語たんごはじまる。COPY は 
        ; テキストの一部いちぶをコピーし、あとでそれを使つかう。
        copy how ["write" | "send"] (print ["How:" how])
        ; ここで、つぎ空白くうはくまでをコピーする。そのには "a" または
        ; "the" がつづく。ここでは括弧かっこ使つかって規則きそく一致いっちしたときに
        ; とるべき動作どうさ定義ていぎしている。
        copy who to " " ["a" | "the"] (print ["Who:" who])
        ; 最後さいごに、文字もじれつ最後さいごまでをコピーする。
        copy what to end (print ["What:" what])
    ]
    print ""
]

"parse string" ブロックの最後さいごくだりてみると、"copy what" は現在げんざいパーサがている位置いち("a" または "the" ののち)からのテキストをコピーすることを意味いみし、それを変数へんすう "what" に代入だいにゅうする。また、ダイアレクトは "to end" を指定していしているので、文字もじれつさい後尾こうびまですべてをコピーすることを意味いみする。したがって "what" にはだいいち文字もじれつなら "thank-you note"、だい文字もじれつなら "new source code" が代入だいにゅうされる。

Print ["What:" what ]むと、以下いかのように出力しゅつりょくされる:

What: thank-you note

What: new source code

ブロック解析かいせきれい

[編集へんしゅう]

ファイル解析かいせきユーティリティがあり、ユーザーが操作そうさすべきファイルを指定していし、それをいつ実行じっこうし、結果けっかをどこにおくり、だれ通知つうちするかということを簡単かんたん指定していできるようにしたいとする。ダイアレクトは、このたねのタスクにたいして、柔軟じゅうなんなテキストベースのインタフェースを提供ていきょうできる。

ダイアレクトは複数ふくすうのアイテムを許容きょようし、語順ごじゅん変動へんどうしても問題もんだいなく、可読かどくせいのために人間にんげん余分よぶん単語たんご追加ついかしてもプログラムの動作どうさには影響えいきょうあたえない。

ここでは、ユーザーがアプリケーションにおくるコマンドセットを2種類しゅるい定義ていぎしている。

 command-blocks: [
    [
        analyze %test-1.txt %test-2.txt 
        post results to http://www.wikipedia.org/results.dat
        notify rebol-xyz@wikipedia.org at 10:00 and again at 10:00pm
    ]
    [
        at 10:00 and at 10:00pm analyze %test-1.txt notify 
        rebol-xyz@wikipedia.org and reb-guy@wikipedia.org 
        post to ftp://wikipedia.org/results.dat
    ]
]

; アポストロフィがぜんおけされた単語たんごはマッチさせたいリテラル単語たんごれつである。
; 感嘆かんたんこうおけされた単語たんごはマッチさせたいデータがたである。
; SOME は "one or more" を意味いみする。正規せいき表現ひょうげんの "+" にている。
; OPT はオプションを意味いみし、ゼロでも1個いっこでもよい。
; SET マッチしたあと参照さんしょうできるよう単語たんごむすびつける。
; ちょうど、変数へんすうへの代入だいにゅう相当そうとうする。

foreach block command-blocks [
    print mold block
    parse block [
        some [
            ['analyze some [set file file! (print file)]]
            | ['notify some [set who email! opt 'and (print who)]]
            | ['at set when time! (print when)] 
            | ['post opt 'results 'to set target url! (print target)]
            | 'again
            | 'and 
        ] to end
    ]
    print ""
]

このれいで、file、email、time、url といったものはすべてREBOLにおけるネイティブなデータがたであり、構文こうぶん解析かいせきちゅうにそれらの抽出ちゅうしゅつして、直接ちょくせつ REBOL のしき適用てきよう可能かのうである。たとえば、 whosend 関数かんすう電子でんしメール送信そうしん使つかわれ、targetwrite 関数かんすうによるデータのポストに使つかわれる。

関連かんれん項目こうもく

[編集へんしゅう]

外部がいぶリンク

[編集へんしゅう]

脚注きゃくちゅう

[編集へんしゅう]

出典しゅってん

[編集へんしゅう]
  1. ^ Carl Sassenrath, CTO (2012ねん12月12にち). “R3 Source Code Released!”. Carl Sassenrath. 2012ねん12月18にち閲覧えつらん
  2. ^ a b c d 末岡すえおか洋子ようこ (2012ねん12月14にち). “セマンティック技術ぎじゅつつプログラミング「REBOL 3.0」、オープンソースソフトウェアとして公開こうかい”. OSDN Corporation. 2012ねん12月18にち閲覧えつらん
  3. ^ 鈴木すずき聖子せいこ,@IT (2012ねん12月17にち). “セマンティック技術ぎじゅつ採用さいようしたプログラミング言語げんごがソースコード公開こうかい”. アイティメディア. 2012ねん12月18にち閲覧えつらん