Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
AA
Uploaded by
Akinori Abe
7,956 views
型安全性入門
型安全性に関するカジュアルな解説です。
Technology
◦
Read more
5
Save
Share
Embed
Embed presentation
Download
Download to read offline
1
/ 19
2
/ 19
3
/ 19
Most read
4
/ 19
5
/ 19
6
/ 19
Most read
7
/ 19
8
/ 19
9
/ 19
10
/ 19
11
/ 19
12
/ 19
13
/ 19
14
/ 19
Most read
15
/ 19
16
/ 19
17
/ 19
18
/ 19
19
/ 19
More Related Content
PDF
例外設計における大罪
by
Takuto Wada
PDF
プログラミングコンテストでの動的計画法
by
Takuya Akiba
PDF
暗号技術の実装と数学
by
MITSUNARI Shigeo
PDF
Oss貢献超入門
by
Michihito Shigemura
PDF
ドメイン駆動設計のための Spring の上手な使い方
by
増田 亨
PDF
PostgreSQLアンチパターン
by
Soudai Sone
PDF
何となく勉強した気分になれるパーサ入門
by
masayoshi takahashi
PDF
それはYAGNIか? それとも思考停止か?
by
Yoshitaka Kawashima
例外設計における大罪
by
Takuto Wada
プログラミングコンテストでの動的計画法
by
Takuya Akiba
暗号技術の実装と数学
by
MITSUNARI Shigeo
Oss貢献超入門
by
Michihito Shigemura
ドメイン駆動設計のための Spring の上手な使い方
by
増田 亨
PostgreSQLアンチパターン
by
Soudai Sone
何となく勉強した気分になれるパーサ入門
by
masayoshi takahashi
それはYAGNIか? それとも思考停止か?
by
Yoshitaka Kawashima
What's hot
PDF
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
by
Yahoo!デベロッパーネットワーク
PDF
SQLアンチパターン - ナイーブツリー
by
ke-m kamekoopa
PDF
強いて言えば「集約どう実装するのかな、を考える」な話
by
Yoshitaka Kawashima
PPTX
世界一わかりやすいClean Architecture
by
Atsushi Nakamura
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
by
Takuto Wada
PDF
ユーザーストーリーの分割
by
Arata Fujimura
PDF
データベース設計徹底指南
by
Mikiya Okuno
PDF
フロー効率性とリソース効率性について #xpjug
by
Itsuki Kuroda
PDF
目grep入門 +解説
by
murachue
PDF
人生がときめくAPIテスト自動化 with Karate
by
Takanori Suzuki
PDF
ブロックチェーン系プロジェクトで着目される暗号技術
by
MITSUNARI Shigeo
PDF
Kotlinアンチパターン
by
Recruit Lifestyle Co., Ltd.
PDF
テスト文字列に「うんこ」と入れるな
by
Kentaro Matsui
PDF
開発速度が速い #とは(LayerX社内資料)
by
mosa siru
PDF
ソフトウェアにおける 複雑さとは何なのか?
by
Yoshitaka Kawashima
PDF
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
by
Mikiya Okuno
PDF
RSA暗号運用でやってはいけない n のこと #ssmjp
by
sonickun
PDF
モジュールの凝集度・結合度・インタフェース
by
Hajime Yanagawa
PDF
グラフィカルモデル入門
by
Kawamoto_Kazuhiko
PDF
マイクロにしすぎた結果がこれだよ!
by
mosa siru
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
by
Yahoo!デベロッパーネットワーク
SQLアンチパターン - ナイーブツリー
by
ke-m kamekoopa
強いて言えば「集約どう実装するのかな、を考える」な話
by
Yoshitaka Kawashima
世界一わかりやすいClean Architecture
by
Atsushi Nakamura
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
by
Takuto Wada
ユーザーストーリーの分割
by
Arata Fujimura
データベース設計徹底指南
by
Mikiya Okuno
フロー効率性とリソース効率性について #xpjug
by
Itsuki Kuroda
目grep入門 +解説
by
murachue
人生がときめくAPIテスト自動化 with Karate
by
Takanori Suzuki
ブロックチェーン系プロジェクトで着目される暗号技術
by
MITSUNARI Shigeo
Kotlinアンチパターン
by
Recruit Lifestyle Co., Ltd.
テスト文字列に「うんこ」と入れるな
by
Kentaro Matsui
開発速度が速い #とは(LayerX社内資料)
by
mosa siru
ソフトウェアにおける 複雑さとは何なのか?
by
Yoshitaka Kawashima
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
by
Mikiya Okuno
RSA暗号運用でやってはいけない n のこと #ssmjp
by
sonickun
モジュールの凝集度・結合度・インタフェース
by
Hajime Yanagawa
グラフィカルモデル入門
by
Kawamoto_Kazuhiko
マイクロにしすぎた結果がこれだよ!
by
mosa siru
Similar to 型安全性入門
PDF
Scalaで型クラス入門
by
Makoto Fukuhara
PDF
TAPL 勉強会(紹介編)
by
none_toka
KEY
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
by
Hiromi Ishii
PDF
TAPL勉強会 第1章 (2012-07-17)
by
none_toka
ODP
Haskellの型安全性の力よ〜参照透明性編〜
by
aiya000
PDF
Sapporocpp#2 exception-primer
by
Kohsuke Yuasa
Scalaで型クラス入門
by
Makoto Fukuhara
TAPL 勉強会(紹介編)
by
none_toka
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
by
Hiromi Ishii
TAPL勉強会 第1章 (2012-07-17)
by
none_toka
Haskellの型安全性の力よ〜参照透明性編〜
by
aiya000
Sapporocpp#2 exception-primer
by
Kohsuke Yuasa
Recently uploaded
PDF
TomokaEdakawa_職種と講義の関係推定に基づく履修支援システムの基礎検討_HCI2026
by
Matsushita Laboratory
PDF
20260119_VIoTLT_vol22_kitazaki_v1___.pdf
by
Ayachika Kitazaki
PDF
maisugimoto_曖昧さを含む仕様書の改善を目的としたアノテーション支援ツールの検討_HCI2025.pdf
by
Matsushita Laboratory
PDF
自転車ユーザ参加型路面画像センシングによる点字ブロック検出における性能向上方法の模索 (20260123 SeMI研)
by
Yuto Matsuda
PDF
ST2024_PM1_2_Case_study_of_local_newspaper_company.pdf
by
akipii ogaoga
PDF
Team Topology Adaptive Organizational Design for Rapid Delivery of Valuable S...
by
akipii ogaoga
TomokaEdakawa_職種と講義の関係推定に基づく履修支援システムの基礎検討_HCI2026
by
Matsushita Laboratory
20260119_VIoTLT_vol22_kitazaki_v1___.pdf
by
Ayachika Kitazaki
maisugimoto_曖昧さを含む仕様書の改善を目的としたアノテーション支援ツールの検討_HCI2025.pdf
by
Matsushita Laboratory
自転車ユーザ参加型路面画像センシングによる点字ブロック検出における性能向上方法の模索 (20260123 SeMI研)
by
Yuto Matsuda
ST2024_PM1_2_Case_study_of_local_newspaper_company.pdf
by
akipii ogaoga
Team Topology Adaptive Organizational Design for Rapid Delivery of Valuable S...
by
akipii ogaoga
型安全性入門
1.
型安全性入門 2017.4.6 LT Thursday
2.
自己紹介 ● 名前:阿部晃典(あべあきのり) ● 2016
年新卒入社 ○ 広告配信の設定自動化( Scala) ○ DSP の CTR 予測(C++) ● 興味のある分野 ○ 機械学習 ○ プログラミング言語理論(型理論、メタプログラミング)
3.
LT のきっかけ ● 最近、「型安全」って単語をよく聞きます ○
Scala のライブラリとか type safe の謳い文句が多い ● それ、ほんとに型安全なの? ○ 安全って何? ○ ちゃんと証明したの?自明なの? ● 今日は静的型安全性の話をします ○ 「型安全性」をざっくり理解してもらうことが目的 ○ 静的型付き言語を前提に話します ○ 厳密な話はしないので、興味のある人は後で聞いて下さい
4.
お品書き 今日話すこと ● 型安全性とは何か ● 型安全性で保証されるもの ●
健全性と完全性 ● テストとの違い 話さないこと ● 厳密な型安全性の定義と証明 ● 高度な型システム
5.
型安全性とは?
6.
型安全とは、どういうこと? (Milner 1978) Well-typed programs
can’t go wrong. 型付けできるプログラム = 型検査を通過したプログラム 間違った状態に陥らない = ある種のバグが存在しない
7.
型安全性 ● コンパイル時に「ある種のバグが存在しない」ことを数学的に証明 ○ 型安全性を持つように、型システム・型検査器を設計・証明してある ●
検査済みのバグは実行時には絶対に起こらない ● プログラムの信頼性を数学的に保証 「型検査(コンパイル)を通過したなら、 ある種のバグが存在しない」 という性質
8.
強い型付け、弱い型付け ● 強い型付け:型安全性が型検査で保証される ○ e.g.,
Java, Scala, OCaml, Haskell, etc. ○ 「強い」とは「安全性の保証がある」ということ ○ 型システムが高度であるかどうかとは別の話 ● 弱い型付け:型安全性が保証されない ○ e.g., C, C++ , etc. ○ 型検査に通過しても、特に何も保証しない
9.
ある種のバグって何?
10.
安全性(バグの定義)は言語による ● だいたい言語 (Java,
Scala, Go, OCaml, Haskell, etc.) ○ メモリ安全とか null 安全が多い(と思う) ● より高度な言語や型システム (ATS, Coq, etc.) ○ 配列の境界検査 ○ Termination check(反復・再帰が常に停止することを検査) ○ Dead-lock freedom(絶対にデッドロックしないことを検査) ○ など ● ライブラリが +α の安全性を提供することも ○ DB クエリ言語の実行時型エラーを防ぐ (Slick, Rogue) ○ 行列演算のサイズ検査 ○ など
11.
型検査の恩恵が薄いことも List x =
null x.add(42) // NullPointerException ● Java はメモリのアクセス違反は起こさない ● でも、コンパイル時には検出せず、実行時に例外を投げる ● Java は「実行時に補足されたエラーだから OK」というスタンス(たぶん) ○ C, C++ だと(言語レベルで補足されない)セグメンテーション違反を起こす ● いわゆる null 安全な言語は、この手のエラーを型検査で検出
12.
要するに ● 言語・ライブラリで安全性(検査できるバグの種類)が違う ● どんな安全性を保証してくれるのか把握しておくことが大事
13.
健全性と完全性
14.
健全性と完全性 型安全性 (type safety),
健全性 (soundness) ● 「型が付くならば、ある種のバグは絶対にない」(偽陰性の排除) ● 「型エラーならば、バグがあるかもしれない」(偽陽性の許容) ○ バグがないのに、間違って型エラー出しちゃうかも ○ バグがあるのに型検査を通過させるリスクが大きい 完全性 (completeness) ● 「型エラーがあれば、バグが絶対にある」(偽陽性の排除) ● 健全かつ完全な型検査は難しい ○ チューリング完全な言語では決定不能問題
15.
テストとは何が違うの?
16.
テストと型検査 テスト ● 有限個の入力(テストケース)でプログラムが仕様を満たすか実行して確認 ● (あるテストケースで)バグが存在することを保証 ●
検査対象のバグの種類を増やすことは比較的簡単 型検査 ● 任意の入力について、プログラムが仕様を満たか実行せずに確認 ● (ある種の)バグが存在しないことを証明 ● 検査対象のバグの種類を増やすのは難しい
17.
テストと型検査どっちがいいの? 私見ですが、 ● それぞれの特徴を踏まえて、どっちもやるのが現実的に良い ● 可能なところは型検査、難しいところはテストが一番楽 ○
型検査で「可能なところ」を見極めるには、「型安全性」を知る必要がある 型検査の範囲を増やすには? ● 型レベルトリック(GADT、幽霊型などで頑張る) ● 依存型のある言語を使う(Coq、ATS など)
18.
まとめ
19.
まとめ ● 型安全性:型検査で特定のバグが存在しないことを保証する性質 ○ 言語・ライブラリで安全性(検査できるバグの種類)が違う ○
どんな安全性を保証してくれるのか把握しておくことが大事 ● 強い型検査とテストは特徴が違う ○ 組み合わせるといい感じ ● 上手に使って、バグを殺しましょう!
Download