型、ついてますか? - 型の本質を振り返る -

67
型、ついてますか? - 型の本質を振り返る - ハッシュタグ #AIAL 日本マイクロソフト 2016-07-08 TAKANO Mitsuhiro a.k.a. @takano32 SORABITO Inc. / jus / CONBU

Upload: takano32

Post on 12-Apr-2017

229 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: 型、ついてますか? - 型の本質を振り返る -

型、ついてますか? - 型の本質を振り返る -

ハッシュタグ #AIAL

於 日本マイクロソフト

2016-07-08 TAKANO Mitsuhiro a.k.a. @takano32

SORABITO Inc. / jus / CONBU

Page 2: 型、ついてますか? - 型の本質を振り返る -

会場に感謝いきさつ

白ヤギコーポレーションの森本さんから講師の打診

社内 + ちょっと外部な雰囲気の 15人くらいの勉強会

イベント公開後 3時間くらいで15人埋まる

公開から1日で30人くらいまで参加登録

Page 3: 型、ついてますか? - 型の本質を振り返る -

日本マイクロソフトさん ありがとうございます!

会場探し

Facebook でクローズドな告知

日本マイクロソフトの山本さんから会場提供についてお声がけいただけました

各所と調整しつつ日本マイクロソフトさんの会場をお借りすることができました!

会場決定の時点で60人が参加登録

Twitter などの個人のメディアで告知

100人の会場にほぼ参加登録100人

ほんとうにありがとうございます!

Page 4: 型、ついてますか? - 型の本質を振り返る -

タイトルの元ネタライト、ついてますか?

問題解決の手引き

正しく捉えているかの哲学

間違った問題に無駄な努力

問題は存在しなかった

Page 5: 型、ついてますか? - 型の本質を振り返る -

お前、誰よTAKANO Mitsuhiro a.k.a. @takano32

高野 光弘 / たかの みつひろ

日本UNIXユーザ会(幹事|理事)

SORABITO株式会社

技術スペシャリスト

Smalltalk-ing Ruby committer

Senior Infrastructure Engineer

Page 6: 型、ついてますか? - 型の本質を振り返る -

専門と経歴

Page 7: 型、ついてますか? - 型の本質を振り返る -

専門 なんとなくプログラミングが

好きだったあのころ

Page 8: 型、ついてますか? - 型の本質を振り返る -

専門高校生のときからプログラミングをはじめる

大学時代

ネットワークとセキュリティの研究

修士論文は言語処理

実行環境に依存しないソフトウェア記述言語に関する研究

ジャヴァの話ではない

Page 9: 型、ついてますか? - 型の本質を振り返る -

専門(CONT.D)

アルバイト

Smalltalk VM の開発

Linux 家電向けプラットフォーム

Windows向け社内メッセンジャー

Smalltalk VM を用いた .NET VM の開発

携帯電話向けプラットフォーム

一般的な電子商取引サイトの構築や特許事業の立ち上げ

Page 10: 型、ついてますか? - 型の本質を振り返る -

経歴 「経験できないこと」を経験する

Page 11: 型、ついてますか? - 型の本質を振り返る -

経歴株式会社日立製作所

新卒でないと本体への潜入での採用は難しい

仮想化機構の設計開発

日本ではやっているところが他にない

社員数がハンパない

コミュニティー活動

社内のつながりで山本さん(@mihochannel)と知り合う

社外の活動で森本さん(@t2y)と知り合う

Page 12: 型、ついてますか? - 型の本質を振り返る -

経歴(CONT.D)

グリー株式会社

大規模インフラストラクチャの指揮

組織全体を支える通知システム

計算機の台数がハンパない

SORABITO株式会社

Smalltalk による電子商取引サイト

成約あたりの単価がハンパない

重機や建機のマーケットプレイス

およそ二億円の出品なども存在

Smalltalk で業務システムを作るとか経験できない!!!

Page 13: 型、ついてますか? - 型の本質を振り返る -

一言で言えば何でも そこそこ深くやってる何でも屋

Page 14: 型、ついてますか? - 型の本質を振り返る -

閑話休題。

Page 15: 型、ついてますか? - 型の本質を振り返る -

型、ついてますか?

Page 16: 型、ついてますか? - 型の本質を振り返る -

型、ついてますか?型についての認識を確認

型の本質を理解する

型について議論するまえにするべき

型について必要の無い議論も少なくなるはず

