レボル

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

レボル
Rebollogo.png
パラダイム言語指向プログラミングデータ交換機能的プロトタイプベース命令型
によって設計されたカール・サセンラス
デベロッパーREBOLテクノロジーズ
初登場1997 ; 25年前 (1997
安定リリース
2.7.8 / 2011年1月; 11年前 (2011-01
プレビューリリース
2.101.0 / 2012年12月; 9年前 (2012-12
規律の入力ダイナミック強い
OSクロスプラットフォーム
ライセンス2.7.8は無料で再配布可能なソフトウェアです[1] 2.101.0にはApache2.0ライセンスがあります[2]
ファイル名拡張子.r、.reb [3]
Webサイトwww .rebol .com
に影響を受けた
SelfForthLispLogo [4]
影響を受ける
JSON[5]

Rebol/ ˈrɛbəl / REB - əl ;歴史的にREBOL)は、クロスプラットフォーム[6] データ交換言語であり、ネットワーク通信と分散コンピューティングのためにCarlSassenrathによって設計されマルチパラダイム 動的プログラミング言語ですダイアレクトの概念を紹介します。コードとデータ用の小さく最適化されドメイン固有言語[6] [7]であり、設計者によると、この言語の最も注目すべき特性でもあります。カール・サセンラス

プログラミング、関数の記述、プロセスの実行に使用できますが、その最大の強みは、ドメイン固有言語または方言を簡単に作成できることです。

— カール・サセンラス[8]

JavaScriptの開発に携わったことで知られるダグラス・クロックフォードは、 Rebolを「より現代的な言語ですが、プログラムとして実行可能なデータの表現に基づいて構築されているという点で、Lispと非常によく似たアイデアを持っています」と説明しています。JSONの影響の1つとして。[5]

もともと、言語とその公式実装は、REBOLTechnologiesによって開発された独自のクローズドソースでした。ローレンス・ローゼンとの話し合いに続いて[9] Rebolバージョン3インタープリターは2012年12月12日にApache2.0ライセンスの下でリリースされました。 [10]古いバージョンはバイナリ形式でのみ入手可能であり、それらのソースリリースは計画されていません。

Rebolは、インターネット アプリケーションクライアント側とサーバー側の両方)、データベースアプリケーション、ユーティリティ、およびマルチメディアアプリケーションのプログラミングに使用されてきました。[6]

語源

Rebolは当初、すべて大文字で書かれた相対表現ベースオブジェクト言語の頭字語でした。[6] [8]たとえば、歴史的な名前のLISPLispに置き換えるなど、言語の命名における現代の傾向に合わせるために、プログラマーはすべて大文字でREBOLを書く習慣をやめました。Sassenrathは最終的に、彼のブログでコミュニティの議論に名前の質問を投げかけました。[11]その後の執筆において、サッセンラスは言語名をRebolとして書くという慣習を採用した。[12]

歴史

1997年に最初にリリースされたRebolは、 AmigaOSのアーキテクト兼プライマリ開発者であるCarl Sassenrathによって、表示的意味論の研究に基づいて、プログラミング言語LispForthLogoSelfの概念を使用して20年間にわたって設計されました

  1. REBOLTechnologiesは1998年に設立されました。
  2. 拡張インタプリタエディションのコアとなったインタプリタ REBOL2は、1999年に最初にリリースされました。
    1. 強力な暗号化とODBCアクセスを追加したREBOL / Commandは、2000年9月にリリースされました。
    2. REBOL / Viewは2001年4月にリリースされ、コア言語にグラフィック機能が追加されました。
    3. REBOLで構築された拡張可能なコラボレーション環境であるREBOL / IOSは、2001年8月にリリースされました。
    4. バインドするカーネルの選択肢とプリプロセッサを提供するREBOL / SDKは、2002年12月にリリースされました。
  3. インタープリターの最新バージョンであるRebol3 [R3]には、2008年1月からREBOL Technologiesからアルファ版がリリースされています。2012年12月にApache2プロジェクトとしてリリースされて以来、Rebolコミュニティによって開発されています。[13]

デザイン

使いやすさ

Rebolの設計原則の1つは、「単純な方法で単純なことを行う」ことです。[6]次の例では、ビジュアルインターフェイスダイアレクトを使用して、グラフィカルユーザーインターフェイスを備え た単純なHelloworldプログラムを記述しています。

ビュー レイアウト[テキスト "Hello world!"  ボタン 「終了」 [終了]]

これは、R3-GUIでの同様の例の外観です。

ビュー[テキスト "Hello world!"  ボタン 「終了」 オンアクション[終了]]

R3-GUI Helloworldの例

方言

方言と呼ばれるRebolドメイン固有言語は、特定の目的のために最適化されたマイクロ言語です。方言を使用して、プログラムのインストール中にビジネスルール、グラフィカルユーザーインターフェイス、または画面のシーケンスを定義できます。ユーザーは独自の方言を定義し、既存のRebol単語を再利用して、その方言で特定の意味を与えることができます。[6]方言は、Rebolブロックを処理する(または文字列を解析する)関数によって特定の方法で 解釈されます。

Rebolの方言能力の例は、単語で見ることができますreturnデータ交換方言 では、return特定の意味を持たない単語です。do方言return、は、関数の結果値を返すネイティブ関数を参照するグローバル変数です。[4]ビジュアルインターフェイス方言(VID)で、、レイアウトエンジンにキャリッジリターンをシミュレートさせ、「レンダリングペン」を次の行の先頭に移動させるキーワードです。[7]return

グラフィック機能を備えたRebolインタプリタは、多くの方言を理解して解釈する必要があります。次の表に、最も重要なものを重要度の順に示します。

方言名 によって解釈される 目的
データ交換方言 load関数 データとメタデータを表します。Rebol方言の共通プラットフォーム
方言をする do関数 プログラミング
方言の解析 parse関数 パターンマッチング
機能仕様方言 make関数 関数定義; 関数型プログラミング
オブジェクト仕様方言 make関数 オブジェクトの定義/継承; プロトタイプベースのプログラミング
ビジュアルインターフェイス方言(VID)
または
RebGUI
layout機能
または
display機能
グラフィカルユーザーインターフェイスを指定します
方言を描く view関数 グラフィック要素(線、多角形など)を定義します
スクリプト仕様方言 do関数 スクリプト定義
セキュリティポリシーの方言 secure関数 セキュリティポリシーを指定します

構文

Rebol構文自由形式であり、特定の配置は必要ありません。ただし、インデントは、テキストの構造を人間の読者によりよく伝えるためによく使用されます。

異なる方言の構文プロパティは異なる場合があります。すべてのRebol方言に共通のプラットフォームは、データ交換方言です。他の方言は通常それから派生しています。すべての方言に共通のプラットフォームであることに加えて、データ交換方言は、データとメタデータの表現、データ構造の入力、インターネット経由でのデータの送信、およびデータストレージへの保存に直接使用されます。

Cのようなプログラミング言語とは対照的にデータ交換方言は、宣言ステートメント、またはキーワードで構成されていません。有効なデータ交換ダイアレクトテキストストリームは、ブロック(ルートブロックは暗黙的で、サブブロックは角かっこで区切られます)、parens(丸かっこで区切られます)、文字列二重引用符または中かっこで区切られます)で構成されるツリーデータ構造です。 -行文字列。印刷できない文字には角かっこ表記が使用されます)、URL、電子メールアドレス、ファイル、パス、またはその他の複合値ALGOL ブロックとは異なり、RebolブロックはLispで引用されたS式に似た複合値です。コードがRebolブロックの形式で書かれているという事実は、言語を同像性にします。[4]

