2011-01-01から1年間の記事一覧

ILレベルでのデバッグ方法

IL

そうそう使わないけど、逆アセンブラとの兼ね合いで欲しくなることもあるので、備忘録的に。。。やり方は、難しくは無いけど若干面倒。仕込み方は以下の通り。 VisualStudio コマンドプロンプトを起動する Current directoryをコンパイルの成果物があるDirec…

ホントに、tail.は遅いのか?

IL C#

前回、前々回とF#や、C#、果てはILまで追っかけつつ検証してきた、tail.なワケですが、tail.有りと無しで果たしてどれほどの差があるのか? んでもって、条件により結果は変わってくるのか?てーコトを検証してみた。 ただ、C#では例え末尾再帰に合致したと…

tail.の復活

F# IL

昨日のエントリで、いらない子扱いされてしまって、枕に涙を塗らしていた*1tail.プレフィクス。F♯のコンパイラオプションでは明示しなければ使ったもらえず、以下のようなコードの場合でも、スタックフレームを1個除去できるかどうかだけで、ほぼあんたの居…

tail.プレフィクスがいらない子扱いされている件

C# F# IL

C♯というか、.NETのExpressionで末尾最適化がかかった形のモノが出来ないかどうか調べていて詰まったので*1F♯の末尾再帰ってコンパイルの時どうなってるのか調べてみたら表題の通りで。最も今回の例はとても単純なサンプルとなっているので、条件によっては…

Implementation of Enumerable.Cast

C#

