新しいものを表示
orange さんがブースト

異常終了というか例外をはく事を「駄目です!」って表現した><

orange さんがブースト

あ、「駄目です」は異常終了を含んでます?ならおkかも

スレッドを表示
orange さんがブースト

ワイ「hoge型が想定されてるストレージにfuga型書き込んだろwww」
プログラム「はい型が違いま〜すwww異常終了!!!」

↑ みたいな例を考えたとき、異常終了が必ず保証されているならこれは型安全性を破ったことにならない

orange さんがブースト

なんらかの結果、ある場所にhoge型として値が書き込まれたとして、「よーし、fuga型の値として扱うぞ」ってなった時に

型安全・明示的「駄目です。それはhoge型での値で、fuga型として扱うなら明示的に指定してくれたら互換性がある型なので変換できます」
型安全・暗黙的「互換性があるのでだいじょうぶ! 変換しとくね!」
型安全じゃ無い「ええんやない? 知らんけど」
かも?><

mstdn.nere9.help/@orange_in_sp

オレンジのこの説明だと「32bit整数型? 知るか! 32bit float型としてアクセスしてやる!」ってつまり情報無視での扱いも型安全って事になっちゃうからダメだね><;

orange さんがブースト

そもそもそういう考え方は「アドレス」という概念を持たない言語に対して全く効力がないので、モデル化に失敗していると思う

orange さんがブースト
orange さんがブースト

例えば hoge+fuga を piyopiyo番地に書けって命令を実行したとして、
で、そのあとにpiyopiyo番地~のメモリを見て、「ところでここにあるバイナリはなに?><」ってなった時に「さぁ・・・?」ってなるのが型安全じゃなくて、「なんとか型でかんとかって値が置いてあります!」ってわかるのが型安全
って事じゃないの?><;

orange さんがブースト

その文脈での「マシさ」には度合いがあって、動的型付き言語はそのマシさにおいて最底辺に近い、ということをわかってほしいという話

スレッドを表示
orange さんがブースト

あらゆる不都合な動作を「例外が飛びます」とか「終了コード127でプログラムが終了します」とかの “定義済の挙動/状態” へと飛ばしてしまえばそれは “型安全” な言語になるんだけど、それで? という話でしかない。
極論を言えば「未定義動作で必ず abort() する拡張されたC言語」みたいなものがあったらそれは型安全といえるはず。
で、サイレントに狂わなくなるのは確かにだいぶマシではあるが、所詮マシなだけなのよね

スレッドを表示

それはそうだけどJavaは定義上型安全で、学校のテストで「Javaは型安全な環境であるか?」に「違う!><」って書いたら不正解なんでしょ?><;

orange さんがブースト

で、定義済の挙動であることはわかったけど、そもそも実行時に型エラーが出るようなプログラムを実行できてしまうのは本当に嬉しさ十分なんですか? というのが、開発者が向き合うべき本当の問題なのよ

スレッドを表示
orange さんがブースト

たとえば「Javaは型安全です!」というのは「Javaの書き換え可能な配列型は共変なんだけど、型エラーの際には ArrayStoreException が飛ぶという定義済の挙動になるから、プログラム全体としての振る舞いはちゃんと想定されたものになっています!」というのを含意している、ということをまず了解する必要がある。

オレンジ的にも心情的にPerlも古典的BASICも「どこが型安全なんだよ!><;」って思ってるけど、
そう思いながら「Adaがもっと普及するべき!><# 」ってブーブー言いながら調べた時に「型安全って言葉はそういう意味じゃないですよ」になって「そうなの?><; 変なの!><;」になったので、混乱してる><

orange さんがブースト

結局、型安全の話って、いろんなのが入り混じってて整理しきってないよね、いや、整理はされてるんだけど、それをきっちり理解してる人って少ないよねという。
俺も理解しているうちには入らない。

orange さんがブースト

Perlは型安全なのかというと、気持ち悪いの一言に尽きる。PHPはもっと気持ち悪い。結局Rubyで落ち着いている。

古いものを表示
:realtek:

思考の /dev/null