Cello - もはや別物、C言語で高レベルプログラミングを実現するライブラリ

S 20190417 102855

C言語は機械語やアセンブリ言語といった低水準言語に近く、最近流行のPythonやRubyといった高水準言語で利用できるさまざまな便利な機能を使用することができません。例えば文字列にも専用の型が存在せず、さまざまな落とし穴に注意しつつ慎重に使用する必要があるのです。

本日紹介する「Cello」は、このなにかと不便なC言語で、高レベルプログラミングを実現するユニークなライブラリです。

Cellは以下の機能を実現するC言語用ライブラリです。

  • 一般的なデータ構造
  • ポリモーフィック関数
  • インターフェイス/タイプクラス
  • コンストラクタとデストラクタ
  • オプションのガベージコレクション
  • 例外
  • リフレクション

作者のDaniel Holden氏は、Ubisoft Montrealのアニメーション研究員で、C言語の可能性を追求するためのファンプロジェクトとしてCelloの開発を始めたと開発の動機を説明しています。

Celloの使用方法

CelloはC言語用のライブラリで、gcc等を用いてコンパイルすることができます。例えばmacOSの場合以下の手順となります(その他詳細はこちら)。

git clone https://github.com/orangeduck/Cello.git
cd Cello
make

コンパイルに成功すると「libCello.a」と「libCello.so」がカレントディレクトリに作成されます。「make install」を実行すると/usr/localなどしかるべき場所にこのファイルがインストールされますが、サンプルを実行するだけならインストールは不要です。

以下のコマンドで/examplesの下に実行可能な各種サンプルプログラムが作成されます。

make examples

例えば整数型のArrayを生成し順に内容を表示する「iteration.c」は以下のような内容です。

#include "Cello.h"

int main(int argc, char** argv) {

  /* Stack objects are created using "$" */
  var i0 = $(Int, 5);
  var i1 = $(Int, 3);
  var i2 = $(Int, 4);

  /* Heap objects are created using "new" */
  var items = new(Array, Int, i0, i1, i2);

  /* Collections can be looped over */
  foreach (item in items) {
    print("Object %$ is of type %$\n",
      item, type_of(item));
  }

  return 0;
}

実行すると次のようになります。

S 20190417 105125

Arrayの値が「5、3、4」と順番に表示されていることがわかります。

他にもCello版のHello Worldである「cello_world.c」や、オブジェクトを生成する「object.c」など、Celloの基本機能を知ることができるさまざまなサンプルプログラムが含まれています。

本格的にCelloを使ってみたい場合、Celloリファレンスガイドも参考になります。

まとめ

Celloを利用すればC言語でありながらスクリプト言語風の便利な各種機能を利用することができます。仕事で使用すると問題が発生しそうですが、自分の楽しみのためのプロジェクトで使用する分には楽しそうです。

スポンサーリンク