ブロックと括弧には、他の複合値(ブロックにはサブブロック、括弧、文字列などが含まれる場合があります)、または単語、set-words(コロンで始まる単語)、get-words(接頭辞がコロン)、lit-words(アポストロフィが前に付いた単語)、数字、お金、文字など、空白で区切られます特殊文字は単語で許可されていることに注意してください。スペースで区切られた3つの単語のシーケンスであるとは a+b異なり、単語も同様です。a + b

コメントは、セミコロンの後に行末まで表示される場合があります。複数行コメントまたは字句パーサーによって無視されないコメントは、複数行文字列などの「通常の」データ型を使用して書き込むことができます。[4]

セマンティクス

ドメイン固有言語を含むブロックは、特定のエバリュエーター関数への引数として送信できます。[6]

を行う

最も頻繁に使用される評価者はdo関数です。デフォルトでは、インタプリタコンソールへのテキスト入力を解釈するために使用されます。

関数によって解釈されるdo方言は、データ交換方言の式指向のサブ言語です言語の主な意味単位はです。ALGOLの子孫である命令型プログラミング言語とは対照的にdo方言にはキーワードもステートメントもありません。 do

単語は大文字と小文字を区別しない 変数として使用されます。すべての動的型付け言語と同様に、変数には型が関連付けられておらず、型は値に関連付けられています。関数が単語に遭遇すると、結果、つまり単語の評価が返されdoます。単語のセットワード形式は、割り当てに使用できます。ステートメントはありませんが、割り当ては、副作用のある関数とともに、命令型プログラミングに使用できます[4]

