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

良い喩えかは知らないけど、「この車は状況と操作に対して必ず再現性のある振る舞いをします。たとえば時速128kmでブレーキを踏むとブレーキは壊れて確実に効かなくなります!」というのは型安全のいう “安全” の範疇なわけ。クソ。
我々が求める安全性ってのはそうじゃなくて「ブレーキが壊れて効かなくなるような速度をそもそも出せません」でしょう

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

じゃあ “実用的” な観点での型システムが保証してくれる安全性とは何なのかといえば、「『はい異常終了!!!』とか『手遅れになってから例外飛ばしてあげるね♡』とかいう挙動がそもそも起きない」という点で、巷で言われている安全とかそうでないとか静的型付きがどうとかの話はだいたいこれ

スレッドを表示

CはTaPLでも型安全では無い言語って扱われてるんじゃないの?><;

orange さんがブースト

狭義の型安全性すら持たない実用言語、探してくる方が難しいぞ (言うまでもないが C/C++ はカウントしない)

orange さんがブースト

例外として C/C++ はそのベースラインを大幅に下回る史上最強の殿堂入りクソ言語です、掛け値なしに

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

だから結局のところ型安全かどうかをというのは言語や型システムの設計者の心配事なのであって、ユーザはそれを当然のベースライン保証として考えるんだから、巷の実用言語について “型安全性” を論ずることに実用的な意味はほとんどなくない? ということです

orange さんがブースト

型安全の範疇ではあるかもしれないが、その有難味は如何程か、という話

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

mastodon.cardina1.red/@lo48576

で、プログラム書いてるとき気付けなくて実際にある程度動かしてから突然「はい異常終了!」と言われるの、未定義動作より “少しマシ” な程度でしかなくない? という

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番地~のメモリを見て、「ところでここにあるバイナリはなに?><」ってなった時に「さぁ・・・?」ってなるのが型安全じゃなくて、「なんとか型でかんとかって値が置いてあります!」ってわかるのが型安全
って事じゃないの?><;

古いものを表示
:realtek:

思考の /dev/null