中身見たら、えらく感動したので、備忘録的に。 何が凄いか 例外の吐き方がまず秀逸。無駄なコト一切してない。また、二段構えにしてるのも秀逸。 実装 public static IEnumerable<TResult> MyCast<TResult>(this IEnumerable source) { IEnumerable<TResult> enumerable = source as IE</tresult></tresult></tresult>…

 ExpressionTree内で動的にメンバプロパティ/フィールドを呼び出す方法

前回は、戻り値無しのMemberMethodの動的呼び出しをExpressionTreeの中でしようとしたとき、どーすれば良いのか?がテーマでした。 で、今回は、じゃあProperty/Fieldを呼び出すにゃどーすれば良いのか?がお題目。 dynamicで書いてみた場合 dynamicで今日の…

 ExpressionTree内で動的にメンバメソッドを呼び出す方法

通常のλを使った場合、以下のようなコードはコンパイルエラーになる。 Expression<Action<dynamic, int>> expr = (target, arg) => target.Call(arg); こんな風に書くと以下のようなコンパイラエラーが発生してそもそもコンパイルすらしてくれない。 式ツリーは、動的な操作を含む</action<dynamic,>…

ExpressionTreeとClojure

コトの始まり ふつーのDelegateでClojureが実現可能なのは、知ってたし、中でどーなってるのか大体理解してたけど、ExpressionTreeの場合、そもそも出来るのか?出来たとして、どーなるのか?て部分が気になったので何となく調べてみた。 使ったサンプルコー…

外部キー制約その2

てーことで、前回id:NetSeed:20110421はForeignKeyAttributeを使って、リレーションシップの作成をしてみました。 で、今回は、これをちょいと手直ししていきたいと思います。 前回の問題点 前回の方法では、若干冗長な"ManufacturerId"がプロパティとして定…

基本的な外部キー制約を付けてみる

今回は、属性を使う形でので外部キー制約と、そのNavigationあたりを。 今回のモデル 図で示すと以下みたいな感じになる。 こいつのテーブルスキーマは以下の通り。 --ManufacturersTable CREATE TABLE [Manufacturers] ( [Id] int NOT NULL IDENTITY (1,1) …

継承関係の取り扱いとテーブルスキーマの分離とか

基本的なコト 調べてみると、EFは継承関係にあったとしても、何も無かったかのようにこいつらを受け入れてしまうコトがわかった。 例えば、以下のようなサンプルがあったとして public class SampleBase { [Key] [DatabaseGenerated(System.ComponentModel.D…

EnumとTimeSpanを何とかしてみる

昨日は、ce4.0 と、CLRの型の相関を検証してきたわけですが、使えなかったTimeSpanとサポートしてないと明示されてるEnumを何とか出来ないかってのが今回のお題。今のところ、考えられる方法は2つあって、どちららも、メリットとデメリットがある。今回、使…

[EntityFramework] [SQL ce 4.0] POCOによる、型の相関関係

と言うコトで、前回に続き、Entity Framework+SQL Server Compact4.0周りで。 POCOから、コードファーストで、いきなりテーブルを作成出来ちゃうってのが昨日のお題でしたが、今回は、マップ先がどーなってるのかていうのがテーマ。単純なモノは以下の通り。…

EntityFramework4.1とSQL Server Compact 4.0でCodeFirstことはじめ

id:okazukiさんの、id:okazuki:20110320:1300628620 この日記を見て、目から鱗だったので、早速やってみようと思い色々いじった結果をメモ。基本的に今まで、組み込みのDB歯科使って無くて、対象がSQLiteをSystem.Data.SQLiteで動かしていたので、ちょこっと…

いまさら、WCFで遊んでみる

だいぶ前に買って、ほったらかしていたエッセンシャルWCF:Windows Communication Foundation (Programmer’s Selection―Microsoft .net Development Series)を今更ながらに読み始めて、WCFでちょこちょこ遊んでみた。 個人的には、ローカルコンピュータ通信*1…

VBAからC#へ

仕事関係で、ExcelやらのVBAマクロをちょいちょい書いていたけど、どーにもこーにも以下のような不満があった。 とても使いやすいとは言えないIDE*1 VB6ベースの言語体系 ソース管理がとても厄介*2 後は個人的に、C♯erなので、文末に;打って怒られたり、変…

Reactive Extentionことはじめ

C# Rx

最近、Twitterでよく見かけるRxてば何なのか?と気になって少し調べてみた。 MSDN見てみたり、id:okazukiさんや、neueccさんのblogを見てみたりしながら、今のところの理解を何となくまとめてみようかと。 ただ、自分の中でもまだまだまとまってないので、散…

Genericsの中のStaticフィールドに関するコト

C#

わかってみれば、当たり前だけど、ちと疑問に思って調べたコトを備忘録的に。 まずは、以下のようなコードがあったとして、 public class Hoge<T> { public static int Value = 0; } class MainEntry { static void Main(string[] args) { Hoge<Type>.Value = 200; Ho</type></t>…

 質問に答えてみる

C#

Twitterを見ていたら、matarilloさんのblogに、C#に関する質問のエントリがあったので、自分なりの答えを書いてみたり。 ==演算子のオーバーロードを実装してEqualsメソッドと同じ処理を実行するようにしてもよい場合はどのような時か? すぐ思いつくのは、…

Binding,MemberBinding,MemberInit

MSDNの解説がいまいち理解できなかったので、自分なりにまとめてみた。 とどのつまり、下のようなコードをExpressionTreeで表現する方法といえるんじゃ無かろうかと思う。 public static Inner InnerImpl() { return new Inner() { Ival = 10 }; } public static…

初期化子に関する一考察

C# IL

ClosureのIL眺めてたとき、ちょっと気づいた。詰まることはないと思うし、動作結果が一致してるけど、コンパイラの生成するILが不一致なのでとりあえずまとめておこうかと。 今回使ったサンプルクラス public struct sampleStr { public int Val { get; set; } } …

Expression.Addに関することなど

直感的でないことがいくつかあったので、備忘録的に。 お約束 Expression.Add(Expression left,Expression right)を構築すると、NodeTypeがAddになる。 Expressionに二項演算子+を実装したλを食わせても結果は一致する。 普通はこのBinaryExpression.Methodの実装…