動的型言語のふわふわ感

38
Keigo Imai @keigoi

自由といえば聞こえはいいけど、その自由には責任が伴うという感じ。そんなめんどくさい言語は極力回避というのが自分の正直なところ

2011-07-19 11:53:33
山本和彦 @kazu_yamamoto

@tomooda 動的が好きという背景には、関係するすべてのコードは掌握できるという自信があるの?

2011-07-19 11:59:11
Keigo Imai @keigoi

いわゆるLLの使いやすさに学ぶところは多いけれど、不要な自由度のために静的型を犠牲にしている部分もあるのではないか、逆に静的型でその使いやすさを得るためにはどうしたらよいのか、まじめにかんがえたほうがよさそうだ

2011-07-19 11:59:13
極端流形式仕様 初代𝕍𝕚𝕖𝕟𝕟𝕒𝕋𝕒𝕝𝕜𝕖𝕣 @tomooda

逆で、関係する全てのコードを掌握なんて出来っこない(未来はわからない)から、自由度を担保しておきたい。 RT @kazu_yamamoto: 動的が好きという背景には、関係するすべてのコードは掌握できるという自信があるの?

2011-07-19 12:01:15
山本和彦 @kazu_yamamoto

.@keigoi 動的型付けでないと「こういうことがやりにく」というよい例をあまり聞きません。誰か分かり易くまとめてくれませんかね。

2011-07-19 12:02:15
山本和彦 @kazu_yamamoto

.@tomooda ソースコードがすべて手に入るプロジェクトでは、ダメな部分は書き直せばいいのでは?

2011-07-19 12:04:00
@tos_kamiya

「動的型の言語ってふわふわしててイヤ」というのもよくわかるんだよなあ。静的型と動的型では責任の在り処が違う、というのに気づくまではそう思ってたし

2011-07-19 12:05:18
Keigo Imai @keigoi

@kazu_yamamoto Rubyのライブラリの設計なんかはたぶん静的型ではつらい部分もあると思うのですが、もてはやされている分、なにか良い側面が必ずあるはずで、参考になる気がしています。...←思う、気がする、とまったくの当て推量ですが

2011-07-19 12:09:23
山本和彦 @kazu_yamamoto

.@keigoi 動的型付けがよいと言っている人の多くは、C への反動で、Haskell とかは知らないことが多いです。どちらもよく分かっていて、しかも動的型付けがよいという人の意見に耳を傾けたいなと思っています。

2011-07-19 12:12:01
Keigo Imai @keigoi

@terurou たしかに。メインストリームの静的型付け言語がインタプリタ実行できていればもっと別の世界が待っているような気もします。 F#やHaskellはできますが

2011-07-19 12:13:49
山本和彦 @kazu_yamamoto

コンパイルしなくても動くのがいい(Haskell の GHC でもできるよ)、とりあえず動かしながらデバッグしたい(型エラーを起こさないようなプログラミングをする習慣を付けた方がよくない?)とか、とか。。。

2011-07-19 12:14:06
山本和彦 @kazu_yamamoto

若気の至りで書いたライブラリーを書き直そうか迷っている。動的型付けで書いていたら、書き直さなくて済んだとは思えない。。。

2011-07-19 12:16:14
極端流形式仕様 初代𝕍𝕚𝕖𝕟𝕟𝕒𝕋𝕒𝕝𝕜𝕖𝕣 @tomooda

むしろ、ソースコードやライブラリを外に出さない、いわゆる自製社内システムとかのほうが静的型言語を使いやすい。型やインターフェイスは一旦外に出しちゃったら「書き替えるから」では済まないよね。 RT @kazu_yamamoto: ソースコードがすべて手に入るプロジェクトでは

2011-07-19 12:17:55
山本和彦 @kazu_yamamoto

.@tomooda しかし、動的なのに仕様がコロコロ変わる言語は、一体何なのかね?。。。

2011-07-19 12:22:31
pokarim @pokarim

@kazu_yamamoto @keigoi まだ考え中なので思いつきベースですが、たとえば型推論に失敗したら、その部分は、とりあえず動的型付け的に実行してまう(もちろん実行時エラーはでるかもしれない)というようなことって考えられないでしょうか?

2011-07-19 12:23:56
山本和彦 @kazu_yamamoto

.@pokarim @keigoi 理屈としてはアリなんですが、僕が知りたいのは、その言語ではどういう問題が解きやすいのか、です。

2011-07-19 12:25:37
pokarim @pokarim

@kazu_yamamoto @keigoi あと、たとえば依存型がなかったり一部でしか使われていなければ、当然ですが型チェックによってすべてのプログラムの不整合をはじけるわけではないですよね。だからなんだというわけではないですが。

2011-07-19 12:27:04
山本和彦 @kazu_yamamoto

単なる質問: 動的にメソッドを増やすというのは、メタプログラミングの領域ですか?

2011-07-19 12:27:30
Keigo Imai @keigoi

@pokarim @kazu_yamamoto 関係あるかどうかわかりませんがプログラムに部分的に型をつけるgradual typingという研究があります。 http://t.co/0TP1VBS

2011-07-19 12:27:40
pokarim @pokarim

@kazu_yamamoto @keigoi どういう問題が解き易いか、というのもありますが、どのように問題を解くか、ということもあると思います。

2011-07-19 12:28:16
極端流形式仕様 初代𝕍𝕚𝕖𝕟𝕟𝕒𝕋𝕒𝕝𝕜𝕖𝕣 @tomooda

あるあるツ その点、PythonやSmalltalkは保守的すぎやしないかと思ったりもする。たぶんこの辺は言語というより社会の問題だね。 RT @kazu_yamamoto: しかし、動的なのに仕様がコロコロ変わる言語は、一体何なのかね?。。。

2011-07-19 12:28:48
山本和彦 @kazu_yamamoto

.@pokarim @keigoi 僕が静的言語を好きなのは、コンパイラーがたくさんの間違いを見付けてくれるからです。もちろん見付けてくれない間違いもあります。逆に動的言語は、それを犠牲にして何を与えてくれるのか知りたいです。

2011-07-19 12:29:22
pokarim @pokarim

@kazu_yamamoto @keigoi 自分の感覚ですが、仕事でちょっとしたWebアプリを実装するときは静的型チェックの必要性をそれほど感じません。リアクティブDBの実装をしているときには無いと困ります。

2011-07-19 12:32:27
Keigo Imai @keigoi

@pokarim @kazu_yamamoto 五十嵐先生が今年のPPLで発表されていた依存型の型システムでは、契約(contract)の違反がコンパイル時に検出できない部分は実行時に判定しているようでした(うろ覚えです)。 http://t.co/wqxpHqT (PDF)

2011-07-19 12:32:44
山本和彦 @kazu_yamamoto

.@pokarim @keigoi 軽く作ったWebアプリでは、あとからセキュリティーで泣きをみることになりませんか?

2011-07-19 12:33:54