E(プログラミング言語)

法律: IT 百科事典

E(プログラミング言語)

AmigaEe(検証言語)GNU Eと混同しないこと。

 E
--------

パラダイム マルチパラダイム:オブジェクト指向、メッセージ・パッシング

設計者 Mark S. Miller

登場時期 1997年

型付け 強い型付け、動的型付け

OS クロスプラットフォーム

ライセンス 異なるフリーライセンスの一部

ウェブサイト erights.org

主な処理系 E-on-Java、E-on-CL

影響を受けた言語 Joule、Original-E、Java

影響を与えた言語 Pony
--------

Eは安全な分散コンピューティングのためのオブジェクト指向プログラミング言語であり、1997年にElectric CommunitiesでMark S. MillerとDan Bornstein、その他の人々によって生み出された。Eは主に、並行言語のJouleと、安全な分散プログラミングのためのJavaの一連の機能拡張であるOriginal-Eの系統を引いている。Eはメッセージに基づくコンピュータ操作とJavaのような構文を合わせ持つ。イベントループとpromisesに基づく並列実行モデルは、デッドロックが決して発生しないことを確実にする。

目次

1 原理
2 計算モデル
3 構文と例
4 関連項目
5 参考文献
6 外部リンク

原理

Minjie Shenから刺激を受けて、言語全体が安全なコンピューティングを念頭に置いて設計されている;これは主としてオブジェクト指向コンピューティング・モデルを厳密に順守することで成し遂げられ、そのモデルは、その純粋な形式において安全なコンピューティングを支える特性をもつ。E言語とその標準ライブラリは、プログラマが安全なソフトウェアを構築する手助けをするため、そしてたとえ十分に互いを信頼しなくてもソフトウェア・コンポーネントが共同できるようにするために、一貫して権限に基づく設計思想を採用している。Eにおいて、オブジェクトの参照は権限としての機能を果たし、従って権限がコンピュータ操作の間接経費や概念的な間接経費を加えることはない。その言語の構文は安全性の欠陥を監査する人々にとって平易であるよう設計されている。例えば、語彙のスコープは、所与の変数への影響が調査されなければならないコードの総量を制限する。もう一つの例としては、その言語は比較するための演算子として == を使い、代入には := という演算子を使う;混乱する可能性を避けるため、 = の演算子はない。

計算モデル

Eでは、すべての値はオブジェクトであり、コンピュータ操作はオブジェクトへのメッセージの送信によって作動する。それぞれのオブジェクトはvat(プロセスに類似したもの)の一部である。それぞれのvatは実行とスタックフレーム、イベント待ち行列のシングルスレッドをもつ。分散プログラミングは単にメッセージを遠くのオブジェクト(他のvatにあるオブジェクト)に送る問題である。遠隔の相手との通信はすべてEの実行時に暗号化される。メッセージの到着はvatのイベント待ち行列の中に置かれる;vatのイベントループは到着メッセージを到着順に一つずつ処理する。

Eは2つのメッセージ送信方法をもつ:即時呼び出しと最終的な送信である。即時呼び出しはちょうど非並行言語における典型的な関数とメソッドの呼び出しのようなものである:送信者は受信者が処理を終え、値を返すまで待つ。最終的な送信はメッセージを送ると同時に、promiseを呼び出した結果のためのプレースホルダーを作る。送信者はすぐにpromiseを進める。その後、受信者が処理を終え、結果を引き渡すと、promiseが結果に解決される。遠くのオブジェクトとの通信のときは最終的な送信のみが許可されるため、デッドロックは決して起きない。分散システムにおいて、promiseの仕組みもまたネットワーク待ち時間によって引き起こされる遅れを最小化する。

構文と例

Eの構文はJavaに最も似ているが、PythonとPascalとの類似性もまたもっている。変数は動的型付けと静的スコープである。しかしながら、JavaやPythonとは異なり、Eは完全に式によって構成される。ここに単純極まりないEのプログラムがある:

   println ( "Hello, world!" )

これはコンピュータを使用して数の階乗を行う再帰関数をEで書いたものである。関数はdefという予約語を使用して定義されている。

   def factorial ( n : int ) : int {
      if ( n == 1 ) {
         return 1
      } else if ( n > 0 ) {
         return n * factorial ( n - 1 )
      } else {
         throw ( "invalid argument to factorial: " + n )
      }
   }

一行目で、 :int は関数の引数と結果を限定するguardである。guardは型宣言と全く同じものではない;guardは任意のものであり、制約条件を指定することができる。一つ目の :int は、関数の本文で整数の引数のみを扱うことを保証している。上記の二つ目の :int がなかったなら、関数は値を返すことはできないだろう。最初に関数から出てくる情報を確認できることはセキュリティ監査の助けになる。

Eは安全な協同を支援することが意図されているため、Eのプログラムの標準的な例は、ほんの数行のEによる簡単な電子マネー・システムmintである。以下のコードはmintを作る関数を定義しており、そこでそれぞれのmintは自身の通貨をもつ。それぞれのmintはその通貨を保管する財布を作ることができ、同じ通貨で2つの財布をもつものは誰でも安全にお金を財布の間で移すことができる。ソースコードを素早く検討することで、Eのプログラマは、mintだけが流通する通貨の量を変えることができ、お金は作り出されるのみで消滅しないこと、mintは自らの流通させる通貨のみを作り出し、財布の所持者のみがその均衡を変えることができるということを簡単に確かめることができる。

   def makeMint ( name ) : any {
      def [ sealer , unsealer ] : = makeBrandPair ( name )
      def mint {
         to makePurse ( var balance :( int >= 0 )) : any {
            def decr ( amount :( 0. . balance )) : void {
               balance -= amount
            }
            def purse {
               to getBalance () : int { return balance }
               to sprout () : any { return mint . makePurse ( 0 ) }
               to getDecr () : any { return sealer . seal ( decr ) }
               to deposit ( amount : int , src ) : void {
                  unsealer . unseal ( src . getDecr ())( amount )
                  balance += amount
               }
            }
            return purse
         }
      }
      return mint
   }

Eのオブジェクトはdefという予約語で定義され、オブジェクト定義の中でtoという予約語はそれぞれのメソッドの始まりである。この例でのguardの式は、値の制約を( :(int >= 0) や :(0..balance)のように)指定する方法を示している。

mintの例はsealerと呼ばれる組み込み機構を利用している。makeBrandPair関数は2つの関連オブジェクトであるsealerとunsealerを作り出し、sealerはオブジェクトを箱の中に封印することができ、unsealerは箱の中身を取り出すことのできる唯一のオブジェクトである。このお金の例についてのより詳しい説明についてはEのウェブサイトを参照のこと[1]。

関連項目

・CapDesk----Eで書かれたデスクトップ環境

Object-capability model

参考文献

1. Rees, Jonathan; Miller, Mark (2001). "From Objects To Capabilities - Simple Money". erights.org. ERights. Retrieved 8 July 2014. "Before presenting the following simple example of capability-based money, we must attempt to head off a confusion this example repeatedly causes. We are not proposing to actually do money this way! A desirable money system must also provide for..."

外部リンク

公式サイト

2018-04-01 08:09:47 / shikimi
原文サイトを表示
[ 原文 ] https://en.wikipedia.org/wiki/E_(programming_language)
Creative Commons License この作品は、クリエイティブ・コモンズ・ライセンスの下でライセンスされています。
クリエイティブ・コモンズ・ライセンス