クロスプラットフォームの標準 C ライブラリである Cosmopolitan 2.0 の新しいバージョンを紹介します

の発売 プロジェクトの新しいバージョン 「コスモポリタン2.0」は、標準の C ライブラリと、インタープリターや仮想マシンを使用せずにさまざまなオペレーティング システム用のプログラムを配布するために使用できるユニバーサル実行可能ファイル形式を開発しています。

コンテナ ユニバーサル実行可能ファイルを生成する 異なるシステムからの特定のセグメントとヘッダーの組み合わせに依存しています オペレーティング システムを XNUMX つのファイルにまとめ、Unix、Windows、および macOS で使用される複数の異なる形式を組み合わせます。

それを確保するために 単一の実行可能ファイル システム上で実行 Windows と Unix、 Windows PE ファイルをシェル スクリプトとしてエンコードするトリックが使用されます。 これは、トンプソン シェルが「#!」スクリプト マーカーを使用しないという事実を利用しています。

複数のファイルを含む (すべてのリソースを XNUMX つのファイルに結合する) プログラムを作成するために、特別に細工された ZIP アーカイブの形式で実行可能ファイルを生成することがサポートされています。 提案された形式の概要 (例 hello.com アプリケーション):

qemu-x86_64 呼び出しは、追加の移植性のために提供されています また、x86_64 アーキテクチャ用にコンパイルされたコードを、Raspberry Pi ボードや ARM プロセッサを搭載した Apple デバイスなど、x86 以外のプラットフォームで実行できるようにします。 このプロジェクトを使用して、オペレーティング システム (ベア メタル) なしで動作するスタンドアロン アプリケーションを作成することもできます。 このようなアプリケーションでは、ブートローダーが実行可能ファイルに添付され、プログラムは起動可能なオペレーティング システムとして機能します。

コスモポリタン2.0の主な新機能

この新しいバージョンでは、次のことが強調されています。 内部リソースにアクセスするためのスキーマが変更されました デントロ zipファイルから (ファイルを開くとき、zip:.. プレフィックスを使用する代わりに、通常の /zip/… パスが使用されるようになりました)。 同様に、Windows でディスクにアクセスするには、「C:/…」の代わりに「/c/…」のようなパスを使用できます。

新しいAPEローダーが提案されています (Actally Portable Executable) は、ユニバーサル実行可能ファイルの形式を定義します。 新しいブートローダー mmap を使用してプログラムをメモリに割り当てます その場でコンテンツを変更することはもうありません。 必要に応じて、ユニバーサル実行可能ファイルを個々のプラットフォームに関連付けられた通常の実行可能ファイルに変換できます。

Linux では、binfmt_misc カーネル モジュールを使用できます。 APE プログラムを実行します。 binfmt_misc の使用が最速の起動方法であることに注意してください。 の実装 C、C++、Python、および Redbean プログラムで呼び出しデータを使用するための API と、promise.com のユーティリティを提供するだけでなく、OpenBSD プロジェクトによって開発された pledge() および unlock() システム コールの機能任意のプロセスを分離します。

私達はまたそれを見つけることができます Linux では、clock_gettime および gettimeofday 呼び出しのパフォーマンスが向上しました。 vDSO (仮想動的共有オブジェクト) メカニズムの使用により、最大 10 回。これにより、システム コール ハンドラーをユーザー空間に転送し、スイッチ コンテキストをバイパスできます。

ビルドは Landlock Make を使用しますは、GNU Make のエディションであり、より厳密な依存関係チェックと Landlock システム コールを使用してプログラムをシステムの残りの部分から分離し、キャッシュ効率を向上させます。 オプションとして、コンパイラ機能と通常の GNU Make が保持されます。

一方、それはまた、 マルチスレッド用に実装された関数: _spawn() および _join(), これは、さまざまなオペレーティング システムの特定の API に対するユニバーサル バインディングです。 POSIX スレッドのサポートを実装する作業も進行中です。

目立つ他の変更のうち:

  • すべての関数とシステム コールに関する情報を stderr に送信するために、「–ftrace」および「–strace」オプションのサポートが実行可能ファイルに追加されました。
  • Linux 5.9 以降、FreeBSD 8 以降、および OpenBSD と互換性のある closefrom() システム コールのサポートが追加されました。
  • 複素数を扱う数学関数は、Musl ライブラリから移動されました。
  • 多くの数学関数が高速化されました。
  • ネットワーク機能を無効にする nointernet() 関数が提案されています。
  • 文字列を効率的に追加するための新しい関数が追加されました: appendd、appendf、appender、appends、appendw、appendz、kappendf、kvappendf、および vappendf。
  • 昇格された特権で動作するように設計された関数の kprintf() ファミリの保護されたバージョンが追加されました。
  • SSL、SHA、curve25519、および RSA 実装のパフォーマンスが大幅に向上しました。

最後に、それについてもっと知りたい場合は、プロジェクト コードを知っておく必要があります。またはISCライセンスの下で配布されています (MIT/BSD の簡易版)。


コメントを残す

あなたのメールアドレスが公開されることはありません。 必須フィールドには付いています *

*

*

  1. データの責任者:AB Internet Networks 2008 SL
  2. データの目的:SPAMの制御、コメント管理。
  3. 正当化:あなたの同意
  4. データの伝達:法的義務がある場合を除き、データが第三者に伝達されることはありません。
  5. データストレージ:Occentus Networks(EU)がホストするデータベース
  6. 権利:いつでも情報を制限、回復、削除できます。