![]() | |
| 開発者 | スピークイージーコンピューティングコーポレーション |
|---|---|
| 安定版リリース | IV イオタ / 2006 |
| 書かれた | Mortran、FORTRAN、C [引用が必要] |
| オペレーティング·システム | Windows、macOS、RedHat Linux、SUSE Linux、Mandrake Linux、Debian、Solaris、HP-UX [1] |
| タイプ | 技術計算 |
| ライセンス | 試用版 |
| パラダイム | 命令的 |
|---|---|
| デザイン: | スタンリー・コーエン |
| 開発者 | スピークイージーコンピューティングコーポレーション |
| 初登場 | 1964 |
| タイピングの規律 | 動的 |
| 影響を受けた | |
| オーストラリア・プロパンガス協会[2] | |
| 影響を受けた | |
| マテリアライズド・ビュー[3] | |
Speakeasyは、インタープリタ型プログラミング言語も備えた数値計算インタラクティブ環境です。当初は理論物理学者のスタンレー・コーエンによってアルゴンヌ国立研究所の物理学部門で内部使用するために開発されました。[4]彼は最終的にSpeakeasy Computing Corporationを設立し、プログラムを商用利用できるようになりました。[5]
Speakeasyは非常に長く使われている数値パッケージです。実際、環境のオリジナルバージョンは、1960年代初頭に開発された「Named storage」と呼ばれるコア動的データリポジトリを中心に構築されましたが、 [6] [7]最新バージョンは2006年にリリースされました。
Speakeasyはアルゴンヌ国立研究所の物理学者の計算作業を容易にすることを目的としていました。[8]
歴史
Speakeasyは当初メインフレーム(当時の唯一のコンピュータの種類)で動作するように考案され、その後、新しいプラットフォーム(ミニコンピュータ、パーソナルコンピュータ)が利用可能になると移植されました。システムの依存関係やコンパイラの欠陥や相違点に対処するために、Mortranメタ言語マクロを使用することで、同じコードを異なるプラットフォームに移植することが容易になりました。[9] Speakeasyは現在、 Windows、macOS、Linuxを実行するPC、部門コンピュータ、およびLinux、 AIX、またはSolarisのさまざまなフレーバーを実行するワークステーションなど、いくつかのプラットフォームで利用できます。
Speakeasyは、 CDC 3600システムに実装された最初の[要出典]対話型数値計算環境の1つでもあり、後にIBM TSOマシン(当時アルゴンヌ国立研究所でベータテスト中だった)に実装されました。1984年までに、Digital Equipment CorporationのVAXシステムで利用できるようになりました。[10] [11]
Speakeasy は、ほぼ当初から (オペレーティング システムで動的リンク機能が利用可能になって以来)、必要に応じてコア プロセッサに動的にリンクされる個別のモジュールを使用して操作語彙を拡張する機能を備えています。そのため、このようなモジュールは「linkules」(LINKable-modULES) と呼ばれていました。[12]これらは、 FORTRAN [13]またはCで記述できる汎用インターフェイスを備えた関数です 。[要出典] 新しいモジュールのそれぞれが他のモジュールやメイン プロセッサから独立していることは、特に昔はシステムの改善に大いに役立ちました。
メイン プロセッサの機能を拡張するこの簡単な方法は、ユーザーが独自の専用パッケージを開発するためによく利用されていました。ユーザーが Speakeasy 独自の解釈言語で記述できるプログラム、関数、サブルーチンに加えて、リンクルはコンパイルされたプログラムの一般的なパフォーマンスで実行される機能を追加します。
ユーザーが開発したパッケージの中で最も重要なものの1つは「Modeleasy」です。これはもともと1970年代初頭にワシントンDCの連邦準備制度理事会の研究部門で「FEDeasy」 [14]として開発されました。 [15] Modeleasyは、大規模な計量経済モデルの推定とシミュレーションのための特別なオブジェクトと関数を実装しています。[16]その進化により、最終的には独立した製品として配布されるようになりました。
構文
記号:_ (コロン + アンダースコア) は、Speakeasy のロゴであると同時に、対話型セッションのプロンプトでもあります。
ドル記号はコメントを区切るために使用されます。アンパサンドは次の物理行にステートメントを継続するために使用され、その場合プロンプトは:& (コロン + アンパサンド) になります。セミコロンは、同じ物理行に記述されたステートメントを区切ることができます。
$非常に長いステートメントがある とします。 $ 継続する行の末尾に" & "を使用すると、複数の物理行に記述できます。
: _ the_return_value = this_is_a_function_with_many_arguments ( argument_1 , argument_2 , & : & argument_3, argument_4, argument_5, argument_6) $ 一方、" ; "を使用すると、複数の短いステートメントを1 つの物理行にまとめることができます。 :_ a=1; b=2; c=3; d=4
名前からもわかるように、Speakeasy は、ユーザーにとってできるだけ使いやすく、話し言葉にできるだけ近い構文を公開することを目指しました。その最たる例は、永続ストレージからデータを読み書きするためのコマンド セットです。例: (ポイントを明確にするために、言語のキーワードは大文字になっています):
:_ ライブラリ my_project から my_data を取得します :_ my_data をライブラリ other_project の a_new_name_for_mydata として保持します
変数 (つまり、Speakeasy オブジェクト) には、LONGNAME オプションがオンの場合は最大 255 文字の名前が付けられ、それ以外の場合は最大 8 文字の名前が付けられます (下位互換性のため)。変数は、割り当てられた値に応じて動的に型指定されます。
:_a=1 です :_ 何ですか A は実数スカラーです。 :_ a="文字配列になりました" :_ 何ですか A は 21 要素の CHARACTER ARRAY です。
関数の引数は、コンテキストが明確で曖昧でない限り、通常は括弧で囲んだり、カンマで区切ったりする必要はありません。例:
:_ sin(grid(-pi,pi,pi/32)) $ 完全指定構文
次のように書くことができます:
:_ sin grid(-pi,pi,pi/32) $ 関数 sin の引数は括弧で囲まれていません
あるいは
:_ sin grid(-pi pi pi/32) $ 関数gridの引数はスペースで区切ることができます
他にも多くの構文の簡略化が可能です。たとえば、10 個の要素を持つゼロの配列に値を持つ 'a' という名前のオブジェクトを定義するには、次のいずれかのステートメントを記述します。
:_ a=配列(10:0,0,0,0,0,0,0,0,0,0,0) :_ a=0,0,0,0,0,0,0,0,0,0 :_a=0 0 0 0 0 0 0 0 0 0 0 :_ a=int(10)*0 :_ a=10:
Speakeasy はベクトル指向の言語です。構造化された引数をスカラー関数に与えると、結果は通常、引数と同じ構造を持つオブジェクトになり、各要素は引数の対応する要素に適用された関数の結果です。上記の例では、関数gridによって生成された配列 ( xと呼ぶ) に適用された関数sinの結果は、配列answerです。この配列の要素answer (i) は、1 からnoels (x) ( xの要素数)までの各 i に対してsin ( x (i)) に等しくなります。つまり、次のステートメントは、
:_ a=sin(グリッド(-π π π/32))
は次のプログラムの一部と同等です。
x=grid(-pi pi pi/32) $ は、-piからpiまでの実数の配列をpi/32ずつ生成します。 for i = 1,noels(x) $ はxの要素をループします a(i) = sin(x(i)) $ はaのi番目の要素を評価する。 次に i $ ループインデックスをインクリメントします
ベクトル 指向のステートメントは、そのようなループ用のプログラムを記述する必要がなく、それらよりもはるかに高速です。
作業領域とオブジェクト
セッションの最初のステートメントによって、ユーザーは「名前付きストレージ」(または「作業領域」、または「アロケータ」)のサイズを定義できます。このサイズは、セッションの開始時に一度だけ割り当てられます。この固定サイズの作業領域内で、Speakeasy プロセッサは必要に応じて作業オブジェクトを動的に作成および破棄します。ユーザーが調整可能な[17]ガベージ コレクション メカニズムが提供され、作業領域内の空きブロックのサイズを最大化し、定義されたオブジェクトをアロケータの下限または上限にパックします。ユーザーはいつでも、作業領域の使用済みまたは残りのスペースについて問い合わせることができます。
:_ SIZE 100M $ 最初のステートメント: 作業領域は100MBになります :_ SIZE $は現在のセッションの作業領域のサイズを返します :_ SPACELEFT $は現在使用されていないデータストレージスペースの量を返します :_ SPACENOW $ は現在使用されているデータストレージスペースの量を返します :_ SPACEPEAK $は、現在のセッションで使用されているデータストレージスペースの最大量を返します。
生のオブジェクト指向
妥当な適合性と互換性の制約の範囲内で、Speakeasy オブジェクトは同じ代数構文を使用して操作できます。
この観点から、「名前付きストレージ」に保持されるデータの動的で構造化された性質を考慮すると、Speakeasy は最初から非常に生々しい形式の演算子オーバーロードと、後に「オブジェクト指向プログラミング」と呼ばれるようになったいくつかの機能に対する実用的なアプローチを実装していたと言えますが、その方向にさらに進化することはありませんでした。
オブジェクトファミリー
Speakeasy は、スカラー、配列 (最大 15 次元)、行列、セット、時系列など、データ オブジェクトの事前定義された「ファミリ」を多数提供します。
要素データは、実数 (8 バイト)、複素数 (2x8 バイト)、文字リテラル、または名前リテラル (行列要素は実数または複素数にできますが、時系列値は実数のみにできます) のいずれかになります。
欠損値
時系列処理では、5 種類の欠損値が提供されます。欠損値は、NA (利用不可)、NC (計算不可)、ND (未定義) で示されます。また、NB と NE は意味が事前に決定されておらず、linkules 開発者が自由に選択できます。欠損値は、内部的には特定の (非常に小さい) 数値で表され、コードとして機能します。
すべての時系列操作では、欠損値の存在が考慮され、結果に適切に反映されます。
特定の設定に応じて、欠損値は上記の表記、疑問符記号、または空白(表で便利)で表すことができます。入力で使用する場合、疑問符は NA 欠損値として解釈されます。
:_ b=時系列(1,2,3,4:2010 1 4) :_ バ B (4 つのコンポーネントを持つ時系列) 1 2 3 4 :_ b(2010 3) = ? :_ showmval qmark :_ バ B (4 つのコンポーネントを持つ時系列) 1 2 ? 4 :_ 1/b 1/B (4 つのコンポーネントを持つ時系列) 1 .5 ? .25 :_ showmval 説明 :_ バ B (4 つのコンポーネントを持つ時系列) 1 2 該当なし 4 :_ 1/b 1/B (4 つのコンポーネントを持つ時系列) 1 .5 NC .25
時系列以外の数値オブジェクトでは、「欠損値」という概念は意味をなさず、それらの数値演算では、「欠損値コード」に対応しているかどうかに関係なく、実際の数値が使用されます(ただし、「欠損値コード」を入力してそのように表示することはできます)。
:_ 1+? 1+? = 1.00 :_ 1/? 1/? = 5.3033E36 :_ 1*? 1*? = ?
他のコンテキストでは、疑問符は異なる意味を持つ場合があることに注意してください。たとえば、コマンド ラインの最初の文字 (場合によっては唯一の文字) として使用される場合、長いエラー メッセージ (「+」記号で終わる) のさらに詳しい部分を表示する要求を意味します。
:_ a=配列(10000,10000:) ARRAY(10000,10000:) 行 "A=ARRAY(10000,10000:)" データが多すぎます。+ :_? アロケータのサイズは少なくとも 859387 キロバイトである必要があります。+ :_? 不要になったデータを削除するにはFREEを使用してください または 後で再起動するためにアロケータを保存するには、CHECKPOINT を使用します。+ :_? 現在定義されている名前を確認するには、NAMES を使用します。 SIZE と RESTORE を使用して、より大きなアロケータで再起動します。 :_? これ以上の情報はありません。
論理値
論理値、関係演算子 ( Fortran構文を使用できます)、および論理式に対して、ある程度のサポートが提供されます。
論理値は実際には数値として保存されます。0 は偽を意味し、ゼロ以外 (出力では 1) は真を意味します。
:_ a = 1 2 3 4 5 :_ b = 1 3 2 5 4 :_ ア>バ A>B (5 コンポーネント配列) 0 0 1 0 1 :_ a<=b A<=B (5 コンポーネント配列) 1 1 0 1 0 :_ 等しい A.EQ.B (5 コンポーネント配列) 1 0 0 0 0 :_ logical(2) $ これは論理値の表示方法を変更します :_ a>b; a<=b; a と等しい b A>B (5 コンポーネント配列) FFFTFT A<=B (5 コンポーネント配列) TTFTF A.EQ.B (5 コンポーネント配列) うわー
プログラミング
「プログラム」、「サブルーチン」、「関数」などの特別なオブジェクト (まとめてプロシージャと呼ばれます) を定義して、操作を自動化することができます。 1 つのコマンドで複数の命令を実行する別の方法は、それらを使用ファイルに保存し、USE コマンドを使用してプロセッサに読み取らせることです。
使用ファイル
use ファイルを「USE する」ことは、最小限の入力で複数の命令を実行する最も簡単な方法です。(この操作は、他のスクリプト言語でファイルを「ソースする」操作とほぼ同等です。)
使用ファイルは標準コンソールの代替入力ソースであり、ユーザーがキーボードで入力できるすべてのコマンドを含めることができます (したがって、複数行のフロー制御構造は許可されません)。プロセッサは使用ファイルを 1 行ずつ読み取って実行します。
使用ファイルの実行は連結できますが、ネストすることはできません。つまり、呼び出された使用ファイルの完了時に制御は呼び出し元に戻りません。
手順
完全なプログラミング機能は、「プロシージャ」を使用して実現されます。これらは実際には Speakeasy オブジェクトであり、実行するには作業領域で定義する必要があります。必要に応じてプロシージャを外部ストレージから自動的に取得して読み込むためのオプションが用意されています。
プロシージャには、Speakeasy プログラミング言語で使用可能な実行フロー制御構造のいずれかを含めることができます。
プログラム
プログラムは、単にその名前を呼び出すか、EXECUTE コマンドの引数として使用して実行できます。後者の場合、追加の引数で実行を開始するラベルを識別できます。Speakeasy プログラムは、参照されているのと同じスコープ「レベル」で実行されるという点で他の手順とは異なります。そのため、そのレベルで定義されているすべてのオブジェクトを完全に表示でき、実行中に作成されたすべてのオブジェクトは、後で使用するためにそこに残されます。そのため、引数リストは必要ありません。
サブルーチンと関数
サブルーチンと関数は新しいスコープ レベルで実行され、終了すると削除されます。呼び出しスコープ レベルとの通信は、引数リストを通じて実行されます (双方向)。これにより、データの隠蔽が実装されます。つまり、サブルーチンまたは関数内で作成されたオブジェクトは、他のサブルーチンや関数からは見えず、引数リストを通じてのみ表示されます。
グローバル レベルは、プロシージャ自体など、任意のプロシージャ内から表示する必要があるオブジェクトを格納するために使用できます。
関数はサブルーチンとは異なり、関数値も返します。関数への参照は、より複雑なステートメントの一部になる可能性があり、ステートメントを評価するときに返された関数値に置き換えられます。
ある意味では、Speakeasy サブルーチンと関数は、同じ名前の Fortran プロシージャと非常によく似ています。
フロー制御
条件付き実行には IF-THEN-ELSE 構造が使用でき、ループには 2 つの形式の FOR-NEXT 構造が提供されます。
ジャンプには「GO TOラベル」ステートメントが用意されており、Fortran のような計算型 GO TO ステートメントは複数分岐に使用できます。
いくつかのオプションを備えた ON ERROR メカニズムは、エラー処理の手段を提供します。
リンクルライティング
リンクルは、通常 Fortran (または、サポートされていない C) で記述された関数です。Mortran または Cマクロと API ライブラリの助けを借りて、リンクルは Speakeasy ワークエリアとインターフェイスし、任意の Speakeasy オブジェクトを取得、定義、操作できます。
Speakeasy の操作語彙のほとんどは、linkules を介して実装されます。それらは、共有オブジェクト (unix) または dll (windows) として適切にコンパイルされていれば、コア エンジンに静的にリンクすることも、必要に応じて動的にロードすることもできます。
注記
- ^ サポートされているプラットフォーム
- ^ Rubinsteyn, Alex (2014). 配列指向 Python プログラムの実行時コンパイル(PDF) (Ph.D.). ニューヨーク大学。APL
は Speakeasy に直接影響を与えました。
- ^ 「2004 年 3 月 8 日と 9 日にカリフォルニア州サンタバーバラで Thomas Haigh が実施した CLEVE MOLER へのインタビュー」(PDF)。コンピュータ歴史博物館。2016年12 月 6 日閲覧。
つまり、APL、Speakeasy、LINPACK、EISPACK、および PL0 は MATLAB の前身でした。
- ^ 「スピークイージー入門 - 非公式レポート
- ^ ホール、ジャック・M.; ヒューレット、リチャード・G.; ハリス、ルース・R. (1997)。アルゴンヌ国立研究所、1946-96。イリノイ大学出版局。p. 482。ISBN 978-0-252-02341-5。
- ^ 「名前付きストレージ: 操作ルーチンによる動的ストレージ割り当てスキーム」、AEC 研究開発レポート - 第 7021 巻 ANL (シリーズ) - Stanley Cohen、米国原子力委員会物理学部門、アルゴンヌ国立研究所、1965 年。
- ^ 「Speakeasy - 進化的システム」、S. Cohen、ACM SIGPLAN 超高水準言語シンポジウム議事録 (1974 年 3 月)
- ^ Cohen, Stanley (1971). 「Delphi-speakeasy システム。I. 全体説明」。Computer Physics Communications。2 ( 1): 1–10。Bibcode :1971CoPhC... 2 ....1C。doi :10.1016/0010-4655(71)90008-7。
- ^ 「Mortran を使用して Fortran プログラムをあるマシンから別のマシンに変換する」Steven C. Pieper、アルゴンヌ国立研究所、1976 年
- ^ 「メインフレームを使いこなす」HARDCOPY 1984年10月、189ページ。
- ^ 「Argonne Computing Newsletter: SPEAKEASY」1988年、2526ページ。
{{cite web}}:欠落または空|url=(ヘルプ) - ^ 「Speakeasy linkules - プラグ互換ソフトウェア」ACM - 1977 年年次会議の議事録
- ^コーエン、スタン ( 1976)。スピークイージー:コンピュータへの窓。ACM プレス。pp. 1039–1047。doi :10.1145/ 1499799.1499944。ISBN 978-1-4503-7917-5. S2CID 11997344。
- ^ 「SPEAKEASY/FEDEASY による計量経済モデル」、James M. Condie、John W. Davison、1975 年
- ^ レンフロ、チャールズ・G. (2004)。計算計量経済学:定量経済学の発展への影響。IOS プレス。pp. 46–47。ISBN 978-1-58603-426-9。
- ^ レンフロ、チャールズ・G. (2004)。計算計量経済学:定量経済学の発展への影響。IOS プレス。p. 373。ISBN 978-1-58603-426-9。
- ^ ユーザーは、2 つのオブジェクト間で作成されるオブジェクトの数に基づいて、ガベージ コレクションが発生する頻度を決定できます。この機能 (SLOSH コマンド) は、実際にはリンクルのデバッグを目的としています。
外部リンク
- 公式サイト(Wayback Machine経由)
- Speakasy Computing Corporation のYouTubeチャンネル
- Econometric Modeling & Computing Corporation の Web サイト。( Wayback Machine経由)
- スタン・コーエンとの興味深い会話。

