第一部 - 言語主要部

1. はじめに

 
Euphoria(ゆーふぉりあ)はプログラミング言語であり従来の言語に対して次のような優位点があります:

  • 非常にシンプルで、柔軟、強力な言語仕様であり習得も使用も容易です。

  • 動的ストレージアロケーション機構の採用。これにより変数の伸縮においてプログラマがメモリー領域の割り当ておよび開放に関して心配する必要はありません。任意の大きさのオブジェクトをEuphoriaのシーケンス(配列)の要素に割り当てることができます。

  • 高性能、最高水準のインタプリタであり比較するとPerlやPythonのような従来のインタプリタより30倍早いです。

  • Euphoria → C言語ソース最適化トランスレータにより、 開発したプログラムの動作速度をより早くすることができ、既存のインタプリタと比較すると2〜5倍高速です。

  • 広範囲の実行時チェック: 範囲外添字、未初期化変数、ライブラリルーチンにおける不正な引数値、変数に不正に割り当てられた値およびその他いろいろ。そこには不可解なマシン例外はありません。 -- あなたは常にプログラム実行時に発生した様々な問題の解説を英語で得ることができ、コールスタックのトレースバックおよび全ての変数の値をダンプすることができます。それによりプログラムを迅速にデバッグでき、簡単に完全なものにできます。

  • 機能はハードウェアの下層から完全に隠蔽されています。プログラムは文字列長、基本的なビットレベルで表現される値、バイトオーダーを意識する必要はありません。

  • フルスクリーンソースデバッガとプロファイラの実行、さらにフルスクリーンマルチファイルエディタが搭載されています。 カラーモニターにおいて、エディタはEuphoriaのプログラムを注釈コメント、 予約語、組み込み関数、 文字列、および括弧の入れ子レベルといったものを複数の色で分けて表示します。さらにオプションにより構文の自動補完を行い、型付けを守ることができる上に文法エラーを減らすことができます。 このエディタはEuphoriaで記述されており、 またソースコードは利用に関する制限事項を設けないで提供されています。これにより自由に変更でき、機能追加や再配布を好きなように行うことができます。

  • Euphoriaのプログラムは Linux, FreeBSD, 32-bit Windows, および様々なDOS 環境下で動作する上に、640KBの壁というメモリー利用制限はありません。あなたが作成したプログラムにおいてあなたのコンピューターに搭載されている全てのマルチメガイバイト級のメモリーを使用でき、さらにプログラムにおいて搭載メモリー以上のメモリーが必要になった場合は自動的にスワップファイルを作成して使用します。

  • あなたが書いたプログラムから単一、スタンドアロンの.exeファイルを作成できます。

  • Euphoriaのルーチンは一般的で自然なものです。 後述のサンプルプログラムでは一つルーチンで全てのデータ型をソートできます -- 整数、浮動点小数、文字列など。 Euphoriaは"オブジェクト指向"言語ではありませんが、 これらの言語の多くの特徴をより単純な方法で実現しています。

  • Euphoriaは完全にフリーなオープンソースソフトウェアです。



1.1 サンプルプログラム

下記は完全なEuphoriaのプログラムの一例です。

 sequence list, sorted_list

 function merge_sort(sequence x)
 -- 再帰的なマージソートを用いて x 内の順位を上げて再配置する。
     integer n, mid
     sequence merged, a, b

     n = length(x)
     if n = 0 or n = 1 then
         return x  -- 通常の場合
     end if

     mid = floor(n/2)
     a = merge_sort(x[1..mid])       -- xの最初の半分をソートする。
     b = merge_sort(x[mid+1..n])     -- xの次の半分をソートする。

     -- 二つのソート済みの半分を一つへマージする。
     merged = {}
     while length(a) > 0 and length(b) > 0 do
         if compare(a[1], b[1]) < 0 then
             merged = append(merged, a[1])
             a = a[2..length(a)]
         else
             merged = append(merged, b[1])
             b = b[2..length(b)]
         end if
     end while
     return merged & a & b  -- 残りのデータを merged に付け加える。
 end function

 procedure print_sorted_list()
 -- list から sorted_list を生成する。
     list = {9, 10, 3, 1, 4, 5, 8, 7, 6, 2}
     sorted_list = merge_sort(list)
     ? sorted_list
 end procedure

 print_sorted_list()     -- この命令文はプログラムを開始するためのものです。