型にまつわる歴史やエピソードの紹介

Page 17: 型、ついてますか? - 型の本質を振り返る -

概要一般的な「型」についての概要

静的型付け

動的型付け

型付けの風潮

(古代|近代|現代|原始)(動的|静的)型付け

Page 18: 型、ついてますか? - 型の本質を振り返る -

概要(CONT.D)

風潮の変遷

それぞれの風潮における「指向」

型、ついてますか?

型の必要性

繰り返される歴史

これからの「型」のあり方

Page 19: 型、ついてますか? - 型の本質を振り返る -

一般的な型についての概要特定の言語や型の技術についての詳細は割愛

もっとふさわしい勉強会があります

あくまでこの場では全体をみます

木をみて樹海に迷わないように注意

面白いことや、意外なものは取り上げます

お土産にもって帰れる話がいくつかあるはず

Page 20: 型、ついてますか? - 型の本質を振り返る -

静的型付け「型がついている」といえば暗黙的に静的型付けのこと

事前に変数の型を精査する

静的な解析

コンパイルや実行前のバグ発見

Page 21: 型、ついてますか? - 型の本質を振り返る -

動的型付け

事前には変数の型を精査しない

動的な評価によってはじめて型がわかる

実行時の型付け

Page 22: 型、ついてますか? - 型の本質を振り返る -

(静的|動的)型付け静的型付けでは事前の解析や処理

一般に補助の記述を行う

実行は厳密には行っていない

いくら静的型付けの処理系による処理が一瞬で終わっていても動作時の型付けは異なる

実行ができるのは動的型付けだけ

詳細は解説します

Page 23: 型、ついてますか? - 型の本質を振り返る -

型付けの風潮古代静的型付け

古代動的型付け

近代動的型付け

近代静的型付け

現代動的型付け

現代静的型付け

原始動的型付け

原始静的型付け

Page 24: 型、ついてますか? - 型の本質を振り返る -

(原始|古代|近代|現代)(動的|静的) 型付け

Page 25: 型、ついてますか? - 型の本質を振り返る -

8種類はヤリ過ぎと 反省しておりますが

やっちゃったものはしょうがない

Page 26: 型、ついてますか? - 型の本質を振り返る -

古代静的型付け

C言語を代表とするものに採用

システムと密接な型付け

型が不明だとデータの扱い方が分からない

Page 27: 型、ついてますか? - 型の本質を振り返る -

AB

A

Page 28: 型、ついてますか? - 型の本質を振り返る -

A

BA

Page 29: 型、ついてますか? - 型の本質を振り返る -

A

B

A

Page 30: 型、ついてますか? - 型の本質を振り返る -

古代動的型付け処理の記述へとフォーカスが移っていく

システムの記述ではない

BASIC

初心者向けの言語として地位を確立

裏技っぽいテクニックでシステムにもアクセスできる

ex. DATA, PEEK, POKE

シェルスクリプト

システムと対話するための機構を応用

Page 31: 型、ついてますか? - 型の本質を振り返る -

コラム: シェル

例外も存在する

システムと安全に対話するのがシェル本来の役割

真のLinux Kernel 向けシェル

どうみてもバカ

褒め言葉

Page 32: 型、ついてますか? - 型の本質を振り返る -

コラム: 違和感がある言葉シェルスクリプトを書くことを「シェルを書く」

bash や zsh を開発している???

IP アドレスのことを「IP」

IP とはインターネットプロトコルのことで IP アドレスとは IP での送信先や送信元のアドレス

この違和感を分かりやすく例える

Wikipedia のことを 「Wiki」 と表現しているモヤモヤ感

Page 33: 型、ついてますか? - 型の本質を振り返る -

近代動的型付け古代動的型付けで解決が面倒だった分野の改善

Perl

sh + sed + awk + grep

強力な文字列操作

特にPerl互換の正規表現の存在は大きい成果

PCREとして他の世界にも大きく影響

Page 34: 型、ついてますか? - 型の本質を振り返る -

近代動的型付け(CONT.D)

PHP

適当に書けば動く

利点でもあるし欠点でもある

型の議論などの場では揶揄されることも多い

多くのも問題を解決してきたのは事実

Python

Perl 書くのイヤになったよね

クセのある Perl Monger の成果物は読めません…

Page 35: 型、ついてますか? - 型の本質を振り返る -

近代静的型付けC++言語に代表されるものに採用

