Frequently used words (click to add to your profile)

javaandroidc++linuxc#objective-ccocoa誰得qtrubypythonwindowsphpgamebathyscaphegui翻訳comegattwitterframeworkbtronvb.net計画中(planning stage)testdomarduinodirectxpreviewerゲームエンジン

最近の作業部屋活動履歴

2021-01-08
2021-01-03
2021-01-02

最近のWikiの更新 (Recent Changes)

2021-01-08
2021-01-02
2020-12-23
2020-12-22
2020-12-20

Wikiガイド(Guide)

サイドバー (Side Bar)

Euphoria のハック準備 (1)

2020年11月01日 : 草稿

まえがき

少し書くのに手間がかかるものであるため、ゆっくり加筆修正してきます。 これを終えると、ソースコードを解析して書き換えたりしている段階へ入ることになります。

皆さんが読みたいものは、euphoriaで新しいソフトを作るより、こらちのほうでしょう。 実環境で試行錯誤すればいいたいとはわかると思いますが、わかりづらいところは質問してくださいませ。

ここでビルドできるもの

  • インタプリタ : exw.exe, exwc.exe
  • バックエンド : backenw.exe
  • トランスレータ (トランスパイラ) : ecw.exe
  • トランスレータ用ライブラリ : ecw.lib

ハック、その前に。

この作業は初回のみ行います。 ハック専用のマシンの用意、または c:\euphoira ディレクトリのバックアップコピーを作成してください。

1. エクスプローラで c:\ を開き EUPHORIA をクリックします。

2. Ctrl+C を押した後に Ctrl+V を押します。コピーが始まります。

3. コピー完了後に「コピー ~ EUPHORIA」 が作成されますのでクリックして F2 を押してリネームを行います。

4. 「コピー ~ EUPHORIA」の名前を 「EUPHORIA3_ORIGNAL」 へ変更します。

5. これでバックアップができました。標準環境とハック環境を切り替えるにはフォルダの名称交換を行います。

おさらい

すでにドキュメントをお読みになっているかたでしたらわかるかと思いますが。 Euphoria プログラムの実行・配布方法についておさらいしておきます。

1. ソースコードでの配布 (インタプリタ&ソースコード)

2. 中間コードファイルでの配布 (中間コード&バックエンド)

3. 中間コードにバックエンドを連結して実行可能形式にしたものを配布 (シュラウド)

4. トランスレータで C コードへ変換してコンパイルしたものを配布 (トランスレータ)

このうち、ハックで使うのは 1 と 4 のみです。2. と 3. は C コンパイラのインストールされていない環境でのみ扱うものです。

ハックの大まかな流れ

1. euphoria インタプリタ本体 (ライブラリなども対象) のソースコードの解析と書き換え (機能追加や検証作業など)

2. 書き換えた euphoria インタプリタのソースコードを euphria インタプリタ (exwc) で実行して 3. エラー修正とデバッグをして 2. へ戻る。

4. 納得いくものができたら Euphoria → C トランスレータで変換、コンパイルして実行可能ファイルを作成。

5. その実行ファイルのテストを行う。

ソースコード版 (eu.ex) の Euphoria インタプリタを動かす方法

なにをいいたいのかわからないかもしれませんが。 基本的に Euphoria の処理系は Euphoria で記述されています。 つまり、自律記述型言語であるため Euphoria インタプリタで euphoria インタプリタのソースコードを動かすことができます。

詳しいことを言うと、

  • Euphoira 純正インタプリタのハック (euphoria 本体のソースコード : *.ex, *.e)

Euphoria インタプリタ (exw, exwc...など) を使い euphoria 本体のソースコード (eu.ex, ec.ex, bind.ex) を動作させます。

利点として Euphoria → C トランスレータは使いませんので C コンパイラは使わなくていいです。また、ソースコードを変更したらインタプリタで即実行で試せますしトレースデバッガも使えます。エラーが発生したらすぐにテキストエディタで修正して即実行できます。

