Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

templateを依存型っぽく使ってみる

689 views

Published on

#dwangocpp #1 templateを依存型っぽく使ってみる

Published in: Technology
  • Be the first to comment

templateを依存型っぽく使ってみる

  1. 1. templateで依存型 2014/06/28 #dwangocpp @minamiyama1994
  2. 2. 今日の流れ ● 自己紹介 ● templateとは? ● 依存型とは? ● templateで依存型的なことやってみる ● まとめ ● 質疑応答
  3. 3. 自己紹介 ● Twitter:@minamiyama1994 ● Github:minamiyama1994 ● 広島市立大学情報科学部2年(休学中) ● C++底辺 ● Haskell雑魚 ● 能年玲奈ちゃん可愛いね
  4. 4. templateとは? ● 本来はGenerics的機能 ○ パラメトリック多相 ● 特殊化や入れ子のtypedefなどを用いてメタプ ログラミングが可能 ● 整数定数値などをtemplate引数に入れることも 可能
  5. 5. 依存型とは? ● 型を値として扱ったり、値を型として扱ったりす る機能 ● 定理証明系などにある
  6. 6. template ● 型を値的に扱ったり値を型的に扱ったりが可能
  7. 7. 依存型 ● 型を値的に扱ったり値を型的に扱ったりが可能
  8. 8. あれ……?
  9. 9. ※詳しくないですが、相違点も多々あるようです 同じことが出来る……?
  10. 10. 作ったもの ● 型を値として扱う ○ FTMP ■ TMPライブラリ ■ 別途こちらでの発表をご覧ください ● 値を型として扱う ○ 「任意の非負整数N以下の非負整数を表現する型」 ○ 「任意の長さNのリストを表す型」 ■ 範囲外アクセスをコンパイル時に弾く
  11. 11. 整数型 ● int_<N> ○ N以下の非負整数を表現する型 ○ N<MであるMについて、int_<M>は代入不可能 ■ コンパイルエラー ○ N>=MであるMについて、int_<M>は代入可能 ● 例えばint_<N>とint_<M>の加算はint_<N+M> になる ■ 各種演算に対して同様に定義されている
  12. 12. リスト型 ● list<T,N> ○ 長さNのリストを表す型 ○ 空リストに対するhead,tailなどはコンパイルエラーにな る ○ N>MであるMについてint_<M>でインデックスアクセス 可能 ■ N<=Mの時はコンパイルエラーになる
  13. 13. 何が嬉しいのか? ● プログラムに関してある一定の保証ができる ○ 「この変数が格納できる整数の大きさはN以下」 ○ 「バッファオーバーランは絶対に起こらない」 ○ もっと頑張ればもっと色々出来る、はず ○ 型! 型! ■ 型を活かせばプログラムが安全に! ■ 活用しよう!
  14. 14. 何が嬉しいのか? ● プログラムに関してある一定の保証ができる ○ 「この変数が格納できる整数の大きさはN以下」 ○ 「バッファオーバーランは絶対に起こらない」 ○ もっと頑張ればもっと色々出来る、はず ○ 型! 型! ■ 型を活かせばプログラムが安全に! ■ 活用しよう!
  15. 15. まとめ ● templateを活用すれば依存型っぽいことができ る ● 型のパワーは偉大 ○ 活用しましょう ● リポジトリはこちら ○ https://github.com/minamiyama1994/FTMP ○ https://github.com/minamiyama1994/Dependent- Type
  16. 16. ご清聴 ありがとうございました

×