新しいパラダイムの上乗せ

C++言語ではオブジェクト指向

プログラムの構造化の延長線上にオブジェクト指向のテイストを載せた

あくまでC言語からの発展系と捉えることができる

ルールが複雑すぎるので、使いこなせるエンジニアは天才だと感じる

Page 36: 型、ついてますか? - 型の本質を振り返る -

現代動的型付けパラダイムやユースケースによって大きく普及

Ruby

オブジェクト指向を前提とした言語

あとから載せたのではないので不自然さがない

JavaScript

Webブラウザでの動作を想定し普及した言語

「JavaScriptはOFFにする」という時代からの劇的な復活

Page 37: 型、ついてますか? - 型の本質を振り返る -

現代静的型付け近代静的型付けよりも強い機能

システム記述レイヤーからの解脱

VM という人類の英知

マルチプラットフォーム

ex. Java, Haskell, AltJS

Page 38: 型、ついてますか? - 型の本質を振り返る -

原点回帰。

Page 39: 型、ついてますか? - 型の本質を振り返る -

原始動的型付け

考えてみよう、ノイマン型コンピュータ

レジスタ

即値

アドレス

Page 40: 型、ついてますか? - 型の本質を振り返る -

原始動的型付け(CONT.D)

MOV EAX, [1000h]

1000h という即値を EAX レジスタに入れる

MOV [ff00h], EBX

EBX レジスタの値を ff00h のアドレスに入れる

ニーモニックは機械語と相互に置換できる

0 と 1 の連続で表現された規則を規約によって評価していくことで世の中の大半のシステムは動作している

この「評価」こそが、ほぼすべての根幹にある「実行」

Page 41: 型、ついてますか? - 型の本質を振り返る -

機械語の型付け静的型付けなのか動的型付けなのか

実行時に即値かアドレスを判断

この時点からは事前の処理がない

敢えて分類するならば動的型付けといえる

すべての基本はこのサイクルであるため、動的型付けからは逃げることができない

Page 42: 型、ついてますか? - 型の本質を振り返る -

コラム: 機械語とC言語の接点

気軽に知ることができる接点について紹介

a[2] == 2[a];

式の値は?

「真」

Page 43: 型、ついてますか? - 型の本質を振り返る -

何が起きているのか?

Page 44: 型、ついてますか? - 型の本質を振り返る -

a2

a[2]

a2

2[a]

Page 45: 型、ついてますか? - 型の本質を振り返る -

原始静的型付け起源はラムダ計算にあり

型なしラムダ計算

函数のみでさまざまな処理を実現する可能性を提示

自然数の扱い、条件分岐、再帰

型ありラムダ計算

型なしラムダ計算の発展系

強い型付けと遅延評価の礎となった仕組み

詳細を話すと 12 時間くらいになりそうなので割愛

Page 46: 型、ついてますか? - 型の本質を振り返る -

風潮の変遷

Page 47: 型、ついてますか? - 型の本質を振り返る -

原始

原始動的型付け

ノイマン型コンピュータ

原始静的型付け

思考的な実験

Page 48: 型、ついてますか? - 型の本質を振り返る -

古代古代静的型付け

システムの記述のために偏っている

ユーザの処理の記述には面倒

古代動的型付け

システムとの対話

記述の利便性を重視

Page 49: 型、ついてますか? - 型の本質を振り返る -

近代近代静的型付け

古代静的型付けに対する新しいパラダイムの適用

近代動的型付け

古代動的型付けに対する新しいパラダイムの適用

近代における「新しいパラダイム」

オブジェクト指向といってよい

Page 50: 型、ついてますか? - 型の本質を振り返る -

現代現代動的型付け

新しいパラダイムが先にある動的型付け

現代静的型付け

新しいパラダイムが先にある静的型付け

現代における「新しいパラダイム」

オブジェクト指向といえる

Page 51: 型、ついてますか? - 型の本質を振り返る -

型、ついてますか?

Page 52: 型、ついてますか? - 型の本質を振り返る -

型でみる歴史原始型付け時代

型というものは意識されなかった

古代型付け時代

処理する問題の性質によって型付けがされた

近代型付け時代

新しいパラダイムのテイストが追加された

現代型付け時代

新しいパラダイムが先にあり、その後に処理系がある

Page 53: 型、ついてますか? - 型の本質を振り返る -

歴史から学ぶ型

