1. はじめに

1.1. GlueLangとは

GlueLangは、「きれいな」シェルスクリプトを書くための言語として筆者が開発している言語です。 「きれいな」は筆者の主観ですが、次のようなことを目的としてこの言語を作成しています。

  • シェルの役割が理解しやすい言語に

    シェルは、プロセスの中の挙動を記述する一般的なプログラミング言語と異なり、ファイルやプロセスなど、一階層上のコンピュータのリソースを扱うためのものです。しかし、このことはコンピュータサイエンスを学習した一部の人以外は強く意識をすることはありません。また、Cシェルのように、違いを文法を共通化して、そのような違いを埋めようとした試みもかつてありましたが、残念ながらうまく行ったとは言えません。違うものを無理に似せる必要はありません。そこで、「プロセス」「ファイル」「(文字列を格納する)メモリ」など、リソースを使用していることが理解できる、シェルとしての役割が明確な言語が必要と考えました。

  • 文法の整理

現状のBシェル系の記法は個人的にあまり好きではありません(非常に個人的ですが$の出てくるものは・・・以下略)。また、特にテキスト処理においてパイプラインを多用すると、シェルは関数型言語の様相を見せます。そこで、Haskellのような記法でスクリプトを書くことで、すっきりとした記述でシェルスクリプトが書けるのではないかと考えました。
  • ソースの構造をスッキリさせる

    外のライブラリを使うとブラックボックスができるので、使わずに書いています。MacでもLinuxでもmakeしたら動くようになっています。また、現在の多くのシェルがgotoだらけのC言語で書かれていますが、C++でオブジェクト指向で書くことでコードをスッキリさせようとしています(が、そんなに読みやすいとも思えないので道半ば)。

  • その他の付加価値

    ジョブ管理や中間ファイルの扱いの簡略化。コマンドを通常のシェルのようにPATHでフラットに管理するのではなく、パッケージのように階層構造を持たせる。エラーの表示を親切に、定義されていない変数を使えなくする、など、日頃シェルスクリプトを書いていて足りなさそうなものを盛り込むことにしました。

1.2. 作者のスタンス

GlueLangはロボティクスとは関係ないので、本業として研究はしておりません。かなり気ままに開発しています。ですので、GlueLangのアイデアを別の言語で取り込んでも、亜種を別の人が作って注目を浴びても、GlueLanからヒントを得た/派生したと明記していただければ全く問題ありません。

1.3. GlueLangのライセンス

MITライセンスです。