RTL の再コンパイル - 可能な場合、その方法は? 質問する

RTL の再コンパイル - 可能な場合、その方法は? 質問する

Delphi ランタイム ライブラリ (RTL) の裏側などを変更する実験をしてみたいのですsystem.pasが、それは可能でしょうか?

私は、「はい、ただし、アセンブラ ウィザード用のカスタム .obj ファイルは、公式の Delphi ソースでは配布されていないため、提供する必要があります」のようなチャレンジが大好きです。 問題ありません。ただ知りたいだけです。

この実験は Delphi 7 で行いたいのですが、他のバージョンの内部情報でも構いません。これは、石器時代から Delphi に取り組んできた会社に所属していることの特典の 1 つです。

(私はいつも、これは RTFM の質問の 1 つであり、答えは明確に「いいえ!」であると考えていましたが、何らかの理由で Google はそれを確認しませんでした。)

ベストアンサー1

他のユニットと同様に、RTLを再コンパイルできます。

System.pas の場合は、コマンド ライン コンパイラを使用する必要があります。

たとえば、動作するバッチ ファイルの内容は次のとおりです (十分に文書化されていないコマンド ライン スイッチがいくつかあります)。

del *.dcu /s
"c:\program files\borland\delphi7\bin\dcc32.exe" -O+ -Q -M -Y -Z -$D+ System.pas 

これにより、System.pas と SysInit.pas (どちらも最下位レベルの RTL ファイル) が再コンパイルされます。

ただし、再作成した dcu ファイルを使用するには、更新された dcu ファイルを含むフォルダーを IDE の最初の位置に配置する必要があります。たとえば、Delphi 7 では、オプション / 環境オプション / ライブラリであり、フォルダーを「ライブラリ パス」フィールドと「参照パス」フィールドの両方の最初に配置します。

また、Delphi インストール ディレクトリ内の元の .dcu ファイルを削除することも価値があるかもしれません。

ただし、ユニットの「インターフェース」部分は変更しないでください。変更しないと、RTL の他の変更されていないユニット (またはサードパーティのコンポーネント) とのコンパイルで問題が発生します。速度などのために、「実装」部分を変更したり、修正を適用したり、一部を書き直したりすることはできますが、リンク エラーを回避するために「インターフェース」部分は変更しないでください。

変更する元の .pas ファイルと .dcu ファイルを必ずバックアップしてください。また、RTL の変更によってリグレッションが発生しないことを確認できるように、自動コンパイル テストを実行することをお勧めします。

私たちはこのようなRTL再コンパイルを強化された実行時間ライブラリ低レベルの RTL 関数 (主に System.pas と SysUtils.pas) の速度を向上します。Delphi 7 および 2007 用に設計されています。より新しい Delphi バージョンでも、同じ原理を使用できます。

おすすめ記事