やっぱり動的言語では安全なソフトは作れない
レス数が950を超えています。1000を超えると書き込みができなくなります。
0981デフォルトの名無しさん
2011/05/28(土) 11:04:28.13たとえば組み込み型のnilとconsで定義されたリスト[]形とユーザー定義のNIL、CONSで定義されるList形があって
これを大抵fromList::List->[]、toList::[]->Listという変換関数を用いる事で混在して使用するところを
[]に対する操作fがListに対しても同じように適用できてその操作をFと仮定すれば
fをListに適用するときに自動的にFを生成してそれを適用することができる
これが安全に適用可能な条件として変換元の型と変換先の型が自然同型であるというのがあるんだけど
その証明をユーザーが提供することでこの自動変換機構を安全に処理系が提供することができる・・・と
再帰的に定義された型同士なんかではそれこそ処理系がその証明を自動で行うことすら可能だ
でこれを応用すると二つの同型である型を行き来しながら処理を行うコードに対して
変換関数の適用回数を多くても一回にする、というような最適化が可能になるという利点も
そこまでいかなくてもformなんとかとtoなんとかが何回も出てくるコードが見やすくなるというのは確実だ
で、これをphpの例でよくある文字列<->数値の相互変換というもので使おうとすると
どう変換関数を定義しても自然同型という性質が証明できないんで、自然同型であるものと比べて危険な変換であるというのがわかる
レス数が950を超えています。1000を超えると書き込みができなくなります。