ホームページ >バックエンド開発 >C++ >Wombat - Crystal から呼び出された Rust の Bat を使用した構文ハイライト

Wombat - Crystal から呼び出された Rust の Bat を使用した構文ハイライト

Barbara Streisand
Barbara Streisandオリジナル
2025-01-16 14:04:58302ブラウズ

Wombat - Syntax Highlighting with Rust

はじめに

この記事では、Rust ベースのコマンドライン ツール bat を Crystal 内のライブラリとして使用する方法について説明します。Crystal には、現在堅牢な構文強調表示ライブラリがありません。 batcat と同様に、ファイルの内容を表示しますが、行番号付け、構文の強調表示、ページネーションなどの拡張機能を提供します。

<code>bat hello.rb</code>

bat をライブラリとして利用すると、この Crystal の制限に対処できます。

bat Rust ライブラリとして

batPrettyPrinter 構造体を使用すると、Rust ライブラリとして使用できます。 しかし、bat は構文強調表示のために複雑な Syntect ライブラリに依存しているため、当初は課題が生じていました。 これを簡素化するために、print_with_writer 関数が PrettyPrinter に追加され、文字列構文を直接強調表示できるようになりました。この追加はプル リクエストを通じて提供され、bat バージョン 0.25.0 以降で利用可能です。

<code class="language-rust">use bat::PrettyPrinter;

// ... code utilizing print_with_writer ...</code>

C ラッパーの作成: bat-c

Rust ライブラリは Crystal から直接呼び出すことができないため、軽量の C ラッパー ライブラリ bat-c が作成されました。これにより、C との相互運用性を備えた Crystal および他の言語から bat にアクセスできるようになります。 bat-c の開発では、作者の Rust と C の専門知識が限られていたため、ChatGPT と Copilot が頻繁に利用されました。 bat-c リポジトリは、https://www.php.cn/link/065982e894fcde21153454b2ea4b2a8a

から入手できます。

bat-c を構築する際の主な考慮事項:

  • メモリ管理: リークを防ぐために、文字列メモリの割り当てと割り当て解除を慎重に処理します。 Rust が割り当てたメモリには、対応する Rust 側の割り当て解除関数が必要です。
  • Cargo.toml 構成: 動的 (Cargo.toml) ライブラリと静的 (cdylib) ライブラリの両方を生成するように staticlib を構成し、使用方法を柔軟にします。 rpath = true では相対パスでライブラリの場所を指定できます。 LTO と codegen-units = 1.
  • を使用したリリース プロファイルの最適化
  • バージョニング: バージョン関数 (bat_c_version) が追加され、簡単にアクセスできるようにバージョンを静的メモリに保存しました。
  • Renovate の統合: Renovate は、ライブラリのバージョン更新を自動化するために実装されました。
  • GitHub アクション: Git タグの作成時に自動リリースがトリガーされます。 cargo publish は純粋な C ライブラリであるため、bat-c は避けられました。

Crystal から bat-c を呼び出します: wombat

Crystal ライブラリ wombat は、bat-c との対話を簡素化するために開発されました。 主な課題は、bat-c ライブラリのダウンロードと配置を管理することでした。 bat-c はまだ広く配布されていないため、GitHub Releases から直接ダウンロードすることが選択されました。 Crystal とのシームレスな統合のために、静的ライブラリが好まれました。 ダウンロード プロセスは、shards (Unix 風の) またはバッチ スクリプト (Windows) を使用する curl post_install フックを介して処理されます。

使用例

wombat ライブラリは次の関数を提供します。

  • pretty_print_file: ファイルを強調表示する構文。
  • pretty_print: 文字列を強調表示する構文。
  • pretty_string: 強調表示された文字列を返します。
<code>bat hello.rb</code>

GitHub アクションのワークフロー

Wombat - Syntax Highlighting with Rust

改善すべき領域

  • ライブラリ サイズ: 生成されたライブラリは比較的大きいです。
  • API 設計: API は、理想的には初期の Rust 開発時から C との互換性を考慮した、より洗練された設計から恩恵を受けることができます。
  • Rust/C の専門知識: Rust と C の知識が向上すると、より効率的で洗練されたライブラリが作成されます。

これらの改善の余地があるにもかかわらず、プロジェクトは、Crystal 内で bat を簡単かつ保守的に使用できるようにするという主な目標を達成しました。 著者は寄稿や問題の報告を歓迎します。

(元の日本語投稿は Qiita: Wombat - RustのBatをCrystalから呼び出しシンタックスハイライトする。ChatGPTによる英語翻訳。)

以上がWombat - Crystal から呼び出された Rust の Bat を使用した構文ハイライトの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。