Maison >développement back-end >C++ >Wombat - Mise en évidence de la syntaxe avec Rust's Bat Called from Crystal

Wombat - Mise en évidence de la syntaxe avec Rust's Bat Called from Crystal

Barbara Streisand
Barbara Streisandoriginal
2025-01-16 14:04:58302parcourir

Wombat - Syntax Highlighting with Rust

Présentation

Cet article explore l'utilisation de l'outil de ligne de commande basé sur Rust bat en tant que bibliothèque dans Crystal, un langage qui manque actuellement d'une bibliothèque robuste de coloration syntaxique. bat, similaire à cat, affiche le contenu du fichier mais offre des fonctionnalités améliorées telles que la numérotation des lignes, la coloration syntaxique et la pagination.

<code>bat hello.rb</code>

Exploiter bat en tant que bibliothèque résout cette limitation de Crystal.

bat en tant que bibliothèque Rust

La structure

de batPrettyPrinter permet son utilisation comme bibliothèque Rust. Cependant, la dépendance de bat à l'égard de la bibliothèque complexe Syntect pour la coloration syntaxique a initialement présenté un défi. Pour simplifier cela, une fonction print_with_writer a été ajoutée à PrettyPrinter, permettant la mise en évidence directe de la syntaxe des chaînes. Cet ajout a été contribué via une pull request et est disponible à partir de la bat version 0.25.0.

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

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

Création d'un wrapper C : bat-c

Étant donné que les bibliothèques Rust ne peuvent pas être appelées directement depuis Crystal, une bibliothèque wrapper C légère, bat-c, a été créée. Cela permet d'accéder à bat depuis Crystal et d'autres langages avec interopérabilité C. Le développement de bat-c a largement utilisé ChatGPT et Copilot en raison de l'expertise limitée de l'auteur en Rust et C. Le référentiel bat-c est disponible sur : https://www.php.cn/link/065982e894fcde21153454b2ea4b2a8a

Considérations clés lors de la construction bat-c incluses :

  • Gestion de la mémoire : Gestion minutieuse de l'allocation et de la désallocation de la mémoire des chaînes pour éviter les fuites. La mémoire allouée par Rust nécessite les fonctions de désallocation correspondantes côté Rust.
  • Configuration Cargo.toml : Configuration de Cargo.toml pour générer des bibliothèques dynamiques (cdylib) et statiques (staticlib), permettant une flexibilité d'utilisation. rpath = true permet l'emplacement de la bibliothèque de chemins relatifs. Optimisation du profil de publication à l'aide de LTO et codegen-units = 1.
  • Versioning : Une fonction de version (bat_c_version) a été ajoutée, stockant la version dans la mémoire statique pour un accès facile.
  • Intégration Renovate : Renovate a été implémenté pour les mises à jour automatisées des versions de la bibliothèque.
  • Actions GitHub : Déclenchements de publication automatisés lors de la création de la balise Git. cargo publish a été évité car bat-c est une bibliothèque purement C.

Appel bat-c de Crystal : wombat

Une bibliothèque Crystal, wombat, a été développée pour simplifier l'interaction avec bat-c. Le principal défi consistait à gérer le téléchargement et le placement de la bibliothèque bat-c. Étant donné que bat-c n'est pas encore largement distribué, un téléchargement direct depuis GitHub Releases a été choisi. Une bibliothèque statique a été préférée pour son intégration transparente avec Crystal. Le processus de téléchargement est géré via un hook shards post_install, utilisant curl (de type Unix) ou un script batch (Windows).

Exemples d'utilisation

La bibliothèque wombat fournit des fonctions pour :

  • pretty_print_file : Syntaxe mettant en évidence un fichier.
  • pretty_print : Syntaxe mettant en évidence une chaîne.
  • pretty_string : Renvoie une chaîne en surbrillance.
<code>bat hello.rb</code>

Flux de travail des actions GitHub

Wombat - Syntax Highlighting with Rust

Domaines à améliorer

  • Taille de la bibliothèque : La bibliothèque générée est relativement grande.
  • Conception de l'API : L'API pourrait bénéficier d'une conception plus raffinée, prenant idéalement en compte la compatibilité C dès le développement initial de Rust.
  • Expertise Rust/C : Une connaissance améliorée de Rust et C mènerait à une bibliothèque plus efficace et plus raffinée.

Malgré ces points à améliorer, le projet atteint avec succès son objectif principal : permettre une utilisation facile et maintenable de bat au sein de Crystal. L'auteur accueille les contributions et publie des rapports.

(Article japonais original sur Qiita : Wombat - RustのBatをCrystalから呼び出しシンタックスハイライティングする. Traduction anglaise par ChatGPT.)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn