C#

dynamic

C#

System.Dynamic.DynamicObjectについて メンバ GetDynamicMemberNames : デバッグ用。メンバ名を列挙する。 GetMetaObject : DynamicMetaObjectを取り出す。DynamicMetaObjectがdynamicのもろもろの動作をしてくれるようだ。 DynamicObjectの場合はそのもろ…

しかし

C#

Entity Frameworkの理解できなさがすごいな。積みゲーになっているすばせか並みに意味が分からない。こんなに意味がわからないのはロマサガ3のトレード以来だ。LINQ to SQLでいいじゃねえか。

IEnumerableとIEnumerable

C#

GetEnumeratorを二つ実装しなきゃいけなくなるという、かなり破綻した仕組みだ。まあinterfaceはほっとけば必ず破綻するものだから仕方が無い。

ソースコードによる自動シリアライズ 19

C#

よし、10KBを超えたら書き出そう。さらに10KB追加されたらAppendしよう。これを繰り返して、クラスのサイズになったら次に以降する。 1IDごとにメモリを10KBまで消費することがある。100MB消費するのに10000か。厳しいな。まあしょうがないだろう。 世の中の…

ソースコードによる自動シリアライズ 18

C#

どれもこれも大きさに限界があってめんどくさいのだが、1プロジェクト=1ファイル=1クラス、これをおよそ65000行に収めることにする。プロジェクトは必然的にフォルダになるが、この中のファイル数が問題だ。いくつまでなら許容できるのか。100万オブジェクト…

ソースコードによる自動シリアライズ 17

C#

まあ最終出力がファイルなんだからファイルに入れとくのがいいのだろうけど、方法としては「メソッドを書き出し、後で読み出してクラスに統合してまた書き出す」「メソッドをパーシャルクラスにして一つ一つファイルに書き出す」「クラスをオンメモリで持っ…

C#

多分処理中にG2のGCが入った時点でメモリ管理は失敗、大失敗といえるんだろう。そんなのは処理が終わった後の空き時間でやればいいんだ。 小さいオブジェクトを作ってすぐ捨ててG0,G1にとどめる。大きいマネージオブジェクトは出来てしまった時点で失敗。大…

ソースコードによる自動シリアライズ 16

C#

プロジェクトを生成するようにしないと使いにくいんじゃないかと思うのだが、1プロジェクトにソースを溜め込むとコンパイルが通らなくなる。謎のエラーメッセージが延々出てきたりする。 論理的に考えるなら、ソリューションを作るしかない。今までの1ファイ…

ソースコードによる自動シリアライズ 15

C#

今日は1日眠かったのだが寝ようとすると眠れない。なんなんだ。プログラムに精神を奪われてしまっている。 まあいいや。とりあえず100万件を目指そう。ngenさえ安定して効けば100万件だって楽勝でいけるはずなんだ。とりあえず100万件のソースコードが馬鹿で…

ソースコードによる自動シリアライズ 14

C#

いやマジでよくわかんねえけど一瞬で終わるときは終わるなあ。ngenが効いてるんだろうけど効く時と効かない時の差がわかんねえ。

ソースコードによる自動シリアライズ 13

C#

とりあえず置いとく。 http://pmoky.ame-zaiku.com/csharp.html 通常の使用では破綻はしなくなったと思うがパフォーマンスの問題は結局解決しなかった。現実的に使えるのは10万オブジェクトぐらいだろうか。

ソースコードによる自動シリアライズ 12

C#

オブジェクト100万個のコードをコンパイルすると「メタデータを入れる記憶域がありません」みたいなことを言われてコンパイルできない。 50万個だとngenしてもデシリアライズに4分かかる。うーむ。どうもこの100MBのpdbが怪しいんだよなあ。デバッグなしで直…

ソースコードによる自動シリアライズ 11

C#

クラスを7万個作ったらコンパイルしただけでハングしたぞ。うーむ。

ソースコードによる自動シリアライズ 10

C#

1クラスに書けるのが65000行程度のようだなあ。本当か? Controlクラスって65000行しかないのか? 中身はほとんどinternalクラスなのかな。 クラス分割しかないか。くそ。まあたいして可読性は変わらないだろうけど。

クラスの継承は消せるか

C#

クラスの継承は危険そのものなのでなくてもいいように思うが、型引数が長くなりすぎて可読性もへったくれもなくなったジェネリッククラスに名前をつけるのに今のところ必要だ。delegateもFunc<T1,T2,TR>とかでいいじゃんと思うかもしれないが、名前をつけ…

concept

C#

interfaceってなくせないものかな。 C++みたいなconceptというのを考えた。ソースの置き換えみたいな過激なことをせず、かといってinterfaceのように「このメソッドとこのメソッドとこのメソッドが無いとダメ」というのを統一的に設計させるという無理なこと…