欠点として非常に動作速度が遅いことです。なので十分早いマシンを用意するか作業手順を見直す必要があります。また、Euphoria インタプリタがないと実行できないことも欠点のひとつです。この性格上、本番環境ではなく試行錯誤向きです。

  • Euphoria → C トランスレータでのハック

トランスレータを使いインタプリタの実行可能ファイルを直接生成します。 利点として動作速度は速く扱いは手軽です。

欠点はインタプリタのビルドに 35 秒以上 (Acer ASPIRE one で確認) くらいかかります。これでも十分早いのですがビルド回数が増えるたびに待機時間が増えるのも頭痛です。らに、Euphoira 標準のトレースデバッガが使えないのもかなり痛い欠点です。この性格上、試行錯誤ではなく本番環境向きです。

さて、ためしにインタプリタでインタプリタのソースコードを使ってtaskwireを動かしてみましょう。

exwc eu.ex ..\DEMO\WIN32\taskwire.exw

まったく意味はありませんが

exwc eu.ex eu.ex eu.ex eu.ex eu.ex eu.ex ..\DEMO\WIN32\taskwire.exw

でも動くと思います (とんでもなく起動時間がかかります)。

Euphoria のビルド方法 (Windows/DOS - OpenWatcom C++ 1.9)

トランスレータを使った実行可能形式のインタプリタなどを作成する方法です。

正規の手順 1. コマンドプロンプトを開き、 cd \euphoria\source と入力します。

2. build.bat と入力してエンターキーを押します。

...でいけるはずなんですが (readme.txt 参照)...。

1. build.bat に問題があり、正常にビルドできません。 2. be_runtime.c に問題があるため、正常にビルドが通りません。

build.bat の問題

とりあえず、 echo off をはずして処理の確認をします。 これでは動きません。前提条件として DJGPP, LCC-Win32 のインストールもされていることが条件で記述されています。

ですから、暫定対策としてbuild.bat を参考に個別に動かしていきます。

  • imakew.bat - インタプリタのビルド
  • bmakew.bat - バックエンドのビルド
  • watlibw.bat - ライブラリのビルド
  • build.bat - トランスレータのビルド (build.bat を参照して実行してください)

be_runtime.c の修正

imakew.bat あるいは watlibw.bat を起動すると、このようなエラーとなります。 ソースコード (be_runtime.c) のエラー発生行より前を眺めていると、 プロプロセッサ命令 (defined) に問題があるようです。

be_runtime.c(450): Error! E1071: Type of parameter 1 does not agree with previous definition

be_runtime.c(450): Note! N2003: source conversion type is 'struct exception *'

be_runtime.c(450): Note! N2004: target conversion type is 'struct _exception *'

be_runtime.c(450): Note! N2002: 'matherr' defined in: C:\WATCOM\H\math.h(206)

Error! ファイル'be_runtime.obj'が見つかりません

あまりきれいな方法でありませんがここは動くことを優先して be_runtime.c を修正します。 (本来なら、OpenEuphoria のソースコードを参照してプリプロセッサの定義条件を正しい書き直すのですが)

1. be_runtime.c のバックアップを作成します (be_runtime_orignal.c)。

2. テキストエディタで be_runtime.c の 443, 445 ~ 447, 449, 479 行を削除します。

3. ビルドしたいモジュールのバッチファイルを実行します。

ビルド後について

このままではハック版のインタプリタは使えません。 build.bat を参考に処理をしてください。

引き続き...。

これでハック方法についての基本的な外観は解説できました。続けてハック関連のドキュメントは source ディレクトリにあります。機械翻訳を使いながら目を通しておくといいでしょう。

  • eu.ex
  • overview.doc
  • source.doc
  • translator.doc
  • readme.txt

ビルド用のバッチファイルについては...また別の機会とします。

次回予告

いよいよ、ソースコードを読んでいきます。その前に grep の使いかたは復習しておいてください。 次回からはひたすら、あっちこっちを検索することにして資料を書いていくことになります。