ルートブロックのサブブロックは、それ自体に評価されます。このプロパティは、データブロックの処理、ブロックを引数として送信して、、、などの関数を制御する構造プログラミング、およびブロックが特定のインタープリター関数に渡されるときのダイアレクトに使用されます。[6]ifeitherloop

注目に値する特定の問題は、変数に割り当てられた複合値がコピーされないことです。コピーを作成するには、値をcopy関数に渡す必要があります。[4]

do関数は通常、プレフィックススタイルの評価に従います。この場合、関数はそれに続く引数を処理します。ただし、中置演算子を使用した中置評価も存在します。中置評価は接頭辞評価よりも優先されます。例えば、

abs -2 + 3

中置加算は絶対値の計算よりも優先されるため、1を返します。中置式を評価する場合、評価の順序は左から右になり、演算子が他の演算子よりも優先されることはありません。例えば、

2  +  3  *  4

20を返しますが、乗算を優先する評価では14が得られます。すべての演算子にはプレフィックスバージョンがあります。Do通常、引数を関数に渡す前に引数を評価します。したがって、次の式:

最初にWikipediaRebolページを読み取り、次に結果をprint関数に渡します。括弧を使用して、評価の順序を変更できます。プレフィックス表記を使用すると、式での括弧の使用を回避できます。[4]

単純な優先順位ルールは両方とも利点です。

  • 式を作成するときに優先順位テーブルを「参照」する必要はありません
  • 新しい演算子が定義されたときに優先順位テーブルを書き直す必要はありません
  • 式は、中置表記から接頭表記へ、またはその逆に簡単に音訳できます。

だけでなく、欠点:

  • 従来の優先順位規則に慣れているユーザーは、簡単に間違いを犯す可能性があります[6]

解析

このparse関数は、方言を指定、検証、変換、および解釈するために使用することが好ましい。これは、実行時に解析式を照合することによって行われます。[6]

構文解析式は、構文解析方言で記述されます。これは、 do方言と同様に、データ交換方言の式指向のサブ言語ですdo方言とは異なり、解析方言は演算子と最も重要な非端末を表すキーワードを使用します中置構文解析演算子には同等の接頭辞がなく、優先順位規則を使用します(シーケンスは選択よりも優先順位が高くなります)。[6]

解析プロセス中に実行するアクションを含めることもparseでき、関数を使用してブロックまたは文字列を処理することもできます。文字列解析レベルでは文字と区切り文字parseを考慮して、「低レベル」の解析を処理する必要があります。ブロック解析はより高いレベルであり、Rebol値のレベルでスキャンを処理します。[6]

構文解析方言は、トップダウン構文解析言語または構文解析式文法(PEG)で表される文法ファミリーに属しています。主な類似点は、すべての家族が持っているシーケンスおよび選択演算子の存在です。方言の構文解析と、方言の解析とPEGの類似点は、算術式を解析する PEGの例の音訳によって示されています。

