向编程语言中添加关系抽象

D. Wile
{"title":"向编程语言中添加关系抽象","authors":"D. Wile","doi":"10.1145/99569.99833","DOIUrl":null,"url":null,"abstract":"‘The most successful formal method is abstraction. Functional abstraction, abstract data types, objectoriented type-inheritance, and built-in high-level modeling primitives, like sets, sequences, and maps (with their attendant operators), all raise the level of language with which programmers communicate and hence, promote the production of dependable, adaptable software. Relational abstraction is an abstraction mechanism that has had too little emphasis in the development of programming languages. We have found it to be a useful adjunct to the other abstraction mechanisms mentioned above; in effect,ion mechanisms mentioned above; in effect, relational access to data can be used to regularize idiosyncratic usage of abstract data types. I have designed and implemented a set of macros in Common Lisp that extends it to allow definition, update and queries of abstract relations. It is unusual in that the relations are lightweight: relations are not necessarily the repositories of ‘bulk data’, but are lised as a common abstraction of a wide variety of conventional program data structures. In this paper principles for integrating relational access into programming languages in general are put forth and demonstrated through this design. Of special interest is the ability to compile these abstractions into arbitrary data structures without fear of penalties from poor implementations or run-time overhead. *Sponsored by Defense Advanced Research Projects .\\gency, Information Science and Technology Office, ARPA Order No. 6096, issued by Defense Supply Service (Washington) under contract no. MDA903-87-C-0641 Permission to copy without fee all or part of this material is granted provided that the copies are not made or distributed for direct commercial advantage, the ACM copyright notice and the title of the publication and its date appear, and notice is given that copying is by permission of the Association for Computing Machinery. To copy otherwise, or to republish, requires a fee and/or specific permission. @ 1990 ACM 089791.4155/90/0010-0128...$1.50 1 Abstraction Methods lLIost researchers identify formal methods with methodological support for the production of software, often independent of the programming languages used. However, linguistic support for formal methods embodied in programming language design can sometimes aid the methodologies considerably. In some sense, when a methodology is understood well enough, support for it migrates into programming languages themselves. For example, ‘top down programming’ as a methodology preceded the ‘gotoless’ languages with their enhanced support for looping and, especially, exiting control. Similarly, ‘abstracting data access’ as a methodology preceded language support for ‘abstract data types.’ The use of abstraction, “reduction to a short statement of the most important ideas,‘” is a formal method for separating concerns: people are encouraged to reason about properties made evident by abstraction before dealing with properties involving details masked by abstraction. Software development methods abstract some aspect of the programming process in order to reduce the variety and complexity of details considered by a programmer at any one time, and hence over time, the totality of the details","PeriodicalId":429108,"journal":{"name":"Formal Methods in Software Development","volume":"100 1","pages":"0"},"PeriodicalIF":0.0000,"publicationDate":"1990-04-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":"5","resultStr":"{\"title\":\"Adding relational abstraction to programming languages\",\"authors\":\"D. Wile\",\"doi\":\"10.1145/99569.99833\",\"DOIUrl\":null,\"url\":null,\"abstract\":\"‘The most successful formal method is abstraction. Functional abstraction, abstract data types, objectoriented type-inheritance, and built-in high-level modeling primitives, like sets, sequences, and maps (with their attendant operators), all raise the level of language with which programmers communicate and hence, promote the production of dependable, adaptable software. Relational abstraction is an abstraction mechanism that has had too little emphasis in the development of programming languages. We have found it to be a useful adjunct to the other abstraction mechanisms mentioned above; in effect,ion mechanisms mentioned above; in effect, relational access to data can be used to regularize idiosyncratic usage of abstract data types. I have designed and implemented a set of macros in Common Lisp that extends it to allow definition, update and queries of abstract relations. It is unusual in that the relations are lightweight: relations are not necessarily the repositories of ‘bulk data’, but are lised as a common abstraction of a wide variety of conventional program data structures. In this paper principles for integrating relational access into programming languages in general are put forth and demonstrated through this design. Of special interest is the ability to compile these abstractions into arbitrary data structures without fear of penalties from poor implementations or run-time overhead. *Sponsored by Defense Advanced Research Projects .\\\\gency, Information Science and Technology Office, ARPA Order No. 6096, issued by Defense Supply Service (Washington) under contract no. MDA903-87-C-0641 Permission to copy without fee all or part of this material is granted provided that the copies are not made or distributed for direct commercial advantage, the ACM copyright notice and the title of the publication and its date appear, and notice is given that copying is by permission of the Association for Computing Machinery. To copy otherwise, or to republish, requires a fee and/or specific permission. @ 1990 ACM 089791.4155/90/0010-0128...$1.50 1 Abstraction Methods lLIost researchers identify formal methods with methodological support for the production of software, often independent of the programming languages used. However, linguistic support for formal methods embodied in programming language design can sometimes aid the methodologies considerably. In some sense, when a methodology is understood well enough, support for it migrates into programming languages themselves. For example, ‘top down programming’ as a methodology preceded the ‘gotoless’ languages with their enhanced support for looping and, especially, exiting control. Similarly, ‘abstracting data access’ as a methodology preceded language support for ‘abstract data types.’ The use of abstraction, “reduction to a short statement of the most important ideas,‘” is a formal method for separating concerns: people are encouraged to reason about properties made evident by abstraction before dealing with properties involving details masked by abstraction. Software development methods abstract some aspect of the programming process in order to reduce the variety and complexity of details considered by a programmer at any one time, and hence over time, the totality of the details\",\"PeriodicalId\":429108,\"journal\":{\"name\":\"Formal Methods in Software Development\",\"volume\":\"100 1\",\"pages\":\"0\"},\"PeriodicalIF\":0.0000,\"publicationDate\":\"1990-04-01\",\"publicationTypes\":\"Journal Article\",\"fieldsOfStudy\":null,\"isOpenAccess\":false,\"openAccessPdf\":\"\",\"citationCount\":\"5\",\"resultStr\":null,\"platform\":\"Semanticscholar\",\"paperid\":null,\"PeriodicalName\":\"Formal Methods in Software Development\",\"FirstCategoryId\":\"1085\",\"ListUrlMain\":\"https://doi.org/10.1145/99569.99833\",\"RegionNum\":0,\"RegionCategory\":null,\"ArticlePicture\":[],\"TitleCN\":null,\"AbstractTextCN\":null,\"PMCID\":null,\"EPubDate\":\"\",\"PubModel\":\"\",\"JCR\":\"\",\"JCRName\":\"\",\"Score\":null,\"Total\":0}","platform":"Semanticscholar","paperid":null,"PeriodicalName":"Formal Methods in Software Development","FirstCategoryId":"1085","ListUrlMain":"https://doi.org/10.1145/99569.99833","RegionNum":0,"RegionCategory":null,"ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":null,"EPubDate":"","PubModel":"","JCR":"","JCRName":"","Score":null,"Total":0}
引用次数: 5

