Changes between Version 2 and Version 3 of HowTo/BoostStudy14


Ignore:
Timestamp:
Mar 1, 2014, 4:37:34 PM (11 years ago)
Author:
村山 俊之
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • HowTo/BoostStudy14

    v2 v3  
    303303== .NET とかが当たり前にやってること、C++だとどうするか ==
    304304
    305  
     305 * C# や .NET Framework がやっていること
     306   * どうしてそういう機能が
     307   * 自前で実装するならどうやれば
     308   * 自前でやる上で気をつける必要がある点
     309 * Managed
     310   * .Net Framework の管理下にある
     311     * メモリーとか
     312   * GC
     313     * Mark & Sweep 3rd
     314     * Compaction (メモリー移動)
     315     * 一度 GC かかったオブジェクトはしばらく放置
     316   * C++ での GC
     317     * 通常、参照カウント (shared_ptr, weak_ptr)
     318     * M&S GC lib もあるけど
     319       * 型がはっきりしないので保守的にならざるを
     320         * すべての数値をポインタとみなし Mark
     321   * M&S と参照カウント比較 - 一長一短
     322     * Throughput トータル性能は M&S のが良さげ
     323   * 自前メモリ管理との混在
     324     * スコープ短いならスタックに取ればいいのに…
     325       * C# は class は必ずヒープ, structはスタック
     326   * Python とか Go とかの事情…
     327 * 境界チェック
     328   * .NET の配列は厳しい - 常に境界チェックやっとる
     329   * buffer overrun 病死
     330   * C# にもポインターはあるよ (unmanaged)
     331     * unsafe ブロック内のみ
     332     * class (参照型) はアドレス取れない
     333     * struct (値型) は、メンバーが全部値型であればアドレス取れる
     334     * コンパイルオプション /unsafe が必要。
     335 * AppDomain - 実行環境の分離、セキュリティ保証
     336   * 他のアプリの機能を自分のアプリから呼びたい (Word, Excel とか)
     337   * サーバー上に自分のアプリを配置したい (IIS上 (ASP.NET)、SQL Server上に)
     338   * 単一プロセス内で、分離された複数の実行領域 (domain) を提供
     339   * ドメイン間には壁がある
     340   * ドメイン間の通信 - marshaling
     341     * marshalの命令通りにしか壁を超えられない
     342     * データの受け渡しは一旦シリアライズして相手ドメイン上のメモリーに複製を作らせる、とか。
     343   * 2種類あるよ
     344     * marshal by ref
     345       * const ポインタみたいなのを渡す
     346     * marshal by value
     347       * シリアライズ - BinarySerializer
     348   * marshal by value でも文字列は特殊扱い。
     349     * コピーしない
     350     * 参照をそのまま渡してしまう
     351   * コスト
     352     * ライブラリ読み込みはブロックごとに
     353       * GAC は共有される
     354   * C++ でも
     355     * COM とか
     356     * COM ぐらい仰々しいものが必要…
     357 * メタデータ
     358   * DLL にどういう方が含まれるかという情報
     359   * 外部のどういう DLL を参照しているか
     360   * バージョン
     361   * プログラミング言語をまたげる
     362   * 動的リンクのバージョン管理
     363   * 動的リンク
     364   * メタデータの作成
     365     * COM の頃
     366       * 自分で書いてた
     367       * .tlb/.olb ファイル
     368     * .NET
     369       * メタデータの規格を持ってる
     370       * C# コンパイル時に自動生成
     371     * C++/CX
     372       * C++ Component Extensions (M$)
     373 * JIT
     374   * .NET Framework の中間言語 (IL)
     375     * セキュリティチェックやりやすい
     376     * 動的リンク時にコード修正の影響を JIT で吸収
     377     * コンパイラ作る人と CPU 最適化やる人を分けたい
     378   * 中間コードまでは型情報メタデータが残るよ
     379     * メンバの出現順が変わっても中間コードまでは変化しない
     380   * Ngen.exe ... IL をネイティブコード化するツール
     381   * Auto-Ngen ... Ngen が Windows サービスとして動いている
     382   * MDIL ... 部分的にネイティブ化 (コード内容はほぼネイティブだが、型情報等は残している)
     383   * C++ だと
     384     * 動的にやろうと思ったら結局 COM とかになっちゃう
     385     * コンパイル時間短縮で良ければ… setter/getter とか pimpl とかが現実的
     386 * Portable Class Library
     387   * 実行環境ごとに別の「標準ライブラリ」メタデータを用意
     388   * C++
     389     * ターゲット広すぎていっそう大変…
     390     * メタデータ持ってないと…
     391     * #ifdef?
     392 * ジェネリック
     393   * C++ template 的な
     394   * C++ で generics やるとしたら…
     395     * 一炭汎用クラスをつくり
     396     * キャストだけ template で…
     397   * インタフェース制約かけないとメソッドすら呼べない…
     398     * 演算子呼べない
     399   * C++/CX はジェネリック持ってる - 制限キツイ
     400 * イテレータ
     401   * IEnumerable<T>
     402   * C++ でもマクロ書けば yield return 作れちゃうYO!
     403   * 他の言語では generator って呼ばれることが多い
     404   * C++ 1y にも generator 載るかも…。
     405 * LINQ
     406   * データ処理を言語統合 (SQL 的なもの)
     407   * ラムダ式、匿名型、拡張メソッドとの相性が良い
     408 * dynamic
     409   * 動的型
     410   * 多重ディスパッチ
     411   * ダックタイピング
     412   * DLR 連携
     413   * 重い dynamic
     414     * 多くの場合、過剰スペック
     415       * JSON みたいなスキーマレスなデータ読み書き
     416 * async/await
     417   * 非同期処理しんどい
     418     * begin/end地獄
     419     * event地獄
     420     * then地獄 (ContinueWith地獄)
     421   * 同期処理みたいな書き方で非同期処理が書ける!! のが await
     422   * イテレータ (generator) と似た仕組み
     423   * C++1y にも await 載るかも…
     424 * Compiler as a Service
     425   * コンパイラの内部データを活用
     426   * IDE 連携のための機能…
     427     * これのためにコンパイラをフルスクラッチで書きなおしているとか何とか…
     428   * clang はその辺りをゴールの1つに掲げている模様…