.NET

JIT コンパイラの Dead Code Elimination を利用して,同一の CIL から複数の実装を生成する

値型かもしれない変数をnullと比較する 『プログラミングMicrosoft .NET Framework 第2版』で紹介されているように,以下のコードは合法. ジェネリックの型引数をnullと比較する ジェネリックの型が制約されていなくても、ジェネリックの型引数を、==演算子…

実装すべきインターフェイスの一意性

C# 2.0/3.0 で,以下のコードは,エラーである. interface I<T> {} class G<T1, T2> : I<T1>, I<T2> {} // CS0695 error CS0695: 'G<T1, T2>' cannot implement both 'I<T1>' and 'I<T2>' because they may unify for some type parameter substitutionsCS0695 をエラーとする動機は,『C# Lang</t2></t1></t1,></t2></t1></t1,></t>…

総称型の継承は難しい

public class B<T> { public virtual void V(T t) {} public virtual void V(string t) {} } public class D : B<string> { } // Invalid 例えばこのように定義された型 D だが,CLI 仕様では無効らしい (ISO/IEC 23271:2006(E) §9.9).今のところ CLR で動作はするが.</string></t>…

総称型に定義されたユーザ定義の暗黙の型変換で,インターフェイス型からの/への型変換が失敗する

これは gmcs 1.9.1.0 の動作の方が正しいと思うのだな. フィードバック: 総称型に定義されたユーザ定義の暗黙の型変換で,インターフェイス型からの/への型変換が失敗する

これはインクリメンタル検索を作りたいのかな?

問題が面白かったので. ふらっとC#,C♯,C#(初心者用) Part28 : 775- 完全な問題文は提示されていませんが,推測するに, 検索対象となる文字列 target に対して,検索文字列 search による検索を実装したい. ここで,search の先頭からなるべく長く部分…

cliext::collection_adapter 使用上の注意

以前 SLT/CLR の collection_adapter に関して注意を書いたことがあったが,『STL/CLRツアーガイド : CodeZine』を読んでいて再び collection_adapter が気になった.今回はもう少し掘り下げて調べてみる. 結論から言えば,以下の点に注意する必要がある. …