上記の一例は4つに分かれた命令文を含み、命令文ごとに処理されます。一つ目は変数が二つ宣言されています: list と sorted_list は シーケンス(可変長配列)です。 二つ目は merge_sort() が関数として定義されています。 三つ目は print_sorted_list() が手続きとして定義されています。 最後の命令文は手続きである print_sorted_list() を呼び出します。

プログラムは次のような結果を出力します:
    {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}.

merge_sort()は {1.5, -9, 1e6, 100} または {"oranges", "apples", "bananas"} に簡単なソートを行います。

この例はeuphoria\tutorial\example.exに格納されています。これは、Euphoriaのソートとしては高速な方法ではありません。euphoria\demoディレクトリへ移動して "ex allsorts" と入力すると、ソート対象のオブジェクトの個数を加算しながら、様々なソートアルゴリズムの処理速度比較を見ることができます。Euphoriaプログラミングにおけるクイックチュートリアルに関してはeuphoria\demo\bench\filesort.exを参照してください。



1.2 インストール方法

Euphoria をインストールする前に、最初にinstall.docをお読みください。インストール手順はハードディスクに"euphoria"ディレクトリを作成してeuphoria関連ファイルのコピーを行い、autoexec.batファイルにeuphoria\bin の検索パスとEuphoriaのディレクトリを設定すために環境変数EUDIRを追加します。

インストール後のeuphoriaディレクトリはこのようになります:

\euphoria
readme.doc
readme.htm
License.txt
\bin
ex.exe および exw.exe, exwc.exe はインタプリタです。 ec.exe および ecw.exe はトランスレータです。あるいはLinux/FreeBSDでは、exu はインタプリタであり ecu はトランスレータです。そのほかに ed.bat(Euphoria標準エディタ) や guru.bat(Euphoriaドキュメント検索システム) などのユーティリティプログラムなどがあります。
\include
標準インクルードファイル 例: graphics.e
\source
Euphoria言語システムの完全なソースコード(インタプリタ, トランスレータ, バインダ)
\doc
refman.doc, library.doc, およびいくつかのプレインテキスト形式のドキュメントファイル
\html
docディレクトリ内の各種.docファイルのhtml版
\tutorial
あなたがEuphoriaを習得するさいに役立つ小規模のチュートリアルプログラム
\demo
すべてのプラットホームで実行できる汎用デモプログラム
\dos32
DOS32 専用デモプログラム (オプション)
\win32
WIN32 専用デモプログラム (オプション)
\linux
Linux/FreeBSD 専用デモプログラム (オプション)
\langwar
プログラミング言語戦争(language war)ゲーム (ピクセルグラフィック版はDOS用ですが、テキスト版はLinux/FreeBSD用です)
\bench
ベンチマークプログラム

Linuxサブディレクトリは DOS/Windowsディストリビュージョンには含まれておらず、dos32 および win32 サブディレクトリはLinux/FreeBSDディストリビュージョンには含まれていません。このマニュアルでは、ディレクトリ名を表すのにバックスラッシュ(\)を使用しています。Linux/FreeBSDの利用者はフォワードスラッシュ(/)へ読み替えてください。



1.3 プログラムの実行方法

Euphoriaのプログラムはex, exwまたはexuの後に続けてEuphoriaで記述されたソースのメインファイル名を入力することによって実行されます。この行はコマンドラインとして知られており追加の語句(引数として知られています)を入力できます。プログラムで組み込み関数command_line()を呼び出すことによりコマンドラインの入力内容を読み取ることができます。DOS32版のEuphoriaインタプリタはex.exeと呼ばれています。WIN32ウィンドウ版はexw.exeと呼ばれています。WIN32コンソール版はexwc.exeと呼ばれています。Linux/FreeBSD版はexuと呼ばれています。慣例として、主にEuphoriaのファイルは拡張子として .ex, .exw または .exuを持ちます。その他のEuphoriaのファイルとして、末尾が .e または、稀に .ew.eu の場合は大規模プログラムからインクルードされることを意味します。入力文字数を減らすために.exを省略できexが自動的に拡張子を補完します。なお、exwまたはexwc.exwを補完し、exu.exuを補完します。なお規定値の拡張子でファイル見つからない場合は同様に、その他の可能性としてありうる拡張子での検索を試みます。もしファイルが現在のディレクトリで見つからない場合、パスを検索します(可能性の高い拡張子、またはその他のものを使用します)。次の例のように、Euphoriaのプログラム実行時に標準入力および標準出力をリダイレクトすることができます:

        ex filesort.ex < raw.txt > sorted.txt
