新しいものを表示

ていうか、今の議論で今さらふと気づいたけど、古典的BASICって、厳密には動的型つけ環境じゃなくて静的型つけ環境であり、
バリアント型は持っていても動的型は持っていないのでつまり定義上、環境としては静的型検査は行われないのに(ただしプログラム実行時に行単位で静的型検査をしてるとも言える?)、しかしながら静的型つけな言語?><;

orange さんがブースト

C/C++ は、あれだけ使われていながら、すべての実行可能な記述について挙動がちゃんと定義されているわけではないという、類稀なるクソ言語です (歴史的経緯ェ……)

実用性はそれはそうだけど、TaPLとかで説明されてる型安全はそうではなく、C/C++は、そういう厳密な意味で型安全では無い環境ではないの?><;

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 さんがブースト

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

古いものを表示
:realtek:

思考の /dev/null