動的型言語のふわふわ感

38
Hideyuki Tanaka @tanakh

動的型のプログラミング言語がなぜ日本では軽量とみなされるようになったのか。これが一つの謎である。動的型はすなわちバグの発生を遅延しているに過ぎないのであるが、それを軽量というのであれば世の中のプログラムというものは正確さを必ずしも要求されないということだろうか。

2011-07-18 18:09:21
極端流形式仕様 初代𝕍𝕚𝕖𝕟𝕟𝕒𝕋𝕒𝕝𝕜𝕖𝕣 @tomooda

正確さだけが絶対なら有限精度の数値型を使うべきではないですね。 RT @tanakh それを軽量というのであれば世の中のプログラムというものは正確さを必ずしも要求されないということだろうか。

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

動的型でも強い型付けをしているのであれば、型安全メモリ安全は確保されていると思うのですが。 RT @tanakh ええと、正確さというのには色々意味があるかと思いますが、このコンテクストでは型安全とかメモリ安全とかの話です・・・

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

動的型エラーが問題になるのはむしろ静的型での動的型検査では? RT @tanakh @tomooda たしかにそうですが、なんというか、well-typedというか、動的方エラーが起こらないというか、なんというか

2011-07-18 18:36:09
Hideyuki Tanaka @tanakh

@tomooda 動的型付け言語では問題になりませんか?

2011-07-18 18:36:34
極端流形式仕様 初代𝕍𝕚𝕖𝕟𝕟𝕒𝕋𝕒𝕝𝕜𝕖𝕣 @tomooda

「動的型言語での動的型エラー」が何を指しているのか不明なので、定義か例を挙げてもらえますか? RT @tanakh @tomooda 動的型付け言語では問題になりませんか?

2011-07-18 18:45:39
Hideyuki Tanaka @tanakh

@tomooda Rubyで1+"hoge"とかしたケースですね

2011-07-18 18:46:24
極端流形式仕様 初代𝕍𝕚𝕖𝕟𝕟𝕒𝕋𝕒𝕝𝕜𝕖𝕣 @tomooda

というのも、私の理解では動的型エラーは表現式の静的型と値の動的型の不整合なので、純粋な動的型では発生しません。あるとすれば、期待していない値に対する例外であって、これは静的型でも同様です。 RT @tanakh @tomooda 動的型付け言語では問題になりませんか?

2011-07-18 18:52:26
極端流形式仕様 初代𝕍𝕚𝕖𝕟𝕟𝕒𝕋𝕒𝕝𝕜𝕖𝕣 @tomooda

すみません、行き違いになりました。それは「期待していない値を受けたことを表す例外が発生する」ということですよね? RT @tanakh @tomooda Rubyで1+"hoge"とかしたケースですね

2011-07-18 18:55:34
極端流形式仕様 初代𝕍𝕚𝕖𝕟𝕟𝕒𝕋𝕒𝕝𝕜𝕖𝕣 @tomooda

.@tanakh 静的型検査で「期待していない値」を格段に減らせます。それは静的型言語のメリットです。一方、動的型言語では、「期待していない値」を敢えて受け付けて何らかの処理をする自由度が残されます。どちらか一方が一方的に優位だというものではないと思います。

2011-07-18 19:11:19
Hideyuki Tanaka @tanakh

@tomooda 動的型付けでも「期待していない値」は期待していない値だと思います。静的型付けで型付けしにくい式を簡単に記述できるのが動的型付け言語のメリットではないでしょうか。

2011-07-18 19:19:15
Hideyuki Tanaka @tanakh

@tomooda それを動的方エラーと呼ぶと思います。

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

期待していない値をどうするかを自分で決められます。コンパイラが自動的に排除するのと比べて自由度が高いです。 RT @tanakh @tomooda 動的型付けでも「期待していない値」は期待していない値だと思います。

2011-07-18 19:26:04
Hideyuki Tanaka @tanakh

@tomooda 期待していない値をコンパイル時に検出するってのをしたい場合はどうなるでしょうかね?

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

そうでしょうか?ゼロ除算は動的型エラーですか?空リストの先頭要素を取り出そうとするのも動的型エラーですか? RT @tanakh @tomooda それを動的方エラーと呼ぶと思います。

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

そういう時は静的型言語を使えばいいのでは?自由度という対価を払って。 RT @tanakh @tomooda 期待していない値をコンパイル時に検出するってのをしたい場合はどうなるでしょうかね?

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

そうですよね。だから、単に「期待していない値」だけでは動的型エラーの定義にはなりません。そこで、動的型言語での動的型エラーとやらとランタイムエラーの違いを示して頂きたいわけです。 RT @tanakh @tomooda ええと、型エラーと単なるランタイムエラーは違いますよ

2011-07-18 19:49:23
Hideyuki Tanaka @tanakh

@tomooda 1+"hoge" はそれに相当すると思いますけども・・・。

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

1+"hoge"がランタイムエラーではない本質的理由は何でしょうか?例外の名前以外で。 RT @tanakh @tomooda 1+"hoge" はそれに相当すると思いますけども・・・。

2011-07-18 19:56:48
しろくろきつね @skn9x

@tanakh @tomooda 『 1 + "hoge" 』 は型エラーじゃなくて 『 "1hoge" 』 になってほしいなぁ。要は「期待する値」が人によって様々で、それを受け止める側の言語仕様も様々、だから話がややこしく。

2011-07-18 21:06:30
極端流形式仕様 初代𝕍𝕚𝕖𝕟𝕟𝕒𝕋𝕒𝕝𝕜𝕖𝕣 @tomooda

その「人によって様々」なものを凝集させるのも優れた言語の要件だとおもいます。pythonの「やり方は1つだけ」もそこを目指していると思います。RT @skn9x @tanakh 要は「期待する値」が人によって様々で、それを受け止める側の言語仕様も様々、だから話がややこしく。

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

+君には「引数の型を要求するな。それは静的型のやり方だ。おまえも動的型の端くれなら、おまえが引数として来る値を処理するんだ。」と言ってあげたい。RT @skn9x: @tanakh 『 1 + "hoge" 』 は型エラーじゃなくて 『 "1hoge" 』 になってほしいなぁ。

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

動的型付=静的型付-静的型検査 と思っている人には、動的型付では静的型付で保証されているアレコレが保証されていない、つまり劣っている、と思えるんだろうな。でもそれって、英語ネイティブが日本語のことを「主語がない文ばかりで非論理的」と言うのと同じ構図なんだよな。

2011-07-19 07:32:15
Hideyuki Tanaka @tanakh

なんか話が変になってるけど、1+"hoge"がどういう値になるべきか、じゃなくて、実際にRubyでは1+"hoge"はランタイムの型エラーになっているということを言っているのだけど…。+がどういう型を持つべきかじゃなくて、実際にそういう型を持っているような振る舞いをしているんです

2011-07-19 07:35:49
Hideyuki Tanaka @tanakh

そういうことで、動的型付け言語でも型エラーにしたい振る舞いは実際にあるのだし、そういうケースはコンパイル時にチェックできたほうがいい。そういう点では純粋に動的型付け言語は劣っている。動的型付け言語が優れているのは、プログラムに静的型をつけなくても実行出来るという点であって、

2011-07-19 07:39:12
1 ・・ 5 次へ