1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

オブジェクト指向Cコンパイラcomelangでテンプレートで型推論が完全となりました

Posted at

version 3.0.0で実装しています。

#include <comelang.h>

template<R> fun(R a, R b)
{
    return a + b;
}

int main(int argc, char** argv)
{
    fun(1, 2).printf("%d¥n");

    return 0;
}

3を返します。list::mapも型引数は必要ありません。
バグはちょっとテストした感じではありませんでしたが、あるかもしれません。

実装方法は単に引数を一度コンパイルしてRとの対応をとっているだけです。
ただgenericsやtemplateとgenericsとメソッドブロックが組み合わさるとかなり複雑でした。
まあ、個人的にはエレガントに実装できたと思います。
list::mapは

#include <comelang.h>

int main(int argc, char** argv)
{
    [1,2,3].map { it.to_string() }.each { puts(it); }
}

のようなコードも通ります。ヒープを生成してもメモリーリークはありません。
あとメソッドブロックのreturnの省略も入れています。ブロックの最後にセミコロンがなければ
reutrnされます。

割と現代的なコンパイラとなったと思います。
もうcomelangには思い残すところはありません。
あとはwebサーバーとデータベースサーバーを勉強のために実装していきます。
comelangはC言語でもあるためポインタが使えるので正確な文字列処理が得意です。
その上正規表現もあるのでRubyのような文字列処理もできます。
正規表現の例は

#include <comelang.h>
#include <comelang-str.h>

int main(int argc, char** argv)
{
    "ABC".scan(/./).join("+").puts();

    return 0;
}

A+B+Cが出力される。

などです。

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

1
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?