0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

コードを生成しないコレクション。今度こそ完成です。

Posted at

うーん、まあ、特に必要ない機能です。組み込みとかのマイコンでは一応使えるかもしれません。
mapでは旨味がないです。ハッシュキーの生成に静的な型が必要なため。
listはかなりコードの生成を抑えられます。マイコンでは重要だ思います。
mapも一応各オブジェクトにget_hash_keyの関数ポインタを渡すようにすれば、mapも
コードの生成量が抑えられますが、その分全体的に遅くなるはずです。
version 14.0.0で使えます。一応サンプル

#include <comelang.h>

struct sData
{
    int a;
    int b;
    string c;
};

struct sData2
{
     string a;
};

int main(int argc, char** argv)
{
    list<sData~>*% li = new list<sData~>();

    li.add(new sData~ { a:1, b:2, c:s"WIN" });

    list<sData2~>*% li2 = new list<sData2~>();

    li2.add(new sData2~ { a:s"WIN2" });

    puts(li[0].c);

    puts(li2[0].a);

    return 0;
}

このコードではlistとlistのメソッドは同一コードが生成されます。
内部的にはvoid*として生成しています。その代わり要素の生成の時にnew sData~などとして
clonerとfinalizerを動的にオブジェクトに持たせてます。
new sDataとするとメモリリークが起こると思います。
一応セルフホストでも使っていて、2000行程度、生成コードが減ってました。
まあ、また気が向けばmapの方もコードを生成しないようにして、生成コードの量を減らすかもしれません。
ただ、全体的にシステムの速度は遅くなると思います。
Rustよりかなり簡単にコードを生成しないようにできるので、ちょっと自慢の機能です。
まあ、個人的には頑張りました。マイコンでcomelangが使い物になるようにしたいため。
マイコンはプログラムのサイズがデカくなりすぎるとダメですしね。
といってもマイコンでは僕もC言語使ってりゃいいと思いますけどね。ぶっちゃけると。
comelangを動かすというロマンでやってます。

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?