| パラダイム | 言語指向プログラミング、データ交換、関数型、プロトタイプベース、命令型 |
|---|---|
| デザイン: | カール・サッセンラート |
| 開発者 | レボルテクノロジーズ |
| 初登場 | 1997年 |
| 安定リリース | 2.7.8 / 2011年1月 |
| プレビューリリース | 2.101.0 / 2012年12月 |
| タイピングの規律 | ダイナミック、強い |
| OS | クロスプラットフォーム |
| ライセンス | 2.7.8は自由に再配布可能なソフトウェアです。[1] 2.101.0はApache 2.0ライセンスです。[2] |
| ファイル名拡張子 | .r, .reb [3] |
| Webサイト | ホームページ |
| 影響を受けた | |
| Self、Forth、Lisp、Logo [4] | |
| 影響を受けた | |
| JSON、[5] 赤 | |
Rebol(/ ˈ r ɛ b əl / REB -əl ; 歴史的にはREBOL)は、ネットワーク通信と分散コンピューティングのためにカール・サッセンラートによって設計されたクロスプラットフォーム[6] データ交換言語であり、マルチパラダイムの 動的プログラミング言語です。これは、コードとデータのための小さく最適化されたドメイン固有言語である方言の概念を導入しており、[6] [7]設計者カール・サッセンラートによると、これがこの言語の最も注目すべき特性でもあります。
プログラミング、関数の記述、プロセスの実行に使用できますが、最大の強みはドメイン固有の言語や方言を簡単に作成できることです。
— カール・サッセンラート[8]
JavaScriptの開発に関わったことで知られるダグラス・クロックフォードは、Rebolを「より現代的な言語だが、プログラムとして実行可能なデータの表現に基づいて構築されている点でLispと非常によく似た考え方を持っている」と評し、JSONの影響の1つであるとしている。[5]
もともと、この言語とその公式実装はREBOL Technologiesによって開発された独自のクローズドソースでした。ローレンス・ローゼンとの議論の後、[9] Rebolバージョン3インタープリターは2012年12月12日にApache 2.0ライセンスの下でリリースされました。 [10]古いバージョンはバイナリ形式でのみ利用可能であり、ソースリリースは予定されていません。
Rebolは、インターネット アプリケーション(クライアント側とサーバー側の両方)、データベースアプリケーション、ユーティリティ、マルチメディアアプリケーションのプログラミングに使用されてきました。[6]
語源
Rebolは当初、すべて大文字で書かれたR elative Expression B ased Object L anguageの頭字語でした。 [6] [8]歴史的な名前LISPをLispに置き換える変更に代表される言語命名の現代の傾向に合わせるために、プログラマーはREBOLをすべて大文字で書く習慣をやめました。Sassenrathは最終的に、命名の問題を彼のブログのコミュニティの議論に持ち込みました。[11]その後の執筆で、Sassenrathは言語名をRebolと書く慣例を採用しました。[12]
歴史
1997 年に初めてリリースされた Rebol は、AmigaOSの設計者であり主要な開発者である Carl Sassenrath によって、表示的意味論の研究に基づき、 Lisp、Forth、Logo、Self などのプログラミング言語の概念を使用して、 20 年かけて設計されました。
- REBOL Technologies は 1998 年に設立されました。
- 拡張インタープリタエディションの中核となったインタープリタである
REBOL 2 は、1999 年に初めてリリースされました。
- 強力な暗号化とODBCアクセスを追加したREBOL/Command は、 2000 年 9 月にリリースされました。
- REBOL/View は2001 年 4 月にリリースされ、コア言語にグラフィカル機能が追加されました。
- REBOL で構築された拡張可能なコラボレーション環境であるREBOL/IOSは、2001 年 8 月にリリースされました。
- バインドするカーネルの選択肢とプリプロセッサを提供するREBOL/SDKは、2002 年 12 月にリリースされました。
- 最新バージョンのインタプリタであるRebol 3 [R3]は、2008年1月からREBOL Technologiesによってアルファ版がリリースされていました。2012年12月にApache 2プロジェクトとしてリリースされて以来、Rebolコミュニティによって開発されています。[13]
デザイン
使いやすさ
Rebolの設計原則の1つは、「単純なことを単純な方法で行うこと」です。[6]次の例では、ビジュアルインターフェイス方言を使用して、グラフィカルユーザーインターフェイスを備えた単純なHello worldプログラムを記述しています。
ビュー レイアウト[テキスト 「Hello world!」 ボタン 「終了」 [終了]]
R3-GUI での同様の例は次のようになります。
ビュー[テキスト 「Hello world!」 ボタン 「終了」 オンアクション[終了]]
方言
Rebolのドメイン固有言語は方言と呼ばれ、特定の目的のために最適化されたマイクロ言語です。方言は、プログラムのインストール中にビジネスルール、グラフィカルユーザーインターフェイス、または画面のシーケンスを定義するために使用できます。ユーザーは、既存のRebolの単語を再利用して、その方言で特定の意味を与えることで、独自の方言を定義できます。[6]方言は、Rebolブロックを処理する(または文字列を解析する)関数によって特定の方法で 解釈されます。
Rebol のダイアレクト機能の例は、 という単語で見ることができますreturn。データ交換ダイアレクト returnでは、は特定の意味を持たない単なる単語です。doダイアレクトでは、 は関数結果の値を返すネイティブ関数を参照するグローバル変数returnです。 [4]ビジュアルインターフェイスダイアレクト (VID)では、はレイアウトエンジンにキャリッジリターンをシミュレートさせ、「レンダリングペン」を次の行の先頭まで移動させるキーワードです。 [7]return
グラフィカルな能力を持つ Rebol 通訳者は、多くの方言を理解して通訳する必要があります。以下の表は、最も重要な方言を重要度順にリストしたものです。
構文
Rebol構文は自由形式であり、特定の位置指定を必要としません。ただし、テキストの構造を人間の読者によりわかりやすく伝えるために、 インデントがよく使用されます。
異なる方言の構文特性は異なる場合があります。すべての Rebol 方言の共通プラットフォームはデータ交換方言です。他の方言は通常、そこから派生しています。データ交換方言は、すべての方言の共通プラットフォームであるだけでなく、データとメタデータの表現、データ構造の設定、インターネット経由のデータ送信、データ ストレージへの保存に直接使用されます。
Cのようなプログラミング言語とは対照的に、データ交換方言は宣言、文、式、キーワードで構成されません。有効なデータ交換方言のテキストストリームは、ブロック (ルート ブロックは暗黙的、サブブロックは角括弧で区切られる)、括弧 (丸括弧で区切られる)、文字列(複数行の文字列に適した二重引用符または中括弧で区切られ、印刷できない文字にはキャレット表記法が使用される )、URL、電子メール アドレス、ファイル、パス、またはその他の複合値で構成されるツリー データ構造です。ALGOLブロックとは異なり、Rebol ブロックはLispの引用符で囲まれたS 式に似た複合値です。コードが Rebol ブロックの形式で記述されるという事実は、言語を同図像的にします。[4]
ブロックと括弧には、他の複合値 (ブロックにはサブブロック、括弧、文字列などが含まれる場合があります) や、空白で区切られたスカラー値(単語、set-words (コロンで終わる単語)、get-words (コロン で始まる単語)、lit-words (アポストロフィで始まる単語)、数値、通貨、文字など) を含めることができます。単語では特殊文字が許可されているため、スペースで区切られた 3 つの単語のシーケンスである とは
a+b異なり、単語も許可されます。a + b
コメントはセミコロンの後に行末まで記述できます。複数行コメントや字句解析器によって無視されないコメントは、複数行文字列などの「通常の」データ型を使用して記述できます。 [4]
セマンティクス
ドメイン固有言語を含むブロックは、特定の評価関数への引数として送信することができます。[6]
する
最も頻繁に使用される評価子は関数です。これは、インタープリタコンソールdoに入力されたテキストを解釈するためにデフォルトで使用されます。
関数によって解釈されるdo 方言は、データ交換方言の式指向のdoサブ言語です。言語の主な意味単位は式です。ALGOLから派生した命令型プログラミング言語とは対照的に、do 方言にはキーワードもステートメントもありません
。
単語は大文字と小文字を区別しない 変数として使用されます。すべての動的型付け言語と同様に、変数には関連付けられた型がなく、型は値に関連付けられています。関数が単語に遭遇すると、結果、つまり単語の評価が返されます。単語のset-word形式は代入doに使用できます。文はありませんが、代入は副作用のある関数と一緒に命令型プログラミングに使用できます。[4]
ルートブロックのサブブロックは、それ自体として評価されます。この特性は、データブロックの処理、、、などの制御関数への引数としてブロックを送信して構造化プログラミングを行うため、およびブロックが特定のインタープリタ関数に渡されるときの方言化のために使用されます。[6]ifeitherloop
注目すべき具体的な問題は、変数に割り当てられた複合値がコピーされないことです。コピーを作成するには、値を関数に渡す必要がありますcopy。[4]
関数doは通常、プレフィックススタイルの評価に従います。プレフィックススタイルの評価では、関数はそれに続く引数を処理します。ただし、インフィックス演算子を使用したインフィックス評価も存在します。インフィックス評価はプレフィックス評価よりも優先されます。たとえば、
絶対値-2 + 3
1 を返します。これは、インフィックス加算が絶対値の計算よりも優先されるためです。インフィックス式を評価する場合、評価の順序は左から右であり、演算子が他の演算子よりも優先されることはありません。たとえば、
2 + 3 * 4
は 20 を返しますが、乗算を優先する評価では 14 になります。すべての演算子にはプレフィックス バージョンがあります。Do通常、関数に渡す前に引数を評価します。したがって、以下の式:
印刷 読む http://en.wikipedia.org/wiki/Rebol
まずWikipediaのRebolページを読み取り、その結果をprint関数に渡します。括弧を使用して評価の順序を変更できます。プレフィックス表記法を使用すると、式での括弧の使用を避けることができます。[4]
シンプルな優先順位ルールは、どちらも利点です。
- 式を書くときに優先順位表を「参照」する必要がない
- 新しい演算子が定義されても優先順位テーブルを書き換える必要はありません
- 表現は中置記法から前置記法へ、またその逆へ簡単に変換できる。
欠点もあります:
- より一般的な優先順位のルールに慣れたユーザーは簡単に間違いを犯す可能性がある[6]
解析する
この関数は、方言の指定、検証、変換、解釈に使用するのが望ましい。実行時に解析式をparse一致させることでこれを実現する。 [6]
解析式は解析方言で記述されます。解析方言はdo方言と同様に、データ交換方言の式指向のサブ言語です。do方言とは異なり、解析方言は演算子と最も重要な非終端記号を表すキーワードを使用し、中置解析演算子にはプレフィックス相当がなく、優先順位規則を使用します(シーケンスは選択よりも優先順位が高くなります)。[6]
解析プロセス中に実行されるアクションも含めることができ、parse関数を使用してブロックまたは文字列を処理できます。文字列解析レベルでは、文字と区切り文字parseを考慮して「低レベル」の解析を処理する必要があります。ブロック解析はより高レベルで、Rebol値のレベルでスキャンを処理します。[6]
解析方言は、トップダウン解析言語または解析式文法(PEG)によって表される文法のファミリーに属します。主な類似点は、ファミリー メンバーすべてにシーケンス演算子と選択演算子があることです。解析方言の構文と解析方言と PEG の類似点は、算術式を解析するPEG の例の次の翻字によって示されます。
数字: 文字セット[ #"0" - #"9" ]
値: [いくつかの 数字 | "(" 式 ")" ]
積: [値 任意[[ "*" | "/" ]値]]
合計: [積 任意[[ "+" | "-" ]積]]
式: 合計
解析/すべて "12+13" 式
実装
公式のRebol 2.7.8実装は、いくつかのエディション( /Core、/View、/Command、/SDK、/IOS)で利用可能です。/Coreエディションと/Viewエディションはどちらも自由に再配布可能なソフトウェアです。[1]
ランタイム環境は、単一の実行可能ファイルに保存されます。コンソール エディションのRebol/Core 2.7.8 のサイズは約 300 KB、グラフィカル ユーザー インターフェイスエディションのRebol/View 2.7.8のサイズは約 650 KB です。
Rebol/View は、プラットフォームに依存しないグラフィックスとサウンドへのアクセスを提供し、独自のウィンドウ ツールキットと拡張可能なスタイル セット ( GUI ウィジェット) が付属しています。Rebol /Command 2.7.8 やRebol/SDK 2.7.8などの拡張エディションには有料ライセンスが必要です。これらのエディションでは、ODBC データ アクセスやスタンドアロン実行ファイルを作成するオプションなどの機能が追加されます。[引用が必要]
遺産
- Rebolは、 JavaScript Object Notationのインスピレーションの1つとしてDouglas Crockfordによって名付けられました。[5]
- Rebolは、Rebolに似た解釈型言語であるオープンソースのOrcaプロジェクトに影響を与えました。[14]
- Boron は、ドメイン固有言語を埋め込むことを目的とした Rebol にヒントを得た、Rebol に似た解釈型の同図像言語です。LGPLv3 の条件に基づいてライセンスされる C ライブラリとして実装されています。
- Redプログラミング言語はRebolから直接インスピレーションを得ましたが、Redの実装の選択は、特にRebolの認識された限界を克服することに重点が置かれていました。[15]
参照
参考文献
- ^ ab REBOL Technologies。REBOL /View および REBOL/Core 2.7.8 ライセンス
- ^ GitHubの R3 ソース
- ^ 「Carl's REBOL Blog - Let's switch to .reb suffix」Rebol.com。2013 年 8 月 18 日。2014年1 月 23 日閲覧。
- ^ abcdefg Goldman, E., Blanton, J. (2000). REBOL: 公式ガイド。McGraw -Hill Osborne Media。ISBN 0-07-212279 -X。
- ^ abc クロックフォード、ダグラス. JSON Saga、 jsonsaga.ppt 2012 年 10 月 4 日にアーカイブ、ウェイバック マシンに保存
- ^ abcdefghijkl ロバーツ、ラルフ (2000)。REBOL for Dummies。Hungry Minds。ISBN 0-7645-0745-1。
- ^ ab オーヴェルロ、オリヴィエ (2001)。リボルプログラム。エロールズ。ISBN 2-212-11017-0。
- ^ ab Sassenrath, Carl (2000 年 7 月 1 日)。「REBOL スクリプト言語の内部」。Dr . Dobb's Journal。
- ^ 「REBOLがオープンソースになる」Rebol.com、2012年9月25日。 2014年1月23日閲覧。
- ^ Sassenrath, Carl (2012 年 12 月 12 日)。「コメント: R3 ソース コードがリリースされました!」 。 2014 年8 月 14 日閲覧。
ソース リリースは絶対に行われないだろうと思われたかもしれません。そうでしょうか。現在、github の github.com/rebol/rebol にあります。
- ^ “Calling REBOL Rebol?”. 2012年12月14日. 2013年12月3日時点のオリジナルよりアーカイブ。2013年12月2日閲覧。
- ^ Sassenrath, Carl. 「お気に入りの組み込みボード用に Rebol をクロスコンパイルする」 。2016年9 月 16 日閲覧。
- ^ 「Rebol インタープリターのソースコード」。rebol /rebol GitHub。2017年3 月 14 日閲覧。
- ^ Freecodeの rebol-orca プロジェクト
- ^ GitHubの Red プロジェクト
さらに読む
- Mikes, Nora (1999 年 11 月 20 日)。「REBOL の侵略: スクリプト言語でもプログラミング言語でもなく、新しい Amiga でもありません。それともそうでしょうか?」LinuxWorld。2005年 3 月 24 日のオリジナルからアーカイブ。
- ストーリー、デリック (1999 年 8 月 27 日)。「Rebol は残りの私たちにとっての言語になるかもしれない」。Web レビュー。1999 年 10 月 12 日時点のオリジナルからアーカイブ。
外部リンク
- REBOLチュートリアル
- Rebol 3 チュートリアル
- Rebol 3 (Oldes' fork) ソース