または簡潔に、
        ex filesort < raw.txt > sorted.txt

他のコンパイラやインタプリタとは違い、これら ex, exw, exwc または exu には特殊なコマンドラインオプションはありません。ファイル名だけを除いた場合および未入力のときは、プロンプトでファイル名の入力を求められます。

Windows/DOS環境においてよく使用するプログラムのために小さな .bat (バッチ)ファイルを作成したい場合があり、おそらくmyprog.batと呼ばれるもので、それは次のような二つの命令文を含みます。

        @echo off
        ex myprog.ex %1 %2 %3
最初の命令文はスクリーンに対してコマンドのエコー出力を無効にします。次の構文は最大3つまでのコマンドライン引数をex myprog.exに与えて実行します。なお、引数を読む方法の例はcommand_line()を参照してください。もしプログラムの引数をより多く必要とするならば、%4 %5 などを追加する必要があります。.batファイルを作成しておくと常にex(またはexw, exwc)に関する些細な不便から開放されます。すなわち、こう入力することができます:
        myprog
実際は:
        ex myprog
残念ですが.batファイル使用時において、標準出入力のリダイレクトがDOSでは許されていません。

Linux/FreeBSD環境において、Euphoriaインタプリタのパスをあなたのメインプログラムファイルの最初の行に記述することができます。すなわち、もしあなたのプログラムが foo.exu だとすると:

        #!/home/rob/euphoria/bin/exu
        
        procedure foo()
            ? 2+2
        end procedure

        foo()
ファイルを実行可能にしたとき:
        chmod +x foo.exu
このように入力できます:
        foo.exu 
これによりプログラムを簡単に実行できます。あなたはプログラムの名前を "foo" といった単純で短いものにすることができます。Euphoriaでは!#(Shebang 構文) が最初の一行目にあるときは無視します。気をつけてほしいのは最初の行(Shebang 構文)の末尾の改行コードがLinux/FreeBSD流(\n)ではなく、DOS/Windows流(\r\n)である場合はLinux/FreeBSDのシェルプログラムは解釈を正しく行うことができず理解しづらいエラーメッセージを出力して、結果としてユーザに混乱を引き起こするかもしれません。もしshorud(しゅらうど)を施したファイルを実行するならば、exuにではなくbackenduに対してパスを与える必要があります。

bind.bat (DOS32) かbindw.bat (WIN32) またはbindu (Linux/FreeBSD) を実行することによって、あなたのEuphoriaプログラムとex.exe, exw.exe, exwc.exe または exu をバインディングをした(ひとつにまとめた)スタンドアロンの実行ファイルを作成できます(DOS/Windowsでは.exe ファイル)。スタンドアロン.exeファイルは標準出入力のリダイレクトができます。バインディング(Binding)は1.5 プログラムの配布方法において詳しい議論があります。

Euphoria → C言語トランスレータを使用しても、スタンドアロン .exe ファイルを作成でき、通常はバインディングされたプログラムより非常に高速に動作します。

exu またはex.exe およびexw.exe, exwc.exe といったファイルは通常euphoria\bin ディレクトリ にあり、これらには検索パスを通す必要があります。環境変数 EUDIR はメインの Euphoria ディレクトリを設定しなければなりません。たとえばc:\euphoria といったディレクトリです。


1.3.1 Windows上での実行方法

Windows環境またはWindowsから実行したDOSシェル(コマンドプロンプト)からプログラムを直接的に実行することができます。 なお、.exファイルをex.exeに、.exwファイルをexw.exeに"関連付ける"ことによって.exまたは.exwをダブルクリックのみで簡単に実行できます。Windows環境では(マイ)コンピュータ / 表示 / オプション / ファイルタイプによって.ex, .exwファイルの拡張子の関連付けを新規に行うことができます(訳注:Windowsのバージョンによって設定方法が異なります。詳しくはWindows添付のヘルプファイルを参照してください)。また、複数のEuphoriaプログラムを、それぞれ異なる独立したウィンドウで実行可能です(マルチタスク)。さらに、あなたのプログラムを.exeファイルへ変換した場合は単純にダブルクリックするだけで実行できます。