ややニッチな Anonymous Types の使い方をまとめてみる (C# 3.0)

@IT に連載されている川俣さんの記事から一年前のうちの日記のエントリがリンクされていた.当時の日記を読み直して,ほんの一年前まで Anonymous Types が Immutable かどうかといった重要な仕様が不確かだったことを思い出す.C# 3.0 がリリースされてから…

【^】パターンマッチ【$】

パターンマッチ話の続き. パターンマッチと単一化 複合代入 (多重代入) という見方もあれば,一方向単一化という見方もあって,つまりは Prolog ぐらい知っておけということっすか. この辺には値モデルと名札モデル,実装と理論,ボトムアップとトップダウ…

名前の周縁

畳み込み - fold(l|r), reduce - ((((日記)))) なるほど,Haskell の foldl, foldr は,Common Lisp だと reduce で統一されていて,その代わり右からと左からの選択は optional arguments で行うのか. 畳み込み関数はLispの方が好きかな。 オプショナル引…

名前の諸相

名前付き引数の是非 named arguments considered harmful - ものがたり 名前付きパラメータと位置によるパラメータの一致の不一致 - L'eclat des jours(2008-05-27) 結論的には今はいらない。今いらないのはVBがマルチパラダイム言語になって、普通のオブジ…

F# と overload

id:NyaRuRu:20080609:p2 の補足.F# で LINQ の Enumerable.Any 的なものを作ってみます. 引数の個数 (というより引数は 1 つで tuple の違いと見るべき?) によるオーバーロード. #light open System open Seq type MySeq = static member any<'a>(source…

たまには関数オーバーロードのない世界

いわゆる関数型言語では,関数オーバーロードを使う言語の方が珍しい気がしますが,それでも似たような処理をする関数を複数定義したくなったらどうするかというと,postfix を付けるのが一般的なのでしょうかね.例えば F#. Seq モジュールに定義された関…

var と null 初期化

RSS BanditのDare Obasanjo氏は同意していない。彼は、自身のオープンソースプロジェクトに不利な変化と思えることを認識した後、Ryzhenkov氏の見解に対する返答を(source)書いた。彼は次のように反論している。 (略) もう1つ、varが変数の初期化を促進する…

おっさんホイホイとしての Code Complete と,近くにあっても気付かない guard 句の話

VSS で管理しているのにソースの修正部分の差分をコメントとして残す - じゃんぬねっと日誌 カラwhileって使いますか? - ma2のblog - わんくま版(仮) 正常系が先か異常系が先かという問題 - Hirotow's Craftive Blogs ガード句かぁ,じゃんぬねっとさんは『…

与えられた木から,子→親への対応を作る,を C# で

流行っているっぽいのでやってみました. 与えられた木から、子→親への対応を作る Shiro(2008/05/24 11:55:47 PDT): たまたま昨日、仕事で扱った小ネタ。初級編クイズになりそうなので書き留めておく。 木構造が与えられる。たとえばこんなの:(define *tree…

憂鬱な勇者の 3 分クッキングを追記した

『「憂鬱な勇者」を C# で - NyaRuRuの日記』に「外伝: 憂鬱な勇者の 3 分クッキング」を追記してみました.『憂鬱な Windows 使いの冒険 - NyaRuRuの日記』ではここまでくるのにやたらと時間がかかってしまいましたが,『入門編で仕切り直そうか - ものがた…

さっそく Enumerable.ToLookup が役立った

『URL から著者名を返してくれる Web Service が欲しい』では はてなブックマーク件数取得API を使用してまとめて被ブックマーク数を取得しました. ただしこの API には制限があって,一回のクエリで取得できるのは 50 件までとなっています.今回であれば …

codepad の C# 版が欲しい

ブラウザにコードを貼り付けてポン,が欲しい.本来ここは Silverlight VM の出番なはずですが.

憂鬱な Windows 使いの冒険

『「憂鬱な勇者」を C# で - NyaRuRuの日記』を Achiral なしでコンパイルできるようにしてみたんですが,mono でコンパイルできることも試しておこうと思い立ってからが長かった…… ソースビルドを試みて,普段使っている Linux 環境 (gcc 3.2.3) で Mono 1.…

「憂鬱な勇者」を C# で

「憂鬱な勇者」を作った件 - hrkt0115311の日記 「憂鬱な勇者」がとても面白かったので、 Scheme に移植してみた - 黎明日記 「憂鬱な勇者」を Squeak Smalltalk で - sumim’s smalltalking-tos C# でも書いてみました.コンパイルには Achiral 1.1.0.0 が必…

Secure coding は Microsoft からイノベーションを奪っているか?

Re: WPFでHLSLが使えることの持つ意味 id:tetsutalow せんせーのところより. CPUの性能が伸びなくなってしまった今、GPUは当面の伸びしろとして期待されているわけですから、この動き自体は自然でしょう。ですが、一般的に言って、ネット越しに落ちてくるコ…

Achiral に Scan とか Pairwise とか条件変化可能な TakeWhile を入れてみた

以下の問題を解きながら Achiral を弄っていると,ついつい関係ないところまで弄っちゃって,あちこち breaking change ができてしまいました.なのでマイナーバージョンをひとつあげてみるテスト.いやまあバージョンとか適当なんですが. プログラミング言…

Enumerable.ToLookup を忘れやすくて困る

ToLookup<TKey,TElement> の基本と応用 - NyaRuRuの日記 自分で紹介記事まで書いておきながら,気を抜くと自分がその存在を忘れている.それが Enumerable.ToLookup. 以下は,クイックソートなどでよく現れるパーティション分割に ToLookup を使ってみた例. using System;</tkey,telement>…

C# で 劣化 Variant を書いてみた (2)

id:NyaRuRu:20080519:p1 にちょっとだけ続き. Generative Programming より 多重定義の機能は、多くの静的な型づけ言語が備えています (例えば、CとPascalは多重定義をサポートしませんが、C++とJavaはサポートします)。多重定義はすべての引数の型を使って…

ファイル I/O でブロックされているスレッドを殺したくなったらどうするか?

やっていてふと思ったのですが、タイムアウト付きのExistsメソッドを使っても、タイムアウトするまでアプリケーションがフリーズしてしまいます。 Exists自体を別スレッドに任せた方がよいのでしょうか? 普通はどのように設計するものなのでしょう。 スタン…

Visual Basic and C# Breaking Changes from Visual Studio 2005 to Visual Studio 2008

結構 breaking changes があるなぁ. Visual_Basic_and_CSharp_Breaking_Changes_from_Visual_Studio_2005_to_Visual_Studio_2008.docx

Visual C# 2008 Has A Breaking Change in Generic Method Overload Resolution

へー.こんなバグがあったんですか.まあ C# のオーバーロード解決はこういうバグが生まれやすい土壌がありますからなぁ. (追記) C# 3.0 で型推論のルールを弄った影響かもという気がしてきたので一旦取り下げ.(/追記) C++ ほどじゃないにしても,メソッド…

C# で 劣化 Variant を書いてみた

VB2005でのお話。そして現在調査中なのですが、できればいいなーというレベルで関数の戻り値のみが異なるようなオーバーロードをやってみました。Private Function GetConfig(ByVal keyword As String) As String '(省略) End Function Private Function Get…

Poderosa の部分再描画バグ

鉄塔ターミナル 友達がやっていたのをまねしてみた。これがけっこう良い感じ。 を読んでいて,自分の使っている Poderosa がカスタム版だったことを唐突に思い出しました. 私も本業の方では Linux がメインで,Poderosa にはお世話になりっぱなしなわけです…

Unit 型の存在しない C#,たったひとつの冴えないやり方

菊池さんのリバーシネタで思い出しました. Unit 型が無くて困るぜな話. letで代入を伴うのでvoidなメソッドを呼べないといってintに変えてまでどっぷり暗黒面という事で、「その気になればif、for、foreach、whileといった制御構文みんな要らないよね」で…