タグ

genericsに関するcrafのブックマーク (8)

  • Javaのジェネリクスとリフレクション応用編 - プログラマーの脳みそ

    前回から随分と間が開いてしまった。Javaのジェネリクスはイレイジャ方式だけどもクラスにバインドした型の情報が残る場合があるんだよシリーズの第2弾である。 具体的にどういう場合にバインドした型が残るのかという話だが、端的に列挙すると以下のものである。 フィールドにパラメタライズドタイプ(parameterized-type)を用いた場合 メソッド引数や戻り値型にパラメタライズドタイプを用いた場合 コンストラクタにパラメタライズドタイプを用いた場合 継承によるバインドを行った場合 大きく分ければパラメタライズドタイプを使ったメンバのシグネチャか、継承によるバインドの2種類である。 前回、例に挙げたのはパラメタライズドタイプを引数にとるケースだった。 import java.lang.reflect.*; import java.util.List; public class Reflecti

    Javaのジェネリクスとリフレクション応用編 - プログラマーの脳みそ
  • ジェネリクスの基礎と�クラス設計への応用

    Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)

    ジェネリクスの基礎と�クラス設計への応用
  • JIT コンパイラの Dead Code Elimination を利用して,同一の CIL から複数の実装を生成する - NyaRuRuが地球にいたころ

    値型かもしれない変数をnullと比較する 『プログラミングMicrosoft .NET Framework 第2版』で紹介されているように,以下のコードは合法. ジェネリックの型引数をnullと比較する ジェネリックの型が制約されていなくても、ジェネリックの型引数を、==演算子または!=演算子を使ってnullと比較することができます。 private static void ComparingAGenericTypeVariableWithNull<T>(T obj) { if (obj == null ) { /* 値型では絶対に実行されない */ } } Tには制約がないので、参照型にも値型にもなりえます。Tが値型であった場合、objはnullにはなりません。この場合、C#コンパイラがエラーを出力すると思うでしょう。しかし、C#コンパイラはエラーを出力しません。このコードは問題なくコン

    JIT コンパイラの Dead Code Elimination を利用して,同一の CIL から複数の実装を生成する - NyaRuRuが地球にいたころ
  • 効率の良い実行時バインディングとインターフェイス指向プログラミングでの boxing の回避テクニック - NyaRuRuが地球にいたころ

    id:NyaRuRu:20070214:p1 の続き,のつもりで書いていますが続けて読めるかは不明. .NET プログラミングで,ある型 T に依存した抽象基底クラスやインターフェイスについて,利用者には T が緩い制約しかもたないように見せつつ,実装者は T の型にいくつか具体的な想定をして実装を行いたいことがあります. これは例えば T が特定のインターフェイスを実装している場合や,特定の属性でマークされている場合に,より最適化された処理や,特殊な割り込み処理を行いたい場合を想定しています. 一般的にこれはリフレクションを用いて実現することになりますが,何度もリフレクションを行うのは効率が悪いので,初回実行時に T に応じた実装をはき出してしまうことを考えます.こうすることで,2回目からの実行では JIT コンパイルされた実行コードが使用されるようになります. このような目的に使える実

    効率の良い実行時バインディングとインターフェイス指向プログラミングでの boxing の回避テクニック - NyaRuRuが地球にいたころ
  • もう一つの Enum - 当面C#と.NETな記録

    id:siokoshou:20080127:p2 の菊池さんのコメントを受けて、速度を改善した Enum を考えてみたんですが、これでいいような気がしました。 public static class Enum<T> where T : struct { private readonly static T[] values; private readonly static string[] strings; static Enum() { Debug.Assert( typeof( T ).IsEnum ); Debug.Assert( !Attribute.IsDefined( typeof( T ), typeof( FlagsAttribute ) ) ); // 1/28追加 values = Enum.GetValues( typeof( T ) ).Cast<T>().ToArr

    もう一つの Enum - 当面C#と.NETな記録
  • ジェネリック: Java vs C#

     ジェネリック: Java vs C# 概要 2005 年初頭に公開された Java 言語仕様第 3 版 (開発実行環境は 2004 年秋に先立って公開されていた) と 2005 年 6 月に ECMA に承認された C# 言語仕様第 3 版 (開発実行環境は 2005 年末に公開された) では、共にジェネリック (ジェネリックス、ジェネリクス、総称: generics) という新しい概念が導入され、文法もそれに伴って変化している。 Java と C# はどちらも静的な型付けを行うオブジェクト指向プログラミング言語であり、C 言語を基にした 似たような文法をしている。 この記事では、Java 言語のジェネリックと C# 言語のジェネリックを、その機能や文法の違いを中心に比較する。 ジェネリックな型 ジェネリックな型は、どちらの言語でも山型の括弧を使って表される。ジェ

  • 「オブジェクト配列」と「Genericコレクション」は相互にキャスト可能 - PowerShell Memo

    「オブジェクト配列」と「Genericコレクション」の関係 コンソールに選択肢を表示する(2) - PowerShell Memoで以下の疑問がわきました。 なぜ、Genericのコレクションを待ち受けている所に、通常の配列を渡してもOKなのでしょうか? そこで、オブジェクト配列とGenericコレクションの関係について検証した所、 PowerShellではオブジェクト配列とGenericコレクションは相互にキャスト可能という事が分かりました。 驚きです。(少なくともVB.NETではキャストできませんでした。) 以下は検証コードです。 検証コード #選択肢オブジェクトの作成 $choiceTypename = "System.Management.Automation.Host.ChoiceDescription" $yes = new-object $choiceTypename("&Y

    「オブジェクト配列」と「Genericコレクション」は相互にキャスト可能 - PowerShell Memo
  • STL/CLR の仕組み - NyaRuRuが地球にいたころ

    επιστημη氏が STL/CLR ネタを書かれています. STL/CLR @Orcas CTP Sep2006 STL/CLR first impression STL/CLR second impression std::container ⇔ cliext::container System::Collections::Generic::container ⇔ cliext::container 便乗して軽く STL/CLR の仕組みでも紹介と. generics と template の違い よく generics と template は似ていると言われますが,細部に宿る質は全くの別物で,その一例を (id:NyaRuRu:20060731#p1) でも紹介しました. C++template は,C# の文脈で言えば partial クラスによるコンパイル時合成処理とよ

    STL/CLR の仕組み - NyaRuRuが地球にいたころ
    craf
    craf 2006/12/17
  • 1