コレクションと副作用

C#

LINQの登場により、C#ではコレクションを書き換える場合、列挙すると書き換えた結果をその場で作るIEnumerableを返すのが標準になったと理解している。それは元のコレクションを書き換えない、副作用の無い処理だ。 IEnumerableといっても実際にコレクション…

関数の実行結果をキャッシュするDictionary

C#

関数の実行結果をキャッシュすると言うか、keyに対応したvalueが自動生成されるディクショナリ。 class LazyDictionary<TKey, TValue> { Dictionary<TKey, TValue> dic; Func<Tkey, TValue> valueCreator; public LazyDictionary(Dictionary<TKey, TValue> dic, Func<TKey, TValue> valueCreator){ this.dic = dic; this.valueCreato</tkey,></tkey,></tkey,></tkey,></tkey,>…

ソースコードによる自動シリアライズ 9

C#

Hoge[] GetCollection3132() { var a = new Hoge[32598]; a[0] = GetHoge51458(); a[1] = ... ... a[9999] = ... _10000から20000(a); _20000から30000(a); _30000から32598(a); return a; } こんな感じだな。1関数に2万行書けるかわからないけど、とりあえ…

ソースコードによる自動シリアライズ 8

C#

本当はこんなことしてる場合じゃないのだが、ちょっと進めた。 new[]{ ... } この配列の中の値を手打ちしていくと、65000を越えたあたりで「型が読み込めない」という例外が飛ぶ。intでもobjectでもなんでもそうだ。それとは別に45000を超えたあたりでdecima…

メタプログラミングと互換性

C#

参照型かどうかのチェックは(type.IsValueType == false)だと思うのだけど、これが正しいのかどうか良く知らない。けど正しいものとして、とりあえず.NET Frameworkがバージョンアップして、値型でも参照型でもない第三の型が現われた時に、この指定は正しく…

interfaceの使い道

C#

昨日の続き。 そういや自分で言っといて忘れてたけど言語内言語の文法定義に使える。同じオブジェクトにさまざまなinterfaceを実装して遷移させ、インデントはラムダ式を使うとシンプルに書ける。 interfaceをユーザーに実装させるために提供するという道は…

interfaceは要るのか

C#

クロージャを一々渡してられないようなものもある。GetEnumerator, Count, インデクサ、Dispose辺りはいちいち自分で「Disposeのメソッドはこれです」なんて指定していたら発狂してしまうかもしれない。そういうものにはinterfaceは必要だろう。あとフレーム…

命名規則

C#

インテリセンスはアルファベット順でそこに入れられるものを全て表示している。でもほとんどは要らないクラスだ。要るクラスを抽出する方法が必要だと思う。 とりあえず自作クラスにはプリフィックスにzとつけている。zはデフォルトだと名前がかぶるクラスが…

Enumerable.Reverseについて

C#

SingleLinkedListにIListを実装するとEnumerable.Reverseで大変なことになると思ったのでソースを見てみたが、ぶっちゃけ配列にコピーしてから後ろから順に辿ってるだけなのでまるで関係ない。せめてReverseArrayIteratorとかReverseListIteratorとか作った…

ソースコードによる自動シリアライズ 7

C#

識別子なんか数字でいいか。情報はコメントにのせればいいしな。クラス作りまくってるけどそれもどうかと思うし。1クラスに数字のメソッド名、オブジェクトの情報はコメントに書けばいいんじゃないか。全オブジェクトをそれぞれ関数にしても数字10文字あれば…

ソースコードによる自動シリアライズ 6

C#

よし、20万行のソースも関数分割で無事デシリアライズできた。 しかしこれはまだコレクションの中身を関数に分割してるだけで、コレクション自体が100万個とかあったら多分壊れる。あとまれなケースで理論上バグるからそこをどうするかだな。識別子が長くな…

匿名型

C#

anonymous これでいいじゃないか。

プログラミング言語のランキング

C#

C#大好きharuyutakaさんとしてはプログラミング言語の序列に興味がある。そういえば「C#大好きharuyutakaさんの歌」というのはシャ乱Qの「ラーメン大好き小池さんの唄」にインスパイアされていて、haruyutakaというのはラーメンがおいしくできる小麦粉の名前…

子より親の方が必ず長生きと言えるんだろうか。

C#

子が親への参照を持っているとき、親がdeleteされる時に子が生存し続けるべき状況は存在しない これ自体は間違いなさそうだな。しかしクロージャを入れるのは他人だから、その他人が子だけを参照して親を参照することをやめてしまえば破綻する。よく分からん…