This paper presents Java language from an object-oriented software construction perspective. It explains the implications of banning generics and multiple inheritance of classes, and explores the patterns and the idioms used by the Java designers and programmers to redeem their benefits. The paper also discusses an alternative to multiple inheritance, as incorporated in Lava, which extends Java with constructs for type-safe automatic forwarding.
{"title":"Simulating multiple inheritance and generics in Java","authors":"Krishnaprasad Thirunarayan , Günter Kniesel , Haripriyan Hampapuram","doi":"10.1016/S0096-0551(00)00005-9","DOIUrl":"10.1016/S0096-0551(00)00005-9","url":null,"abstract":"<div><p>This paper presents Java language from an object-oriented software construction perspective. It explains the implications of banning generics and multiple inheritance of classes, and explores the patterns and the idioms used by the Java designers and programmers to redeem their benefits. The paper also discusses an alternative to multiple inheritance, as incorporated in Lava, which extends Java with constructs for type-safe automatic forwarding.</p></div>","PeriodicalId":100315,"journal":{"name":"Computer Languages","volume":"25 4","pages":"Pages 189-210"},"PeriodicalIF":0.0,"publicationDate":"1999-12-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"https://sci-hub-pdf.com/10.1016/S0096-0551(00)00005-9","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"87417007","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Pub Date : 1999-10-01DOI: 10.1016/S0096-0551(00)00004-7
Kasper Østerbye , Wolfgang Kreutzer
This paper argues that synchronization of processes need not be part of the core of a programming language, but that they can just as well be built from existing abstractions — provided these are sufficiently flexible and general. BETA’s notion of patterns meets these requirements and we demonstrate the validity of our claims within this context. While discussing the use of patterns of synchronization and their implementation in BETA, we focus on a number of examples taken from BetaSIM, a high-level framework for discrete event simulation. The paper concludes with a discussion on how these ideas can be applied to other modern object-based programming languages, such as Java or Ada.
{"title":"Synchronization abstraction in the BETA programming language","authors":"Kasper Østerbye , Wolfgang Kreutzer","doi":"10.1016/S0096-0551(00)00004-7","DOIUrl":"10.1016/S0096-0551(00)00004-7","url":null,"abstract":"<div><p>This paper argues that synchronization of processes need not be part of the core of a programming language, but that they can just as well be built from existing abstractions — provided these are sufficiently flexible and general. BETA’s notion of patterns meets these requirements and we demonstrate the validity of our claims within this context. While discussing the use of patterns of synchronization and their implementation in BETA, we focus on a number of examples taken from BetaSIM, a high-level framework for discrete event simulation. The paper concludes with a discussion on how these ideas can be applied to other modern object-based programming languages, such as Java or Ada.</p></div>","PeriodicalId":100315,"journal":{"name":"Computer Languages","volume":"25 3","pages":"Pages 165-187"},"PeriodicalIF":0.0,"publicationDate":"1999-10-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"https://sci-hub-pdf.com/10.1016/S0096-0551(00)00004-7","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"80885135","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Pub Date : 1999-10-01DOI: 10.1016/S0096-0551(00)00003-5
Wuu Yang
The attribute dependence graph of a syntax tree may be partitioned into disjoint regions. Attribute instances in different regions are independent of one other. The advantages of partitioning the attribute dependence graph include simplifying the attribute grammar conceptually and allowing the possibility of parallel evaluation. We present a static partitioning algorithm for attribute grammars. The algorithm builds the set of all feasible partitions for every production by analyzing the grammar. After the attributed syntax tree is constructed, one of the feasible partitions is chosen for each production instance in the syntax tree. Gluing together the selected partitions for individual production instances results in a partition of the attribute dependence graph of the syntax tree. No further merging or partitioning is needed at evaluation time. In addition to static partitioning, the algorithm always produces the finest partition of every attribute dependence graph. An application of the partitioning technique is the strictness analysis for a simple programming language that contains no higher-order functions.
{"title":"A finest partitioning algorithm for attribute grammars","authors":"Wuu Yang","doi":"10.1016/S0096-0551(00)00003-5","DOIUrl":"10.1016/S0096-0551(00)00003-5","url":null,"abstract":"<div><p>The attribute dependence graph of a syntax tree may be partitioned into disjoint regions. Attribute instances in different regions are independent of one other. The advantages of partitioning the attribute dependence graph include simplifying the attribute grammar conceptually and allowing the possibility of parallel evaluation. We present a static partitioning algorithm for attribute grammars. The algorithm builds the set of all feasible partitions for every production by analyzing the grammar. After the attributed syntax tree is constructed, one of the feasible partitions is chosen for each production instance in the syntax tree. Gluing together the selected partitions for individual production instances results in a partition of the attribute dependence graph of the syntax tree. No further merging or partitioning is needed at evaluation time. In addition to static partitioning, the algorithm always produces the finest partition of every attribute dependence graph. An application of the partitioning technique is the strictness analysis for a simple programming language that contains no higher-order functions.</p></div>","PeriodicalId":100315,"journal":{"name":"Computer Languages","volume":"25 3","pages":"Pages 145-164"},"PeriodicalIF":0.0,"publicationDate":"1999-10-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"https://sci-hub-pdf.com/10.1016/S0096-0551(00)00003-5","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"75159053","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Pub Date : 1999-10-01DOI: 10.1016/S0096-0551(99)00013-2
Jimmy H.M. Lee, Ho-fung Leung
Van Emden’s incremental queries address the inadequacy of current Prolog-style querying mechanism in most logic programming systems for interactive problem-solving. In the context of constraint logic programming, incremental queries involve adding new constraints or deleting old ones from a query after a solution is found. This paper presents an implementation scheme IQ of incremental queries in Constraint Pandora, which defines a class of non-deterministic concurrent constraint logic programming languages. We use Van Hentenryck and Le Provost’s scheme (VHLP-scheme hereafter), a re-execution approach, as a starting point. Re-execution is costly in concurrent languages, in which process creation and inter-process communications are common operations. The main idea of IQ is that the basic trail unwinding operation used in backtracking is more efficient than re-execution in reaching an execution context along a recorded execution path. We modify the conventional trail-unwinding operation in such a way that constraints are used actively to prune the search space. Analysis shows that the IQ-scheme is at least as efficient as the VHLP-scheme in sequential systems and is much more efficient in concurrent systems. We show the feasibility of our proposal by incorporating the IQ-scheme into IFD-Constraint Pandora, an instance of Constraint Pandora supporting interval and finite domain constraint solving. Our preliminary results agree with that of theoretical analysis.
Van Emden的增量查询解决了当前大多数逻辑编程系统中prolog风格的查询机制在交互式问题解决方面的不足。在约束逻辑编程的上下文中,增量查询涉及在找到解决方案后从查询中添加新约束或删除旧约束。本文提出了一种约束潘多拉中增量查询的实现方案IQ,该方案定义了一类不确定并发约束逻辑编程语言。我们使用Van henenryck和Le Provost的方案(以下简称vhlp方案),一种重新执行的方法,作为起点。在并发语言中,重新执行的代价很高,在并发语言中,进程创建和进程间通信是常见的操作。IQ的主要思想是回溯中使用的基本轨迹展开操作比沿着记录的执行路径到达执行上下文的重新执行更有效。我们修改了传统的尾部展开操作,这样就可以主动使用约束来精简搜索空间。分析表明,iq方案在顺序系统中至少与vhp方案一样高效,而在并发系统中效率更高。我们通过将IQ-scheme结合到IFD-Constraint Pandora(约束Pandora支持区间和有限域约束求解的实例)中来证明了我们的建议的可行性。初步结果与理论分析一致。
{"title":"An execution scheme for interactive problem-solving in concurrent constraint logic programming languages","authors":"Jimmy H.M. Lee, Ho-fung Leung","doi":"10.1016/S0096-0551(99)00013-2","DOIUrl":"10.1016/S0096-0551(99)00013-2","url":null,"abstract":"<div><p>Van Emden’s <em>incremental queries</em> address the inadequacy of current Prolog-style querying mechanism in most logic programming systems for interactive problem-solving. In the context of constraint logic programming, incremental queries involve adding new constraints or deleting old ones from a query after a solution is found. This paper presents an implementation scheme IQ of incremental queries in Constraint Pandora, which defines a class of non-deterministic concurrent constraint logic programming languages. We use Van Hentenryck and Le Provost’s scheme (VHLP-scheme hereafter), a re-execution approach, as a starting point. Re-execution is costly in concurrent languages, in which process creation and inter-process communications are common operations. The main idea of IQ is that the basic trail unwinding operation used in backtracking is more efficient than re-execution in reaching an execution context along a recorded execution path. We modify the conventional trail-unwinding operation in such a way that constraints are used actively to prune the search space. Analysis shows that the IQ-scheme is at least as efficient as the VHLP-scheme in sequential systems and is much more efficient in concurrent systems. We show the feasibility of our proposal by incorporating the IQ-scheme into IFD-Constraint Pandora, an instance of Constraint Pandora supporting interval and finite domain constraint solving. Our preliminary results agree with that of theoretical analysis.</p></div>","PeriodicalId":100315,"journal":{"name":"Computer Languages","volume":"25 3","pages":"Pages 119-144"},"PeriodicalIF":0.0,"publicationDate":"1999-10-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"https://sci-hub-pdf.com/10.1016/S0096-0551(99)00013-2","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"90754790","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Pub Date : 1999-07-01DOI: 10.1016/S0096-0551(99)00009-0
R.S Ledley
{"title":"Mobile Processing in Distributed and Open Environments; Peter Sapaty. John Wiley and Sons, Inc. ISBN: 0-471-19572-3.","authors":"R.S Ledley","doi":"10.1016/S0096-0551(99)00009-0","DOIUrl":"https://doi.org/10.1016/S0096-0551(99)00009-0","url":null,"abstract":"","PeriodicalId":100315,"journal":{"name":"Computer Languages","volume":"25 2","pages":"Pages 113-114"},"PeriodicalIF":0.0,"publicationDate":"1999-07-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"https://sci-hub-pdf.com/10.1016/S0096-0551(99)00009-0","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"92151046","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Pub Date : 1999-07-01DOI: 10.1016/S0096-0551(99)00010-7
R.S Ledley (Dr)
{"title":"Building Microsoft SQL Server 7 Applications with COM; By Sanjiv Purba. John Wiley & Sons, Inc. ISBN: 0-471-19233-3.","authors":"R.S Ledley (Dr)","doi":"10.1016/S0096-0551(99)00010-7","DOIUrl":"10.1016/S0096-0551(99)00010-7","url":null,"abstract":"","PeriodicalId":100315,"journal":{"name":"Computer Languages","volume":"25 2","pages":"Pages 114-115"},"PeriodicalIF":0.0,"publicationDate":"1999-07-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"https://sci-hub-pdf.com/10.1016/S0096-0551(99)00010-7","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"89880942","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Pub Date : 1999-07-01DOI: 10.1016/S0096-0551(99)00014-4
Ravi K. Gedela, Sol M. Shatz, Haiping Xu
The Ada language has been designed to support development of concurrent and distributed software. While the Ada-83 standard defined the basic mechanisms of rendezvous-based tasking, the Ada-95 standard significantly extended this capability with the introduction of several advanced tasking constructs. We present and discuss formal models of these key tasking constructs using the Petri net model. We also provide some formal evaluation of the models using one particular net-based method, invariant analysis. The constructs considered are the asynchronous transfer of control, the protected object, and the requeue statement. By modeling these advanced Ada tasking constructs with Petri nets, we obtain compositional models of the constructs that are complementary to earlier work in net-based modeling of Ada tasking, both in terms of defining precise behavior for tasking semantics, and also in terms of providing support for automated analysis of concurrent software.
{"title":"Compositional Petri net models of advanced tasking in Ada-95","authors":"Ravi K. Gedela, Sol M. Shatz, Haiping Xu","doi":"10.1016/S0096-0551(99)00014-4","DOIUrl":"10.1016/S0096-0551(99)00014-4","url":null,"abstract":"<div><p>The Ada language has been designed to support development of concurrent and distributed software. While the Ada-83 standard defined the basic mechanisms of rendezvous-based tasking, the Ada-95 standard significantly extended this capability with the introduction of several advanced tasking constructs. We present and discuss formal models of these key tasking constructs using the Petri net model. We also provide some formal evaluation of the models using one particular net-based method, invariant analysis. The constructs considered are the asynchronous transfer of control, the protected object, and the requeue statement. By modeling these advanced Ada tasking constructs with Petri nets, we obtain compositional models of the constructs that are complementary to earlier work in net-based modeling of Ada tasking, both in terms of defining precise behavior for tasking semantics, and also in terms of providing support for automated analysis of concurrent software.</p></div>","PeriodicalId":100315,"journal":{"name":"Computer Languages","volume":"25 2","pages":"Pages 55-87"},"PeriodicalIF":0.0,"publicationDate":"1999-07-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"https://sci-hub-pdf.com/10.1016/S0096-0551(99)00014-4","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"81879746","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Pub Date : 1999-07-01DOI: 10.1016/S0096-0551(99)00007-7
W.F. Wong
It is well known that dynamic typing in languages like Lisp is costly in terms of performance. Besides the cost of tag checking, the other major source of inefficiency comes from the need to place and retrieve data from dynamically allocated objects, i.e. boxing and unboxing. This makes it unacceptable in general to write numerical code in Lisp. Such programs involve “tight” loops in which boxing, unboxing and tag checking will dominate the computation time. With advances in the compilation of Lisp programs, it has been suggested that type checking and inference can be used to alleviate the problem. In this paper we shall examine a sub-problem, namely using type inference to aid compilation of numerical intensive Lisp code. A type inference algorithm for floating point operations will be described. This has been implemented in a Scheme compiler. Implementation issues and performance results on fairly large numerical code will also be reported. The results suggest that significant performance gains can be obtained. It is our hope that as an augmentation to other general type inferencing scheme, it will contribute towards the realization of highly optimizing Scheme compilers.
{"title":"Optimizing floating point operations in Scheme","authors":"W.F. Wong","doi":"10.1016/S0096-0551(99)00007-7","DOIUrl":"10.1016/S0096-0551(99)00007-7","url":null,"abstract":"<div><p>It is well known that dynamic typing in languages like Lisp is costly in terms of performance. Besides the cost of tag checking, the other major source of inefficiency comes from the need to place and retrieve data from dynamically allocated objects, i.e. <em>boxing</em> and <em>unboxing</em>. This makes it unacceptable in general to write numerical code in Lisp. Such programs involve “tight” loops in which boxing, unboxing and tag checking will dominate the computation time. With advances in the compilation of Lisp programs, it has been suggested that type checking and inference can be used to alleviate the problem. In this paper we shall examine a sub-problem, namely using type inference to aid compilation of numerical intensive Lisp code. A type inference algorithm for floating point operations will be described. This has been implemented in a Scheme compiler. Implementation issues and performance results on fairly large numerical code will also be reported. The results suggest that significant performance gains can be obtained. It is our hope that as an augmentation to other general type inferencing scheme, it will contribute towards the realization of highly optimizing Scheme compilers.</p></div>","PeriodicalId":100315,"journal":{"name":"Computer Languages","volume":"25 2","pages":"Pages 89-112"},"PeriodicalIF":0.0,"publicationDate":"1999-07-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"https://sci-hub-pdf.com/10.1016/S0096-0551(99)00007-7","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"90345024","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Pub Date : 1999-07-01DOI: 10.1016/S0096-0551(99)00012-0
R.S Ledley (Dr)
{"title":"3-Tier Client/Server at Work — Revised Edition; By Jeri Edwards. John Wiley & Sons, Inc. ISBN: 0-471-31502-8.","authors":"R.S Ledley (Dr)","doi":"10.1016/S0096-0551(99)00012-0","DOIUrl":"10.1016/S0096-0551(99)00012-0","url":null,"abstract":"","PeriodicalId":100315,"journal":{"name":"Computer Languages","volume":"25 2","pages":"Pages 116-117"},"PeriodicalIF":0.0,"publicationDate":"1999-07-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"https://sci-hub-pdf.com/10.1016/S0096-0551(99)00012-0","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"80379985","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Pub Date : 1999-07-01DOI: 10.1016/S0096-0551(99)00011-9
R.S Ledley
{"title":"Building N-Tier Applications with COM And Visual Basic 6.0; Ash Rofail, Tony Martin. John Wiley & Sons, Inc. ISBN: 0-471-29549-3.","authors":"R.S Ledley","doi":"10.1016/S0096-0551(99)00011-9","DOIUrl":"https://doi.org/10.1016/S0096-0551(99)00011-9","url":null,"abstract":"","PeriodicalId":100315,"journal":{"name":"Computer Languages","volume":"25 2","pages":"Pages 115-116"},"PeriodicalIF":0.0,"publicationDate":"1999-07-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"https://sci-hub-pdf.com/10.1016/S0096-0551(99)00011-9","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"92133557","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}