🕌

もう一つのオブジェクト指向C言語neo-cを開発しました

2024/06/04に公開

C++はあまり好きじゃなかったので、RustやGoっぽいC言語を作りました。
neo-cといいます。オブジェクト指向はclassでカプセル化、interfaceで多態、extendsで継承です。

https://github.com/ab25cq/neo-c

ヒープ管理はRustのような自動freeとGoのようなリファレンスカウントGCの間になっています。
まあ、あまり意識しなくてもバグは出ないと思います。

#include <neo-c.h>

class sData {
   int x;

   new(int x) {
      self.x = x
   }

   void show() {
      printf("x %d¥n", self.x);
   }
}

class sData2 extends sData {
    int y;

    new(int x, int y) {
        self.x = x;
        self.y = y;
    }

   void show() {
      printf("x %d y %d¥n", self.x, self.y);
   }
}

interface sDataRun {
    void show();
}

int main(int argc, char** argv)
{
    var data = new sData2(1, 2) implements sDataRun;
    data.show();
    return 0;
}

でx 1 y 2が表示されます。
neo-cで実装したものはvi cloneのvin, テキストプロセッサのzed, コンソールファイラmf, シェル shsh, 静的型付けのRubyのtruebyです。

vinは古いバージョンで実装したのでプリミティブなneo-cの書き方です。zed, mf, shshは比較的新め、truebyが最新のneo-cの機能を使って作ってます。
neo-cはneo-c自身でセルフホストしているためneo-c自身もサンプルになります。こちらも古めのneo-cで書いてあります。

各ソフトはディレクトリ内にあります。

マニュアルはREADME.mdです。

とりあえず試したかったら

> git clone https://github.com/ab25cq/neo-c
> cd neo-c
> bash fast_build.sh

とすれば依存関係も全て解決するので(管理者権限が必要ですが)気軽に試せると思います。

よかったら試してみださい。

Discussion