2009-03-01から1ヶ月間の記事一覧

ソースコードによる自動シリアライズ 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をユーザーに実装させるために提供するという道は…

なんか今日は意味もなく酒を飲んだ。 思想の二文字がもっと力を持つ時代に産まれてきたかったなあ。今の時代は馬鹿が一番情報強者だ。騙される奴がいない。騙されたところで2chでネット右翼をやったりXbox360の工作員をやったりだからな。そんなに間違ってる…

interfaceは要るのか

C#

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

命名規則

C#

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

Enumerable.Reverseについて

C#

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

ぐっすり眠って6時半に起きた。昨日ちゃんと眠れなかったのは原因不明のバグに悩まされてたからかもしれない。ソースコードを生成するソースコードを生成するソースコードのあたりで混乱の極みに達していたので、全くバグの原因が分からず解決法も分からない…

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

C#

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

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

C#

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

眠い

新しい言語表現が旧来の用法と異なるから間違っているというなら、新しい表現に正しいものなんか永久に生まれてこないじゃないか。そうやって正しくない正しくないと言い続けたって言葉は変わっていくんだから、そのうち正しい日本語なんて誰もひとかけらも…

匿名型

C#

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

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

C#

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

といってカレンダーを見たら今月ほぼ毎日書いている。どうなってるんだ一体。

RSSとウェブスライス

ブログはRSSリーダーに登録するかなんかして読んでもらう前提で書いているのだが、RSSというのが一般に全然普及していない。RSSも使えない情報弱者に合わせようとすると、毎日更新するハメになる。いくらなんでもそんなに書きたいことはない。 ウェブスライ…

ちゃんと眠れない

まさか2時半に起きることになろうとは。 しかしこれで夜まで寝なければ今度こそぐっすり眠れるはずだ。 昔から「だらだらする(好きなだけ眠る)」→「コードを書く(2日に1回くらいしか寝ない)」みたいなめちゃくちゃなリズムで生きてきたから、いろんなこと…

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

C#

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

そうか

C#

つまり型の定義を循環させないことで、実行パスの循環はまず解決される。再帰は局所的な、1クラスの中に留められる。ポインタの循環も悪性のものを根絶できる。 しかし、しかしだ。なぜ型の定義を循環させなくても工夫すればプログラムが普通に書けちゃうの…

ポインタの循環とクロージャ

C#

ポインタは循環せざるを得ないとこはあるのだが、クロージャでの使用に留めるべきだろうと思う。クロージャなら暗黙に親への参照は持っているのだが本人はいじれないので問題は無い。クロージャがないならinterfaceのみの使用に留めるべきだという話になるだ…

実行パスの循環と再帰

C#

ボタンがクリックされた時にウインドウをいじりたいなら、ポインタは循環する必要がある。子が親に直接作用するにはポインタが循環する必要がある。これは分かりやすい。 実行パスが循環する必要もある。関数が導入された時、実行パスの循環は局所的な繰り返…