摘要

“最成功的形式化方法是抽象。功能抽象、抽象数据类型、面向对象的类型继承,以及内置的高级建模原语,如集合、序列和映射(及其伴随的操作符),都提高了程序员使用的语言水平,从而促进了可靠的、可适应的软件的生产。关系抽象是一种抽象机制,在编程语言的开发中很少得到重视。我们发现它是上面提到的其他抽象机制的一个有用的辅助;实际上,上述离子机制;实际上,对数据的关系访问可以用来规范抽象数据类型的特殊用法。我在Common Lisp中设计并实现了一组宏,这些宏对Common Lisp进行了扩展,允许定义、更新和查询抽象关系。不寻常的是,关系是轻量级的:关系不一定是“批量数据”的存储库,而是作为各种常规程序数据结构的公共抽象。本文提出了将关系访问集成到一般编程语言中的原则,并通过该设计进行了论证。特别令人感兴趣的是将这些抽象编译成任意数据结构的能力,而不必担心由于实现不佳或运行时开销而受到惩罚。*由国防高级研究计划局,信息科学与技术办公室,ARPA第6096号订单赞助,由国防供应服务(华盛顿)根据合同号发布。MDA903-87-C-0641授予免费复制全部或部分本材料的许可,前提是该副本不是为直接商业利益而制作或分发的,必须出现ACM版权声明、出版物标题和日期,并注明复制是由计算机协会许可的。以其他方式复制或重新发布需要付费和/或特定许可。抽象方法(abstract Methods)抽象方法研究人员通过对软件生产的方法学支持来确定形式化方法,这些方法通常独立于所使用的编程语言。然而,在编程语言设计中体现的对形式化方法的语言支持有时可以极大地帮助方法论。在某种意义上,当一种方法被理解得足够好时,对它的支持就会迁移到编程语言本身。例如,“自顶向下编程”作为一种方法先于“无gotolless”语言,因为它们增强了对循环的支持,特别是对退出控制的支持。类似地,“抽象数据访问”作为一种方法先于语言对“抽象数据类型”的支持。抽象的使用,“将最重要的思想简化为简短的陈述”,是分离关注点的一种正式方法:鼓励人们在处理包含被抽象掩盖的细节的属性之前,先对通过抽象变得明显的属性进行推理。软件开发方法抽象了编程过程的某些方面,以便减少程序员在任何时候考虑的细节的多样性和复杂性,因此随着时间的推移,细节的总体
本文章由计算机程序翻译,如有差异,请以英文原文为准。
Adding relational abstraction to programming languages
‘The most successful formal method is abstraction. Functional abstraction, abstract data types, objectoriented type-inheritance, and built-in high-level modeling primitives, like sets, sequences, and maps (with their attendant operators), all raise the level of language with which programmers communicate and hence, promote the production of dependable, adaptable software. Relational abstraction is an abstraction mechanism that has had too little emphasis in the development of programming languages. We have found it to be a useful adjunct to the other abstraction mechanisms mentioned above; in effect,ion mechanisms mentioned above; in effect, relational access to data can be used to regularize idiosyncratic usage of abstract data types. I have designed and implemented a set of macros in Common Lisp that extends it to allow definition, update and queries of abstract relations. It is unusual in that the relations are lightweight: relations are not necessarily the repositories of ‘bulk data’, but are lised as a common abstraction of a wide variety of conventional program data structures. In this paper principles for integrating relational access into programming languages in general are put forth and demonstrated through this design. Of special interest is the ability to compile these abstractions into arbitrary data structures without fear of penalties from poor implementations or run-time overhead. *Sponsored by Defense Advanced Research Projects .\gency, Information Science and Technology Office, ARPA Order No. 6096, issued by Defense Supply Service (Washington) under contract no. MDA903-87-C-0641 Permission to copy without fee all or part of this material is granted provided that the copies are not made or distributed for direct commercial advantage, the ACM copyright notice and the title of the publication and its date appear, and notice is given that copying is by permission of the Association for Computing Machinery. To copy otherwise, or to republish, requires a fee and/or specific permission. @ 1990 ACM 089791.4155/90/0010-0128...$1.50 1 Abstraction Methods lLIost researchers identify formal methods with methodological support for the production of software, often independent of the programming languages used. However, linguistic support for formal methods embodied in programming language design can sometimes aid the methodologies considerably. In some sense, when a methodology is understood well enough, support for it migrates into programming languages themselves. For example, ‘top down programming’ as a methodology preceded the ‘gotoless’ languages with their enhanced support for looping and, especially, exiting control. Similarly, ‘abstracting data access’ as a methodology preceded language support for ‘abstract data types.’ The use of abstraction, “reduction to a short statement of the most important ideas,‘” is a formal method for separating concerns: people are encouraged to reason about properties made evident by abstraction before dealing with properties involving details masked by abstraction. Software development methods abstract some aspect of the programming process in order to reduce the variety and complexity of details considered by a programmer at any one time, and hence over time, the totality of the details
求助全文
通过发布文献求助,成功后即可免费获取论文全文。 去求助
来源期刊
自引率
0.00%
发文量
0
×
引用
GB/T 7714-2015
复制
MLA
复制
APA
复制
导出至
BibTeX EndNote RefMan NoteFirst NoteExpress
×
提示
您的信息不完整,为了账户安全,请先补充。
现在去补充
×
提示
您因"违规操作"
具体请查看互助需知
我知道了
×
提示
确定
请完成安全验证×
copy
已复制链接
快去分享给好友吧!
我知道了
右上角分享
点击右上角分享
0
联系我们:info@booksci.cn Book学术提供免费学术资源搜索服务,方便国内外学者检索中英文文献。致力于提供最便捷和优质的服务体验。 Copyright © 2023 布克学术 All rights reserved.
京ICP备2023020795号-1
ghs 京公网安备 11010802042870号
Book学术文献互助
Book学术文献互助群
群 号:481959085
Book学术官方微信