魅惑の自作シェルの世界

Sat Feb 4 15:43:08 JST 2023 (modified: Mon Jun 24 10:34:55 JST 2024)
views: 20522, keywords:rusty_bash, Software Design, 連載

 技術評論社Software Designにて2022年12月号より連載中。購入はこちらからできます!

どんな連載なのか?

記事に出てくる用語集

シェルの用語(連載独自のものを含む)

  • サブシェル: シェルがフォークしてできるシェルのプロセス
  • サブワード: 単語の部品(部分文字列や変数展開、コマンド置換など)
  • ジョブ: AND/ORリストや単独のパイプラインのこと
  • スクリプト: (本連載のみ)シェルスクリプトや端末から読み込んだプログラム。文法上、最上位の単位
  • 単語: コマンドやコマンドの引数を表す文字列のこと
  • 単純コマンド: ls -lなど、ひとつのコマンドの名前+複数の引数で構成されるコマンド。対義語は( echo a ; echo b)ifforなどの複合コマンド。
  • 丸括弧コマンド(本連載のみ): (echo a ; echo b)など、丸括弧で囲うタイプの複合コマンド。一般にサブシェルとも呼ばれる。
  • 複合コマンド: ( echo a ; echo b)ifforなど、複数のコマンドを組み合わせて作られた「コマンド」。パイプラインにつなげられる。
  • プロセスグループ: パイプラインにつながったコマンドと、その複合コマンドの子孫のプロセスで構成されるグループ。ジョブやフォア/バックグラウンドの制御、シグナルの送信先などの単位になる。
  • 要素(本連載のみ): 「スクリプト」や「ジョブ」などのパースする単位

Rustの用語

  • Box<T>: ヒープ領域に型Tのデータを置くときにつかうポインタ

  • cargo build: Rustのパッケージをビルドするときのコマンド

  • cargo run: Rustのパッケージをビルドして実行するときのコマンド

  • dbg!: デバッグ出力用のマクロ

  • dyn トレイト名: 共通のトレイトを持つ任意の型を表すときの表現方法

  • use: 型や関数を使うときにパスを通すために使用

  • Option<T>型: 「なにかデータが1個ある、あるいはない」という状態を表現できる列挙型。列挙子としては、NoneSome(T)がある。

  • eprintln!: 標準エラー出力に文字列を出す(デバッグ用)

  • アトリビュート: 構造体に対して与える#[...]という記述

  • 関連関数: たとえば構造体Abcがあったときに、impl Abc {}のカッコ内に書く関数。引数にselfがなく、インスタンスのデータは操作できない。

  • クレート:

    • 1: 外部ライブラリのこと(Cargo.tomlに一覧を記述)
    • 2: main.rs以下のモジュールのぶら下がった塊のこと
  • サブモジュール: あるモジュールの子供に相当するモジュール。たとえばfeeder.rsがあったら、feederディレクトリの下のソースファイルscanner.rsfeeder.rsmod scanner;と読み込むと、scannerfeederのサブモジュールとなる。

  • トレイト: 複数の異なる構造体に対して共通のメソッドを定義するための仕組み

  • フィールド: 構造体の構成要素(C++のメンバ変数と同じ)

  • ミュータブル: 変数やインスタンスが書き換え可能なこと。

  • メソッド: たとえば構造体Abcがあったときに、impl Abc {}のカッコ内に書く関数状の手続きの一種。引数にselfがあり、インスタンスのデータを操作できる。

  • モジュール: 本連載ではひとつのrsファイルにまとめられている構造体や関数などの集まり

  • サブモジュール: あるモジュールにぶらさがっているモジュール

  • 列挙型: 定数に名前をつけたラベルのセット。Rustの場合は、ラベルの下にデータをぶら下げることができる。

サンプルコードに関する用語

  • sush: 寿司シェルのコマンドとしての名前
  • 寿司シェル: 本連載で作っているシェル。
  • eat_...: パーサーの構造体の関連関数で、パースしている要素のサブの要素をインスタンスに取り込むためのもの。
  • scanner_...: スキャナ(「その他用語」参照のこと)
  • 構造体名::parse: その構造体の表す要素に対応するパーサー

その他用語

  • スキャナ: パーサが使う文字列を走査して、意味のある文字列の位置を教える関数
  • バイト数: 本連載では8ビットのこと。正確にはオクテット数。
  • フォーク: プロセスを双子のように分裂させる処理。UnixやLinuxでプログラムを立ち上げるための重要な機能の一つ。
ノート   このエントリーをはてなブックマークに追加 
 

やり散らかし一覧

記事いろいろ