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

Post on 12-Apr-2017

229 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

ハッシュタグ #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言語を代表とするものに採用

システムと密接な型付け

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

AB

A

A

BA

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 [ff00h], EBX

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

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

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

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

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

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

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

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

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

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

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

a[2] == 2[a];

式の値は?

「真」

何が起きているのか?

a2

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

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

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

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

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

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

延長戦今年も 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 など

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

top related