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が出力される。
などです。
よかったら試してみてください。