1.3.2 スワップファイルの使用方法

もしLinux/WindowsまたはWindows(Windowsから実行したDOSシェル(コマンドプロンプトを含む)環境においてEuphoriaのプログラムを実行すると、プログラムの実行で物理メモリーが不足したときに"仮想メモリー"の使用を開始します。オペレーティングシステムは自動的に最後に使用したコードとデータをスワップアウトすることによって仮想メモリーを提供します。Windowsのスワップサイズの大きさを変更するにはコントロールパネル / 386 エンハンスドモード / "仮想メモリー"をクリックしてください(訳注:Windowsのバージョンによって設定方法が異なりますので詳しくはWindows添付のヘルプファイルを参照してください)。 OS/2環境においては "DPMI_MEMORY_LIMIT" を調整するには、仮想DOSマシンのアイコン / "DOS設定" をクリックすることによって、より多くの拡張メモリーをあなたのプログラムに割り当てることができます。

純粋なDOS環境において、Windows環境の範囲外であり、システムはスワップファイル機構を持ち合わせておらずex.exe (DOS32) に組み込まれているDOSエクステンダは単一のプログラムだけしか実行できません(シングルタスク)。詳しくはplatform.doc を参照してください。



1.4 プログラムの編集方法

あなたは好きなテキストエディタを使用してEuphoriaのプログラムを編集することができます。さらに、Euphoriaには全てEuphoriaで記述された特別なエディタが付属しています。起動方法: ed の後に完全なファイル名を与えれば編集できます。(拡張子を .ex/.exw/.exu と仮定しません)。あなたはこのエディタを様々な種類のテキストファイルの編集に使用することができます。あなたがEuphoriaのファイルを編集するならば、いくつかの追加機能、たとえば文法によって色分けして反転表示にして読みやすくしたり自動的に命令文を補完して、あなたの作業をより簡単にするために利用できます。

Euphoriaのプログラムを実行しようとしてエラーメッセージを受け取ったときは ex.err を出力して、その(ex.errが存在し続けるか、エラーを解決するまでの)コンパイルまたは実行時の間、ファイル名を入力せずに単にed と入力すると自動的にエラーを含むファイルを読み込み、そのエラーが発生している(訂正すべき)行と桁を指摘して(正確には移動して)、スクリーン最上部にエラーメッセージを表示します。

Windowsではed.bat に対して様々なテキストファイルを関連付けて好きなように編集できます。文法の色分けによる反転表示は拡張子 .ex, .exw, .exu, .e, .ew, .eu, および .pro(プロファイル) のファイルに対して提供されます。

大部分のキーにおいて入力は現在開いているファイルのカーソル位置に入力されます。Escを一回を押すとメニューバーが表示されて特殊コマンドが入力できます。このとき、カーソルキー、Insert/Delete/Home/End/PageUp/PageDownキー は無効にならず常に入力可能です。Linux/FreeBSD において、いくつかのキーは入力ができない仕様となっていますが、代替手段として別のキーマップが割り当てられています。詳細はeuphoria\doc\ed.doc(euphoria\html\ed.htm)に編集コマンドに関する完全な解説があります。 編集中にEsc h(help)を入力すると ed.docを閲覧することができます。

もしエディタの詳細な動作に関して理解または変更する必要がある場合はeuphoria\binにあるed.exを編集することができます(編集結果を失うことがないよう予めバックアップコピーを作成してください)。もしあなたのシステムでedと他のコマンド名が衝突する場合は、単純にeuphoria\bin\ed.batを他のファイル名に変更してください。このエディタは Euphroia で記述されており、それは非常に簡潔であり容易に理解しやすいものです。同じ機能をC言語のようなもので実装しようとすると、はるかにもっと多量の行をコードとして記述する必要があります。

edはシンプルなテキストモードエディタでDOS, Linux, FreeBSD および Windowsコンソール上で動作します。 関連するものとしてディビッド・キューニー(David Cuny)によるDOS およびLinux/FreeBSD向けの ee.exというすばらしいエディタがあります。ee.exRapid Euphoriaのウェブサイトからダウンロードできます。また、Windowsで動作するEuphoria用エディタもいくつかあります。 これらについても同ウェブサイト上にあります。



1.5 プログラムの配布方法

Euphoriaはプログラムの配布において4つの異なる方法が用意されています。

最初の方法は単にあなたのプログラムのユーザにex.exeまたはexw.exeあるいはexuといったEuphoriaのファイルと、あなたのメインファイル(.ex, .exw, または .exu) と実行に必要な様々なインクルードファイル(.e)を一緒に提供する方法です(様々なインクルードファイルは標準ではeuphoria\includeにあります)。もしEuphoriaソースファイルが同一のひとつのディレクトリに一緒に配置され ex.exe, exw.exe または exu が同じディレクトリか検索パスのどこかに配置されているならば、ex(exw)または(exu)の後に続けて主要な.ex, .exw, または .exu ファイルのパスと入力するとあなたのユーザーがプログラムを実行できます。あなたは人々がex(exw)と入力しなくて済むように小さな.batファイルを提供するのもよいでしょう。なお、この方法はあなたのEuphoriaプログラムのソースコードをあなたのユーザと共有したいと決めたときに選択してください。

バインダー(Binder)はあなたに二つの配布方法を提供します。Shroud(シュラウド:包む)はプログラムで必要とするすべての .e ファイルを一つにシュラウディング(Shrouding)した .li ファイルを作成します。バインディング(Binding)は シュラウドを施してひとつにまとめたプログラムと backend.exe, backendw.exe また backendu をひとつにして、単一のスタンドアロン実行ファイル (.exe)を作成します。例として、プログラムが "myprog.ex" と呼ばれているならば、全く同じ動作をする "myprog.exe" を作成できます。なおshrouding および binding に関しての詳しい情報はbind.docを参照してください。

最後の方法は、Euphoria → C言語トランスレータにより、EuphoriaのプログラムをC言語ソースへトランスレート(翻訳または変換) を行い、その後C言語コンパイラでコンパイルを行うと実行(.exe)ファイルを得ることができます。


1.5.1 ライセンス

この製品はフリーかつオープンソースであり、たくさんの人々による善意の寄付によるものです。あなたが開発した、どのようなEuphoriaのプログラムにおいてもロイヤリティフリーで配布することが許可されています。だれでもあなたのプログラムを実行できるようにするためにex.exe, exw.exeおよびexuファイルは自由に配布できます。また、あなたはバックエンドインタプリタ(backend.exe, backendw.exeおよびbackendu)も配布することができます。なお、あなたのプログラムに shroudまたはbindを施した結果として生成されたファイルに関してもロイヤリティフリーになります。

このパッケージのEuphoriaソースファイルを「あるがまま」または「手を加えた」かのいずれかの状態のファイルをあなたのプログラムに添付する場合があるかもしれません(どの規模のプログラムでも euphoria\includeにある 標準インクルードファイルをいくつか必要とする場合があります)。

あなたがEuphroiaを使用してプログラムを開発するさい、人々に次のアドレスを告知していただけたら幸いです: ウェブページはhttp://www.RapidEuphoria.comにありますが、リンクに対して告知や許可および承認も不要です。

アイコンファイル、たとえばeuphoria\bin にあるeuphoria.icoは変更の有無に関係なく配布できます。

高速版のEuphoriaインタプリタバックエンドは ANSI Cで記述されており、多くの異なる開発元のC言語コンパイラでコンパイル可能です。完全なソースコードは euphoria\source にあり、Euphroiaでコーディングされた、代替のバックエンドは execute.eという名称で格納されています。寛大なオープンソースライセンスは個人または営利目的での両方の利用において、他のオープンソースライセンスと違い、あなたによる変更がなくてもオープンソースを作成することを許可しています。

なお、Euphoria → C トランスレータを使用する場合は各種ライブラリやランタイムライブラリなどサードパティによるいくつかの追加の法的制限に同意する必要がある場合があります。

 

2. 言語仕様 に続きます...