- 1、本文档共77页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C言语と机械语-TauraLaboratory.ppt
ポインタ捏造をさせないための二つの基本アプローチ 「動的に(実行時に)」保証する: 多くのスクリプト言語, Lisp, Schemeなど 動的な型検査を行う 「静的に(実行前に)」保証する: Java, ML, Haskellなど 静的な型付けを行う 動的な保証 Foo o = new Foo();if (…) { o = 918; }o.f = 10; 実例: Python, Ruby, Lisp, Scheme, Prolog, JavaScript, … 動的な型検査 実行時にoがfというフィールドを持つデータでなければエラー 動的な保証(動的型検査)の仕組み 最低の基本: X番地に割り当てられたデータ(アドレスX)と 整数のX が実行時に区別できるようにするデータのタグ付け 例 X番地: 整数のX X X 1 0 動的型検査 より一般には, 実行時に「そのデータの型(種類)」が分かるようにデータを表現しておく あらゆる操作が「正しい型」のデータに対して行われているかどうかを実行時に検査する 行われていなければ実行時に「型エラー」がおきる 静的な保証 Foo o = new Foo();if (…) { o = 918; }o.f = 10; Foo f = new Foo();Bar b = new Bar();f = b; /* これも同様にエラー */ 実例: Java, ML, etc. 静的な型安全保証 そもそもこういう代入をさせない 実行前(コンパイル時)に検出, 「禁止」 静的型検査(静的な型付け) (理想的には)目的: 実行時に型エラーが起きないことを実行前に保証する 型エラーを起こす可能性があるプログラムはそもそも実行させない 静的型付けの基本的仕組み 最も単純な静的型付け: すべての変数には一種類の型の値しか代入できない 配列や構造体の要素も同様 ? プログラム中に現れるすべての式の型が静的に(実行前に)一通りに決まる 代入文(や引数渡し)は, 両者の型が一致しなければ実行前にエラーとする 例 class Foo { int x; }class Bar { Foo f; } Bar b = …;if (…) { b = 918; } /* Bar = int ? エラー */b = new Foo(); /* Bar = Foo ? エラー */b.f = new Foo(); /* Foo = Foo ? OK */ Bar[] a = …;a[i].f.x = 13; /* int = int ? OK */ 動的保証 vs. 静的保証 動的 … 遅い 間違ったプログラムに対する「安全網」にはなるが, そもそもの間違い防止にはならない 静的 … 理想的には実行時の型検査不要 ある部分の間違い(型の間違い)を自動的に発見 一見理想的(Cなみに速い, だが安全) 欠点は?? 単純な静的型付け言語の弱点 柔軟性の欠如: 制約が厳しすぎる(実行すればエラーを起こさないプログラムも静的な型エラーとなることがある) 再利用性の欠如: 静的な型エラーを起こさないようにすると, 無駄な重複の多いプログラムになってしまう 「すべての式の型が静的に(実行前に)一通りに決まる」という制約から生ずる 例 Fooの配列とBarの配列を整列する関数は例えアルゴリズムが同じでも別々に書かなければならない Sort(Foo[] a) { … } Sort(Bar[] b) { … } 同様の例: 可変長配列, ハッシュ表, etc. 「型によらず共通なアルゴリズム」を一つのコードで書く方法がない ?もう少し複雑な静的型システム 柔軟性と安全性の両立 多相型 オブジェクト指向言語における継承?部分型 型変数による多相, テンプレート 継承?部分型 class Point2D { int x; int y; }; class Point3D extends Point2D { int z; }/* 許してもOKなのは? */Point2D a = new Point3D(); /* 2D = 3D */Point3D b = new Point2D(); /* 3D = 2D */a.x + a.yb.x + b.y + b.z 部分型による多相 Pont2D の変数 p に入っているのは今や実際には, Point2Dおよびそれを継承(extends)したクラスのオブジェクト なんであれ p.x, p.y を持つことが保証される p.z は静的型エラー(たとえ偶然 Point3D であっても実行前にエラーとなる) Quiz Point2D[] p = …; /* Poi
您可能关注的文档
- 2014年第三届天津武清开发区杯国际马拉松.doc
- 2015年宁夏灌区春小麦生产试验汇总.doc
- 2015年江西省南昌市南昌县中考物理二模试卷.doc
- 2015年秋季拉网大检查检查方案.doc
- 2015年高考全国1卷(物理部分).doc
- 2016学年度下学期二年级生活音乐领域教学计画.doc
- 2016年口腔执业医师《口腔解剖生理学》考试大纲.doc
- 2017北京高考理综冲刺压轴卷(含答案).doc
- 22_后纵韧带骨化症.doc
- 26-欢迎进入桃园县建德国小网路邮局.ppt
- GB/T 45498.2-2025中华人民共和国社会保障卡一卡通规范 第2部分:应用规范.pdf
- GB/T 37507-2025项目、项目群和项目组合管理项目管理指南.pdf
- 《GB/T 45498.3-2025中华人民共和国社会保障卡一卡通规范 第3部分:安全规范》.pdf
- 中国国家标准 GB/T 37507-2025项目、项目群和项目组合管理项目管理指南.pdf
- 中国国家标准 GB/T 20236-2025非金属材料的聚光加速户外暴露试验方法.pdf
- 《GB/T 20236-2025非金属材料的聚光加速户外暴露试验方法》.pdf
- 《GB/T 9065.2-2025液压传动连接 软管接头 第2部分:24°锥形》.pdf
- 中国国家标准 GB/T 33523.600-2025产品几何技术规范(GPS) 表面结构:区域法 第600部分:区域形貌测量方法的计量特性.pdf
- 《GB/T 33523.600-2025产品几何技术规范(GPS) 表面结构:区域法 第600部分:区域形貌测量方法的计量特性》.pdf
- GB/T 33523.600-2025产品几何技术规范(GPS) 表面结构:区域法 第600部分:区域形貌测量方法的计量特性.pdf
最近下载
- 大数据环境下电商用户行为分析与预测论文.docx VIP
- 《光纤温度传感器》.ppt
- 免疫性血小板减少症护理.pptx VIP
- Python编程基础与应用--课件0103使用PIP管理Python库.pptx VIP
- (2025春新教材)外研版三年级英语下册Unit 3 Yummy food 教学设计.docx VIP
- WH∕T 65-2014 电子图书元数据规范.pdf
- 汕头职业技术学院消防维保服务项目需求书.docx
- J B∕T 8856-2018 -溶解乙炔设备.pdf
- 毕业论文(设计)济宁三号煤矿7.0Mt-a新井设计.docx VIP
- 2024年高二上学期期中英语测试卷+听力(原卷+解析).docx
文档评论(0)