交互に動的型付けと静的型付けは成長してきた

時代が進むにつれて「物理的な」計算機からの距離は遠くなっている

高度な抽象化

Page 54: 型、ついてますか? - 型の本質を振り返る -

これからの「変化」を読む

Page 55: 型、ついてますか? - 型の本質を振り返る -

なぜ、歴史は繰り返すのかデバッグ困難な状態となったとき

静的な型付けと見せかけて動的な型付けという組み合わせが邪悪

C言語やC++言語ではデバッガを強化して延命

問題解決のドメインと処理系のインピーダンスミスマッチ

ex. Webシステムの新規開発にPerlを採用しますか?

抽象化のレベル

オブジェクト指向のことを考えているときにポインタとかメモリとか型の不一致でデータのマッピングが狂いそう、みたいなことに注意を払いたくない

Page 56: 型、ついてますか? - 型の本質を振り返る -

これからの「型」を考察歴史から振り替えるポイント

ドメイン

パラダイム

抽象化

リソース

静的と動的の軸による考察

理論と実践

具象度と抽象度

Page 57: 型、ついてますか? - 型の本質を振り返る -

これからの「ドメイン」ドメインとは解決すべき問題がどの分野に属しているか?という意味

歴史ではシステム記述とWebが大きく影響

現在は HTTP が全盛だが果たしてこのままなのか?

ex. Web はアプリケーション番号 80 番

IPv6 が本格的に普及したときに化ける可能性がある

Page 58: 型、ついてますか? - 型の本質を振り返る -

これからの「パラダイム」関数型やオブジェクト指向に代表される「概念的な思考方法」がパラダイム

ドメインに対して有効なパラダイムが処理系に影響してくる

ex. アスペクト指向

ex. 並列プログラミング / 並行プログラミング

Page 59: 型、ついてますか? - 型の本質を振り返る -

これからの「抽象化」

オブジェクト指向よりも進んだ抽象化

UML などのこと

ex. Executable UML

Page 60: 型、ついてますか? - 型の本質を振り返る -

これからの「リソース」計算機のパワーのこと

これがバカにならない

ex. ガベージコレクション

構想時は作ったメモリをほったらかすような余裕がメモリ空間になかった

趣味で作ったオモチャ扱い

ex. オブジェクト指向

継承の仕組みにより、メソッドの探索に時間がかかっていた

実用的ではないと判断されていた時代も長い

現代でも組み込み分野では敬遠されがち

Page 61: 型、ついてますか? - 型の本質を振り返る -

これからの「リソース」どちらの要素技術も現代では欠かせないものとなっている

ガベージコレクション

オブジェクト指向

潤沢な計算機リソースが手に入ったときに、いま使われていない「オモチャ」が台頭する可能性は十分にある

Page 62: 型、ついてますか? - 型の本質を振り返る -

いま個人的に欲しいヤツ パラダイム編

Page 63: 型、ついてますか? - 型の本質を振り返る -

副作用を考慮したシェルUNIXコマンド

時代背景から成功か失敗のみにフォーカス

時代は immutable infrastructure

副作用を分離したシェルがあると便利な予感

ex. Monad + shell

ここでの副作用とは操作が計算機に影響するかを意味する

副作用が明白にわかるシェルで操作できれば、副作用が発生するもののみを取り出せるはず

Dockerfile などが自動で生成できる気がする

Page 64: 型、ついてますか? - 型の本質を振り返る -

これからの型と処理系について考えてみましょう

Page 65: 型、ついてますか? - 型の本質を振り返る -

それが未来のエンジニアライフを豊かにするかもしれません

Page 66: 型、ついてますか? - 型の本質を振り返る -

延長戦今年も LL イベントを開催します

LLoT - Lightweight Language of Things

http://ll.jus.or.jp/2016/

型のセッションの登壇者を交渉中

http://ll.jus.or.jp/2016/program

Page 67: 型、ついてますか? - 型の本質を振り返る -

ご清聴ありがとうございましたSORABITO株式会社ではエンジニアを募集中

全体を俯瞰でき、理想を知りつつも、現実と闘い、スピードと品質を落とさないチーム開発

基盤技術は最先端のものを臆することなく採用

Pharo, PostgreSQL, Elasticsearch, Redis, Neo4j など

サポート状況が不明でも、いざとなれば「潜る」技術を各々が発揮して解決していく本来のエンジニアリングができます