🕌
もう一つのオブジェクト指向C言語neo-cを開発しました
C++はあまり好きじゃなかったので、RustやGoっぽいC言語を作りました。
neo-cといいます。オブジェクト指向はclassでカプセル化、interfaceで多態、extendsで継承です。
ヒープ管理は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