×

C++开放式多方法的设计与评估。 (英语) Zbl 1211.68054号

摘要:多重分派——根据两个或多个参数的动态类型选择要调用的函数——是面向对象编程中几个经典问题的解决方案。开放多方法将多分派推广到开放类扩展,从而改进关注点的分离和追溯设计的规定。我们介绍了使用C++语言特性(称为开放多方法)的基本原理、设计、实现、性能、编程指南和经验。我们的开放多方法支持重复继承和虚拟继承。我们的调用解析规则概括了虚拟函数调度和重载解析语义。在使用了参数类型的所有信息之后,这些规则可以通过使用协变返回类型来解决进一步的歧义。注意将开放的多方法与现有的C++语言特性和规则相集成。我们描述了一个模型实现,并将其性能和空间需求与现有的开放式多方法扩展和C++工作区技术进行了比较。与这些技术相比,我们的方法使用更简单,捕获更多用户错误,并通过链接时间分析解决更多歧义,在内存使用方面具有可比性,运行速度明显更快。特别是,调用开放多方法的运行时成本是恒定的,并且小于双重分派(两个虚拟函数调用)的成本。最后,我们提供了一个在库的动态加载和链接存在下的开放式多方法的设计草图。

MSC公司:

68甲15 编程语言理论
PDF格式BibTeX公司 XML格式引用
全文: 内政部

参考文献:

[1] 阿格拉瓦尔,R。;Demichiel,L.G。;Lindsay,B.G.:多方法的静态类型检查(1991)
[2] Alexandrescu,A.:现代C++设计:应用的通用编程和设计模式,(2001)
[3] E.Allen、D.Chase、J.Hallett、V.Luchangco、J.-W.Maessen、S.Ryu、G.L.Steele Jr.、S.Tobin-Hochstadt,《堡垒语言规范》,技术代表,1.0版(2008年3月)
[4] 艾伦,E。;哈雷特,J。;卢昌科,V。;Ryu,S。;盖伊,J。;Steele,L.:具有多重继承的模块化多重分派,(2007)·Zbl 1197.68033号
[5] 埃米尔(Amiel,E.)。;格鲁伯,O。;Simon,E.:使用压缩调度表优化多方法调度(1994)
[6] 阿诺德,K。;戈斯林,J。;Holmes,D.:Java编程语言(2005)·Zbl 0876.68015号
[7] Austern,M.H.:通用编程和STL:使用和扩展C++标准模板库,(1998)
[8] Becker,P.:C++标准库扩展:教程和参考,(2006)
[9] P.Becker,编程语言C++标准工作草案,技术代表N2857,JTC1/SC22/WG21 C++标准委员会(2009年3月)
[10] 贝蒂尼,L。;卡佩基,S。;Venneri,B.:C++中的双重调度,软件-实践和经验36,第6期,581-613(2006)
[11] Birtwistle,G.M。;Dahl,O。;Myhrhaug,B。;Nygaard,K.:模拟开始(1973)
[12] D.Bonniot,B.Keller,F.Barber,The Nice用户手册(2008)。http://nice.sourceforge.net/manual.html
[13] L.Bourdev,J.Järvi,用最少的代码膨胀在通用编程中高效运行时调度,收录于:OOPSLA’06图书馆中心软件设计研讨会,俄勒冈州波特兰,2006年
[14] Boyland,J。;Castagna,G.:寄生方法:Java多方法的实现(1997)
[15] Bruce,K。;Cardelli,L。;卡斯塔尼亚,G。;Leavens,G.T。;Pierce,B.:关于二进制方法,Theor。实践。对象系统。1,第3期,221-242(1995)
[16] 钱伯斯,C.:《塞西尔面向对象的多方法》(1992)
[17] C.钱伯斯,《塞西尔语:规范和原理》。3.2,技术代表(2004)
[18] C.Chambers,《柴油机语言、规范和原理》(2006年)。http://www.cs.washington.edu/research/projects/cecil/www/Release/doc-diesel-lang/diesel-spect.pdf
[19] 钱伯斯,C。;Chen,W.:高效多重预测调度,(1999)
[20] 克利夫顿,C。;莱文斯,G.T。;钱伯斯,C。;Millstein,T.:Multijava:Java的模块化开放类和对称多重调度,(2000)
[21] 克利夫顿,C。;Millstein,T。;Leavens,G.T。;Chambers,C.:Multijava:设计原理、编译器实现和应用程序、ACM trans。程序。语言系统。28,第3期,517-575(2006)
[22] codesourcery.com,安腾C++ABI,技术代表(2001)
[23] 科尔曼,T.H。;Leiserson,C.E。;Rivest,R.L。;Stein,C.:算法导论(2001)·Zbl 1047.68161号
[24] 爱迪生设计集团,C++前端,网址:http://www.edg.com/(2008年7月)
[25] C.B.Flynn,D.Wonnacott,《通过辅助功能协调封装和动态调度》,《技术报告》387(1999)
[26] B.Foote,R.E.公司。Johnson,J.Noble,《单一调度语言中的高效多重方法》,摘自:《面向对象编程欧洲会议论文集》,苏格兰格拉斯哥,7月
[27] C.Frost,T.Millstein,JPred中的模块化类型安全接口调度,收录于:2006年面向对象语言的基础和开发国际研讨会,FOOL/WOOD’07,查尔斯顿,南卡罗来纳州,美国
[28] 伽玛,E。;赫尔姆·R。;约翰逊,R。;Vlissides,J.:设计模式:可重用面向对象软件的元素,(1995)·Zbl 0887.68013号
[29] Gibbs,M。;Stroustrup,B.:快速动态铸造,软。实践。专家。36,第2期,139-156(2006)
[30] Goldberg,A。;Robson,D.:Smalltalk-80:语言及其实现,(1983)·Zbl 0518.68001号
[31] 格雷戈,D。;Järvi,J。;Siek,J。;斯特劳斯特鲁普,B。;Dos Reis,G。;Lumsdaine,A.:概念:C++中泛型编程的语言支持,(2006)
[32] G.Greif,《中国调度——未发表的演讲笔记》,迪伦黑客会议,柏林(2002年7月)。http://www.opendylan.org/cgi-bin/viewcvs.cgi/trunk/www/papers/ChineseDispatch.lout?rev=8014&view=markup
[33] 国际标准化组织,ISO/IEC 10918-1:1994:信息技术-连续图像的数字压缩和编码:要求和指南,pub-ISO,pub-ISO:adr,1994
[34] ISO/IEC 14882国际标准,编程语言:C++,美国国家标准协会,1998年
[35] Järvi,J。;格雷戈,D。;Willcock,J。;Lumsdaine,A。;Siek,J.:泛型编程中的算法专门化:C++中约束泛型的挑战,(2006)
[36] Liskov,B.:主题演讲-数据抽象和层次结构(1987)
[37] L.Martin,《联合攻击战斗机,飞行器,C++编码标准》,洛克希德·马丁公司,2005年
[38] Meyer,B.:《艾菲尔:语言》,(1992)·Zbl 0779.68013号
[39] Millstein,T。;钱伯斯,C.:模块化静态类型多重方法,信息与计算175,第1期,76-118(2002)·Zbl 1012.68043号 ·doi:10.1006/inco.2002.3103
[40] Millstein,T。;雷伊,M。;钱伯斯,C.:《放松的多java:平衡扩展性和模块化类型检查》(2003)
[41] Millstein,T.D。;钱伯斯,C.:模块化静态类型多重方法,Lncs 1628(1999)·Zbl 1012.68043号
[42] Muschevic,R。;Potanin,A。;坦佩罗,E。;Noble,J.:实践中的多次派遣,(2008年)
[43] E.Panizzi,B.Pastorelli,《使用类C++对象模型的语言中的多方法和独立静态类型检查》,计算研究库(CoRR)cs。PL/0005033
[44] P.Pirkelbauer,S.Parent,M.Marcus,B.Stroustrup,《运行时概念的动态算法选择》,《计算机编程科学》,出版社(http://dx.doi.org/10.1016/j.scico.2009.04.002) ·Zbl 1197.68036号
[45] G.v.Rossum,《Python语言参考手册》,网络理论有限公司,2003年,平装本
[46] 斯科丹,M。;Quinlan,D.:用户定义优化的源到源架构,Lncs 2789(2003)·Zbl 1023.68826号
[47] 沙利特:《迪伦参考手册》(1996年)·Zbl 0900.68121号
[48] J.Smith,向C++添加Multimethods的提案草案。,技术报告N1463(2003)
[49] Snyder,A.:面向对象编程语言中的封装和继承,(1986)
[50] Jr,G.L.Steele:通用LISP:语言,(1990)·Zbl 0757.68008号
[51] Stroustrup,B.:C++的设计和发展,(1994)
[52] Stroustrup,B.:C++编程语言(2000)·Zbl 0825.68056号
[53] 斯特劳斯特鲁普,B。;Dos Reis,G.:支持高性能计算的SELL,Lncs 4339(2005)
[54] 托马斯·D·。;亨特,A.:《编程红宝石:实用程序员指南》(2000)
[55] Visser,J.:游客组合和穿越控制,(2001)
[56] Wasserrab,D。;尼普科夫,T。;打喷嚏,G。;Tip,F.:C++中多重继承的操作语义和类型安全证明,(2006)
[57] D.Wonnacott,《使用辅助函数在单一调度面向对象语言中推广动态调度》,载于:COOTS’01:第六届USENIX面向对象技术和系统会议,德克萨斯州圣安东尼奥,USENIX2001
[58] A.Wöß。;Löberbauer,M。;Mössenböck,H.:递归下降编译器生成器中的冲突解决,Lncs 2789(2003)
[59] www.boost.org,boost C++库,2008年7月4日检索
[60] www.fourcc.org,视频编解码器和像素格式定义,2007年2月20日检索
此参考列表基于出版商或数字数学图书馆提供的信息。其项与zbMATH标识符进行启发式匹配,可能包含数据转换错误。在某些情况下,zbMATH Open的数据对这些数据进行了补充/增强。这试图尽可能准确地反映原始论文中列出的参考文献,而不要求完整或完全匹配。