数字: charset [ # "0"  -  # "9" ]
値: [いくつかの 数字 |  "("  Expr  ")" ]
製品: [ any [[ "*" |  "/" ]]]
合計: [ Product  any [[ "+" |  "-" ] Product ]]
 Expr: Sum 
parse / all  "12 + 13"  Expr

実装

公式のRebol2.7.8実装は、いくつかのエディション(/ Core/ View/ Command/ SDK、および/ IOS)で利用できます。/ Coreエディションと/ Viewエディションはどちらも、自由に再配布可能なソフトウェアです。[1]

ランタイム環境は、単一の実行可能ファイルに保存されます。コンソール版のRebol / Core2.7.8のサイズは約300KBで、グラフィカルユーザーインターフェイス版のRebol / View2.7.8のサイズは約650KBです

Rebol / Viewは、プラットフォームに依存しないグラフィックスとサウンドアクセスを提供し、独自のウィンドウツールキットと拡張可能なスタイルのセット(GUIウィジェット)が付属しています。Rebol / Command2.7.8やRebol / SDK 2.7.8などの拡張エディションには、有料ライセンスが必要です。ODBCデータアクセスなどの機能や、スタンドアロンの実行可能ファイルを作成するオプションが追加されています。[要出典]

レガシー

  • Rebolは、 JavaScript ObjectNotationのインスピレーションの1つとしてDouglasCrockfordによって命名されました。[5]
  • Rebolは、Rebolのような言語として解釈されるオープンソースのOrcaプロジェクトに影響を与えました。[14]
  • Boronは、ドメイン固有言語を埋め込むことを目的としたRebolに触発され、類似した、解釈された同像性言語です。LGPLv3の条件の下でライセンスされたCライブラリとして実装されています。
  • Redプログラミング言語はRebolに直接影響を受けましたが、Redの実装の選択は、認識されている制限を克服することを特に目的としていました[15]

も参照してください

参考文献

  1. ^ a bREBOL テクノロジー。REBOL / ViewおよびREBOL / Core2.7.8ライセンス
  2. ^ GitHubR3ソース
  3. ^ 「CarlのREBOLブログ-.rebサフィックスに切り替えましょう」Rebol.com。2013年8月18日2014年1月23日取得
  4. ^ a b c d e f g Goldman、E.、Blanton、J。(2000)。REBOL:公式ガイド。マグロウヒルオズボーンメディア。ISBN0-07-212279 -X 
  5. ^ a b c クロックフォード、ダグラスJSON Sagajsonsaga.ppt 2012年10月4日、 WaybackMachineでアーカイブ
  6. ^ a b c d e f g h i j k l Roberts、Ralph(2000)。ダミーのためのREBOL。空腹の心。ISBN0-7645-0745-1_ 
  7. ^ a b Auverlot、Olivier(2001)。RebolProgrammation。Eyrolles。ISBN2-212-11017-0_ 
  8. ^ a b Sassenrath、Carl(2000年7月1日)。「REBOLスクリプト言語の内部」ドブ博士の日記
  9. ^ 「オープンソースになるREBOL」Rebol.com。2012年9月25日2014年1月23日取得
  10. ^ Sassenrath、Carl(2012年12月12日)。「コメント:R3ソースコードがリリースされました!」2014年8月14日取得あなたはおそらくソースリリースが決して起こらないと思ったのですか?私は正しいですか?さて、それはgithub.com/rebol/rebolのgithubにあります。
  11. ^ 「REBOLRebolに電話しますか?」2012年12月14日。2013年12月3日のオリジナルからアーカイブ2013年12月2日取得
  12. ^ サセンラス、カール。「お気に入りの組み込みボード用のクロスコンパイルRebol」2016年9月16日取得
  13. ^ 「Rebolインタプリタのソースコード」rebol / rebolGitHub 2017年3月14日取得
  14. ^ Freecoderebol-orcaプロジェクト
  15. ^ GitHubRedプロジェクト

さらに読む

外部リンク