狠狠撸

狠狠撸Share a Scribd company logo
型、ついてますか?
- 型の本質を振り返る -
ハッシュタグ #AIAL
於 日本マイクロソフト
2016-07-08
TAKANO Mitsuhiro a.k.a. @takano32
SORABITO Inc. / jus / CONBU
会場に感謝
いきさつ
白ヤギコーポレーションの森本さんから講師の打診
社内 + ちょっと外部な雰囲気の 15人くらいの勉強会
イベント公開後 3時間くらいで15人埋まる
公開から1日で30人くらいまで参加登録
日本マイクロソフトさん
ありがとうございます!
会場探し
Facebook でクローズドな告知
日本マイクロソフトの山本さんから会場提供についてお声がけいただけました
各所と調整しつつ日本マイクロソフトさんの会場をお借りすることができました!
会場決定の時点で60人が参加登録
Twitter などの個人のメディアで告知
100人の会場にほぼ参加登録100人
ほんとうにありがとうございます!
タイトルの元ネタ
ライト、ついてますか?
問題解決の手引き
正しく捉えているかの哲学
間違った問題に無駄な努力
問題は存在しなかった
お前、誰よ
TAKANO Mitsuhiro a.k.a. @takano32
高野 光弘 / たかの みつひろ
日本UNIXユーザ会(幹事|理事)
SORABITO株式会社
技術スペシャリスト
Smalltalk-ing Ruby committer
Senior Infrastructure Engineer
専门と経歴
専門
なんとなくプログラミングが
好きだったあのころ
専門
高校生のときからプログラミングをはじめる
大学時代
ネットワークとセキュリティの研究
修士論文は言語処理
実行環境に依存しないソフトウェア記述言語に関する研究
ジャヴァの話ではない
専門(CONT.D)
アルバイト
Smalltalk VM の開発
Linux 家電向けプラットフォーム
Windows向け社内メッセンジャー
Smalltalk VM を用いた .NET VM の開発
携帯電話向けプラットフォーム
一般的な電子商取引サイトの構築や特許事業の立ち上げ
経歴
「経験できないこと」を経験する
経歴
株式会社日立製作所
新卒でないと本体への潜入での採用は難しい
仮想化機構の設計開発
日本ではやっているところが他にない
社員数がハンパない
コミュニティー活動
社内のつながりで山本さん(@mihochannel)と知り合う
社外の活動で森本さん(@t2y)と知り合う
経歴(CONT.D)
グリー株式会社
大規模インフラストラクチャの指揮
組織全体を支える通知システム
計算機の台数がハンパない
SORABITO株式会社
Smalltalk による電子商取引サイト
成約あたりの単価がハンパない
重機や建機のマーケットプレイス
およそ二億円の出品なども存在
Smalltalk で業務システムを作るとか経験できない!!!
一言で言えば何でも
そこそこ深くやってる何でも屋
闲话休题。
型、ついてますか?
型、ついてますか?
型についての認識を確認
型の本質を理解する
型について議論するまえにするべき
型について必要の無い議論も少なくなるはず
型にまつわる歴史やエピソードの紹介
概要
一般的な「型」についての概要
静的型付け
動的型付け
型付けの風潮
(古代|近代|現代|原始)(動的|静的)型付け
概要(CONT.D)
风潮の変迁
それぞれの風潮における「指向」
型、ついてますか?
型の必要性
繰り返される歴史
これからの「型」のあり方
一般的な型についての概要
特定の言語や型の技術についての詳細は割愛
もっとふさわしい勉強会があります
あくまでこの場では全体をみます
木をみて樹海に迷わないように注意
面白いことや、意外なものは取り上げます
お土産にもって帰れる話がいくつかあるはず
静的型付け
「型がついている」といえば暗黙的に静的型付
けのこと
事前に変数の型を精査する
静的な解析
コンパイルや実行前のバグ発見
動的型付け
事前には変数の型を精査しない
動的な評価によってはじめて型がわかる
実行時の型付け
(静的?動的)型付け
静的型付けでは事前の解析や処理
一般に補助の記述を行う
実行は厳密には行っていない
いくら静的型付けの処理系による処理が一瞬で終わっていて
も動作時の型付けは異なる
実行ができるのは動的型付けだけ
詳細は解説します
型付けの風潮
古代静的型付け
古代動的型付け
近代動的型付け
近代静的型付け
現代動的型付け
現代静的型付け
原始動的型付け
原始静的型付け
(原始?古代?近代?現代)?
(動的?静的)
型付け
8種類はヤリ過ぎと
反省しておりますが
やっちゃったものはしょうがない
古代静的型付け
C言語を代表とするものに採用
システムと密接な型付け
型が不明だとデータの扱い方が分からない
A
B
A
A
B
A
A
B
A
古代動的型付け
処理の記述へとフォーカスが移っていく
システムの記述ではない
BASIC
初心者向けの言語として地位を確立
裏技っぽいテクニックでシステムにもアクセスできる
ex. DATA, PEEK, POKE
シェルスクリプト
システムと対話するための機構を応用
コラム: シェル
例外も存在する
システムと安全に対話するのがシェル本来の役割
真のLinux Kernel 向けシェル
どうみてもバカ
褒め言葉
コラム: 違和感がある言葉
シェルスクリプトを書くことを「シェルを書く」
bash や zsh を開発している???
IP アドレスのことを「IP」
IP とはインターネットプロトコルのことで IP アドレスとは IP での
送信先や送信元のアドレス
この違和感を分かりやすく例える
Wikipedia のことを 「Wiki」 と表現しているモヤモヤ感
近代動的型付け
古代動的型付けで解決が面倒だった分野の改善
Perl
sh + sed + awk + grep
強力な文字列操作
特にPerl互換の正規表現の存在は大きい成果
PCREとして他の世界にも大きく影響
近代動的型付け(CONT.D)
PHP
適当に書けば動く
利点でもあるし欠点でもある
型の議論などの場では揶揄されることも多い
多くのも問題を解決してきたのは事実
Python
Perl 書くのイヤになったよね
クセのある Perl Monger の成果物は読めません…
近代静的型付け
C++言語に代表されるものに採用
新しいパラダイムの上乗せ
C++言語ではオブジェクト指向
プログラムの構造化の延長線上にオブジェクト指向のテイストを載
せた
あくまでC言語からの発展系と捉えることができる
ルールが複雑すぎるので、使いこなせるエンジニアは天才だと感じる
現代動的型付け
パラダイムやユースケースによって大きく普及
Ruby
オブジェクト指向を前提とした言語
あとから載せたのではないので不自然さがない
JavaScript
Webブラウザでの動作を想定し普及した言語
「JavaScriptはOFFにする」という時代からの劇的な復活
現代静的型付け
近代静的型付けよりも強い機能
システム記述レイヤーからの解脱
VM という人類の英知
マルチプラットフォーム
ex. Java, Haskell, AltJS
原点回帰。
原始動的型付け
考えてみよう、ノイマン型コンピュータ
レジスタ
即値
アドレス
原始動的型付け(CONT.D)
MOV EAX, [1000h]
1000h という即値を EAX レジスタに入れる
MOV [?00h], EBX
EBX レジスタの値を ?00h のアドレスに入れる
ニーモニックは機械語と相互に置換できる
0 と 1 の連続で表現された規則を規約によって評価していくことで世の中の大
半のシステムは動作している
この「評価」こそが、ほぼすべての根幹にある「実行」
機械語の型付け
静的型付けなのか動的型付けなのか
実行時に即値かアドレスを判断
この時点からは事前の処理がない
敢えて分類するならば動的型付けといえる
すべての基本はこのサイクルであるため、動的型付け
からは逃げることができない
コラム: 機械語とC言語の接点
気軽に知ることができる接点について紹介
a[2] == 2[a];
式の値は?
「真」
何が起きているのか?
a
2
a[2]
a2
2[a]
原始静的型付け
起源はラムダ計算にあり
型なしラムダ計算
函数のみでさまざまな処理を実現する可能性を提示
自然数の扱い、条件分岐、再帰
型ありラムダ計算
型なしラムダ計算の発展系
強い型付けと遅延評価の礎となった仕組み
詳細を話すと 12 時間くらいになりそうなので割愛
风潮の変迁
原始
原始動的型付け
ノイマン型コンピュータ
原始静的型付け
思考的な実験
古代
古代静的型付け
システムの記述のために偏っている
ユーザの処理の記述には面倒
古代動的型付け
システムとの対話
記述の利便性を重視
近代
近代静的型付け
古代静的型付けに対する新しいパラダイムの適用
近代動的型付け
古代動的型付けに対する新しいパラダイムの適用
近代における「新しいパラダイム」
オブジェクト指向といってよい
現代
現代動的型付け
新しいパラダイムが先にある動的型付け
現代静的型付け
新しいパラダイムが先にある静的型付け
現代における「新しいパラダイム」
オブジェクト指向といえる
型、ついてますか?
型でみる歴史
原始型付け時代
型というものは意識されなかった
古代型付け時代
処理する問題の性質によって型付けがされた
近代型付け時代
新しいパラダイムのテイストが追加された
現代型付け時代
新しいパラダイムが先にあり、その後に処理系がある
歴史から学ぶ型
交互に動的型付けと静的型付けは成長してきた
時代が進むにつれて「物理的な」計算機からの
距離は遠くなっている
高度な抽象化
これからの「変化」を読む
なぜ、歴史は繰り返すのか
デバッグ困難な状態となったとき
静的な型付けと見せかけて動的な型付けという組み合わせが邪悪
C言語やC++言語ではデバッガを強化して延命
問題解決のドメインと処理系のインピーダンスミスマッチ
ex. Webシステムの新規開発にPerlを採用しますか?
抽象化のレベル
オブジェクト指向のことを考えているときにポインタとかメモリとか型の不一
致でデータのマッピングが狂いそう、みたいなことに注意を払いたくない
これからの「型」を考察
歴史から振り替えるポイント
ドメイン
パラダイム
抽象化
リソース
静的と動的の軸による考察
理論と実践
具象度と抽象度
これからの「ドメイン」
ドメインとは解決すべき問題がどの分野に属しているか?
という意味
歴史ではシステム記述とWebが大きく影響
現在は HTTP が全盛だが果たしてこのままなのか?
ex. Web はアプリケーション番号 80 番
IPv6 が本格的に普及したときに化ける可能性がある
これからの「パラダイム」
関数型やオブジェクト指向に代表される「概念的な
思考方法」がパラダイム
ドメインに対して有効なパラダイムが処理系に影響
してくる
ex. アスペクト指向
ex. 並列プログラミング / 並行プログラミング
これからの「抽象化」
オブジェクト指向よりも進んだ抽象化
UML などのこと
ex. Executable UML
これからの「リソース」
計算機のパワーのこと
これがバカにならない
ex. ガベージコレクション
構想時は作ったメモリをほったらかすような余裕がメモリ空間になかった
趣味で作ったオモチャ扱い
ex. オブジェクト指向
継承の仕組みにより、メソッドの探索に時間がかかっていた
実用的ではないと判断されていた時代も長い
現代でも組み込み分野では敬遠されがち
これからの「リソース」
どちらの要素技術も現代では欠かせないものとなってい
る
ガベージコレクション
オブジェクト指向
潤沢な計算機リソースが手に入ったときに、いま使われ
ていない「オモチャ」が台頭する可能性は十分にある
いま個人的に欲しいヤツ
パラダイム編
副作用を考慮したシェル
UNIXコマンド
時代背景から成功か失敗のみにフォーカス
時代は immutable infrastructure
副作用を分離したシェルがあると便利な予感
ex. Monad + shell
ここでの副作用とは操作が計算機に影響するかを意味する
副作用が明白にわかるシェルで操作できれば、副作用が発生するもののみを取り出せるはず
Docker?le などが自動で生成できる気がする
これからの型と処理系につ
いて考えてみましょう
それが未来のエンジニアライフ
を豊かにするかもしれません
延長戦
今年も LL イベントを開催します
LLoT - Lightweight Language of Things
http://ll.jus.or.jp/2016/
型のセッションの登壇者を交渉中
http://ll.jus.or.jp/2016/program
ご清聴ありがとうございました
SORABITO株式会社ではエンジニアを募集中
全体を俯瞰でき、理想を知りつつも、現実と闘い、スピードと
品質を落とさないチーム開発
基盤技術は最先端のものを臆することなく採用
Pharo, PostgreSQL, Elasticsearch, Redis, Neo4j など
サポート状況が不明でも、いざとなれば「潜る」技術を各々
が発揮して解決していく本来のエンジニアリングができます

More Related Content

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