アカウント名:
パスワード:
IRubyでは配列の範囲外を参照しようとすると例外。本家、rubyではnil。C#やJava、VBでは例外を吐くので面喰いました
オリジナルの仕様を採用しているPascalを使ってください、というかみんなそれを真似た処理系作ってくださいと言いたいコンパイル時に配列のレンジチェックをオンにすれば、ちゃんとランタイムエラーで安全にアボートしてくれますエラーをトラップしてリカバリーの出来る処理系もありますレンジチェックをオフにすれば速くなります
IRubyでは配列の範囲外を参照しようとすると例外。
IRubyを選んでいる時点でユーザーは処理速度など気にしていないのだから、rubyの仕様の方がありがたい
> ちゃんとランタイムエラーで安全にアボートしてくれます
それ単に例外がなかった時代の死に方であって、オリジナルというほどのものでもないと思う。
> レンジチェックをオフにすれば速くなります
でもたぶんPascalの仕様には違反してるよね。やっぱりC/C++は邪悪すぎる。
> IRubyを選んでいる時点でユーザーは処理速度など気にしていないのだから、rubyの仕様の方がありがたい
nilを返すにも結局境界チェックは必要だろ。
>nilを返すにも結局境界チェックは必要だろ。それがどうもCRubyの場合、境界チェックはしておらず、配列の最後にからの領域があるのでたまたまnilがかえって来ていたようです
http://code.kzakza.com/2011/09/ruby1-8-7-array-slice/ [kzakza.com]Ruby(1.8.7〜1.9.0)の配列の末尾には見えない要素があるらしい。
デマを飛ばすのはよくない。
ソースがRuby初心者のページじゃないですか。たとえ話を誤解して真に受けているようにしか見えないんですが。
そもそもそれだとa[100000]とかやったらどうなるのか?
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
身近な人の偉大さは半減する -- あるアレゲ人
添え字がオーバーフローしたときの動作 (スコア:0)
IRubyでは配列の範囲外を参照しようとすると例外。本家、rubyではnil。
C#やJava、VBでは例外を吐くので面喰いました
Re:添え字がオーバーフローしたときの動作 (スコア:0)
オリジナルの仕様を採用しているPascalを使ってください、というかみんなそれを真似た処理系作ってくださいと言いたい
コンパイル時に配列のレンジチェックをオンにすれば、ちゃんとランタイムエラーで安全にアボートしてくれます
エラーをトラップしてリカバリーの出来る処理系もあります
レンジチェックをオフにすれば速くなります
IRubyでは配列の範囲外を参照しようとすると例外。
IRubyを選んでいる時点でユーザーは処理速度など気にしていないのだから、rubyの仕様の方がありがたい
Re: (スコア:0)
> ちゃんとランタイムエラーで安全にアボートしてくれます
それ単に例外がなかった時代の死に方であって、オリジナルというほどのものでもないと思う。
> レンジチェックをオフにすれば速くなります
でもたぶんPascalの仕様には違反してるよね。やっぱりC/C++は邪悪すぎる。
> IRubyを選んでいる時点でユーザーは処理速度など気にしていないのだから、rubyの仕様の方がありがたい
nilを返すにも結局境界チェックは必要だろ。
Re: (スコア:0)
>nilを返すにも結局境界チェックは必要だろ。
それがどうもCRubyの場合、境界チェックはしておらず、配列の最後にからの領域があるのでたまたまnilがかえって来ていたようです
http://code.kzakza.com/2011/09/ruby1-8-7-array-slice/ [kzakza.com]
Ruby(1.8.7〜1.9.0)の配列の末尾には見えない要素があるらしい。
Re: (スコア:0)
デマを飛ばすのはよくない。
ソースがRuby初心者のページじゃないですか。
たとえ話を誤解して真に受けているようにしか見えないんですが。
そもそもそれだと
a[100000]とかやったらどうなるのか?