This paper presents details of the Kernel Ada Programming Support Environment (KAPSE) used in the Army's Ada Language System (ALS). The services provided by the ALS KAPSE are described in terms of the Ada packages that supply these services. The rationale for some major design decisions is discussed.
{"title":"The kapse for the Ada language system","authors":"R. Thall","doi":"10.1145/3304133.3304139","DOIUrl":"https://doi.org/10.1145/3304133.3304139","url":null,"abstract":"This paper presents details of the Kernel Ada Programming Support Environment (KAPSE) used in the Army's Ada Language System (ALS). The services provided by the ALS KAPSE are described in terms of the Ada packages that supply these services. The rationale for some major design decisions is discussed.","PeriodicalId":304626,"journal":{"name":"Proceedings of the AdaTEC Conference on Ada","volume":"23 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1982-10-06","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"127794867","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}
In [1], we illustrated how Ada could be used to separate the high level logical operations of an embedded control program from the low level details of how to access the various physical devices controlled by the program. We further illustrated how this information hiding could be achieved without loss of storage or run-time efficiency. In this paper, we continue our investigation by illustrating how one can use the exception handling facility of Ada to separate the normal operation of a control program from the handling of exceptional conditions. The goals are (1) to be able to view the normal flow of control and the error recovery separately, without having to embed one in the other, (2) after recovering from an error, to be able to restart or continue operation of the system, and (3) to accomplish goals 1 and 2 without loss of efficiency. The third goal is particularly important, since many real-time control applications are characterized by the use of minimal hardware. While such programs do not use the full power of the Ada language, it is important that one be able to compile highly optimized code for those features that are used. Our discussion centers around a typical application in factory automation - a control program for an industrial trolley. While this is not one of our intended applications, it includes many characteristics of actual applications.
{"title":"Using Ada for industrial embedded microprocessor applications, II","authors":"A. G. Duncan, J. Hutchison","doi":"10.1145/3304133.3304155","DOIUrl":"https://doi.org/10.1145/3304133.3304155","url":null,"abstract":"In [1], we illustrated how Ada could be used to separate the high level logical operations of an embedded control program from the low level details of how to access the various physical devices controlled by the program. We further illustrated how this information hiding could be achieved without loss of storage or run-time efficiency. In this paper, we continue our investigation by illustrating how one can use the exception handling facility of Ada to separate the normal operation of a control program from the handling of exceptional conditions. The goals are (1) to be able to view the normal flow of control and the error recovery separately, without having to embed one in the other, (2) after recovering from an error, to be able to restart or continue operation of the system, and (3) to accomplish goals 1 and 2 without loss of efficiency. The third goal is particularly important, since many real-time control applications are characterized by the use of minimal hardware. While such programs do not use the full power of the Ada language, it is important that one be able to compile highly optimized code for those features that are used. Our discussion centers around a typical application in factory automation - a control program for an industrial trolley. While this is not one of our intended applications, it includes many characteristics of actual applications.","PeriodicalId":304626,"journal":{"name":"Proceedings of the AdaTEC Conference on Ada","volume":"106 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1982-10-06","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"131522191","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}
Considerable interest has been generated within the computer science community by the problem of the semantics of the language Ada, especially that part of the semantics which is concerned with multitasking and exception handling (see [Bjørner and Oest 80], [Luckham and Polak 80],[Hennessy and Li 81]). The purpose of this paper is to give an operational semantics for multitasking and exception handling in Ada using a structural approach. To focus our attention on the above features, we first carefully select a small subset of Ada called Ada.1 which is obtained from Dijkstra's guarded command language ([Dijkstra 76]) by adding constructs concerned with multitasking. We then define an operational semantics for it. Adding new constructs concerned with exceptions into Ada.1 we get a new subset called Ada.2 and study how the semantics of the exception mechanism can be handled by labelled transition relations.
{"title":"An operational semantics of multitasking and exception handling in Ada","authors":"Wei Li","doi":"10.1145/3304133.3304153","DOIUrl":"https://doi.org/10.1145/3304133.3304153","url":null,"abstract":"Considerable interest has been generated within the computer science community by the problem of the semantics of the language Ada, especially that part of the semantics which is concerned with multitasking and exception handling (see [Bjørner and Oest 80], [Luckham and Polak 80],[Hennessy and Li 81]). The purpose of this paper is to give an operational semantics for multitasking and exception handling in Ada using a structural approach. To focus our attention on the above features, we first carefully select a small subset of Ada called Ada.1 which is obtained from Dijkstra's guarded command language ([Dijkstra 76]) by adding constructs concerned with multitasking. We then define an operational semantics for it. Adding new constructs concerned with exceptions into Ada.1 we get a new subset called Ada.2 and study how the semantics of the exception mechanism can be handled by labelled transition relations.","PeriodicalId":304626,"journal":{"name":"Proceedings of the AdaTEC Conference on Ada","volume":"1 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1982-10-06","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"129408959","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}
A command language for a Minimal Ada Programming Support Environment (MAPSE) is described. This MAPSE Command Language (MCL) blends features from the UNIX* environment (such as IO redirection, pipes and background processing) with features of the Ada programming language (such as Ada-like parameter passing). The result is a command language which is easy to use, yet provides a variety of means for interconnecting tools. Details of the implementation of MCL are also discussed.
{"title":"A command language for the Ada environment","authors":"Morris E. Kranc","doi":"10.1145/3304133.3304159","DOIUrl":"https://doi.org/10.1145/3304133.3304159","url":null,"abstract":"A command language for a Minimal Ada Programming Support Environment (MAPSE) is described. This MAPSE Command Language (MCL) blends features from the UNIX* environment (such as IO redirection, pipes and background processing) with features of the Ada programming language (such as Ada-like parameter passing). The result is a command language which is easy to use, yet provides a variety of means for interconnecting tools. Details of the implementation of MCL are also discussed.","PeriodicalId":304626,"journal":{"name":"Proceedings of the AdaTEC Conference on Ada","volume":"3 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1982-10-06","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"126629981","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}
This paper represents a summary of the results gathered during the work on a Master Thesis called A Formal Model of Distributed Ada Tasking
本文总结了一篇名为《分布式Ada任务的形式化模型》的硕士论文的研究结果
{"title":"A formal model of distributed Ada tasking","authors":"G. B. Clemmensen","doi":"10.1145/3304133.3304164","DOIUrl":"https://doi.org/10.1145/3304133.3304164","url":null,"abstract":"This paper represents a summary of the results gathered during the work on a Master Thesis called A Formal Model of Distributed Ada Tasking","PeriodicalId":304626,"journal":{"name":"Proceedings of the AdaTEC Conference on Ada","volume":"47 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1982-10-06","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"120883462","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}
The coupling of type derivation with operator overloading occupies a substantial portion of the type-checking activities of an Ada compiler. It is thus important to handle overloaded operators as efficiently as possible. Let us recall that the introduction of any type derived from a numeric type, say: type T is range 1 .. 10; (1) creates, at the point of declaration of type T, a new instance of each of the predefined operators that apply to the root type of T, namely INTEGER. In other words, declarations of the form function "+"(x, y : T'BASE) return T'BASE; (2) are understood to appear immediately after the declaration (1). (Here T'BASE refers to the anonymous type, derived from integer, of which type T is a subtype). This means that an innocent declaration such as (1) introduces implicitly 16 new operator declarations (10 arithmetic operators and 6 comparison operators). The visibility of operator designators such as "+" is described in [RM] in terms of these implicit declarations. In what follows we refer to the operators thus introduced as derived operators, in contrast with user-defined operators, which are introduced by explicit declarations and are given user-defined bodies.
{"title":"An efficient method for handling operator overloading in Ada","authors":"E. Schonberg, Gerald A. Fisher","doi":"10.1145/3304133.3304148","DOIUrl":"https://doi.org/10.1145/3304133.3304148","url":null,"abstract":"The coupling of type derivation with operator overloading occupies a substantial portion of the type-checking activities of an Ada compiler. It is thus important to handle overloaded operators as efficiently as possible. Let us recall that the introduction of any type derived from a numeric type, say: type T is range 1 .. 10; (1) creates, at the point of declaration of type T, a new instance of each of the predefined operators that apply to the root type of T, namely INTEGER. In other words, declarations of the form function \"+\"(x, y : T'BASE) return T'BASE; (2) are understood to appear immediately after the declaration (1). (Here T'BASE refers to the anonymous type, derived from integer, of which type T is a subtype). This means that an innocent declaration such as (1) introduces implicitly 16 new operator declarations (10 arithmetic operators and 6 comparison operators). The visibility of operator designators such as \"+\" is described in [RM] in terms of these implicit declarations. In what follows we refer to the operators thus introduced as derived operators, in contrast with user-defined operators, which are introduced by explicit declarations and are given user-defined bodies.","PeriodicalId":304626,"journal":{"name":"Proceedings of the AdaTEC Conference on Ada","volume":"158 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1982-10-06","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"116113990","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}
This paper examines the suitability of the Ada multitasking model, for supporting parallel algorithms. The algorithms we consider include both SIMD (single instruction multiple data) and MIMD (multiple instruction multiple data) algorithms ([7]). These algorithms are typically used in numerical and other computation-intensive programs, where the ability to take advantage of parallelism available in the supporting hardware, is critical for a program's performance. The multitasking facilities of Ada are shown to lack an essential property necessary to support parallel algorithms: the ability to express parallel evaluation and distribution of parameters to the respective tasks. The resulting serial bottleneck could in certain situations offset the gain from parallelization. Constructs which support parallel evaluation and distribution of parameters to parallel tasks are proposed.
{"title":"On the suitability of Ada multitasking for expressing parallel algorithms","authors":"S. Yemini","doi":"10.1145/3304133.3304145","DOIUrl":"https://doi.org/10.1145/3304133.3304145","url":null,"abstract":"This paper examines the suitability of the Ada multitasking model, for supporting parallel algorithms. The algorithms we consider include both SIMD (single instruction multiple data) and MIMD (multiple instruction multiple data) algorithms ([7]). These algorithms are typically used in numerical and other computation-intensive programs, where the ability to take advantage of parallelism available in the supporting hardware, is critical for a program's performance. The multitasking facilities of Ada are shown to lack an essential property necessary to support parallel algorithms: the ability to express parallel evaluation and distribution of parameters to the respective tasks. The resulting serial bottleneck could in certain situations offset the gain from parallelization. Constructs which support parallel evaluation and distribution of parameters to parallel tasks are proposed.","PeriodicalId":304626,"journal":{"name":"Proceedings of the AdaTEC Conference on Ada","volume":"516 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1982-10-06","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"116221013","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}
Most high level languages with multiprocessing do not have built in mechanisms to detect deadlocks during program execution. We present transformation rules for taking an original Ada program P and deriving a new program P', such that P' has a potential deadlock iff P does, and P' signals whenever a deadlock is about to occur. In principle, the transformations can be applied mechanically, giving a practical tool for debugging deadlocks. Since this method modifies the source program, it can be used with any implementation of the language, without special knowledge of the implementation of tasking. The transformations that we have developed thus far are sufficient to handle most of the complexities of Ada tasking, including arbitrary task types, conditional entry calls, selective waits, timed entry calls, and intertask exceptions. In the course of this work, we have developed some generally useful source program transformations, such as one to uniformly introduce task identifiers. We have also developed some interesting concurrent algorithms for the deadlock monitoring. An actual monitor program for detecting deadlocks has been implemented in Ada. Our basic approach and monitoring algorithms are applicable to other languages with multiple processes.
{"title":"Monitoring for deadlocks in Ada tasking","authors":"S. German, D. Helmbold, D. Luckham","doi":"10.1145/3304133.3304136","DOIUrl":"https://doi.org/10.1145/3304133.3304136","url":null,"abstract":"Most high level languages with multiprocessing do not have built in mechanisms to detect deadlocks during program execution. We present transformation rules for taking an original Ada program P and deriving a new program P', such that P' has a potential deadlock iff P does, and P' signals whenever a deadlock is about to occur. In principle, the transformations can be applied mechanically, giving a practical tool for debugging deadlocks. Since this method modifies the source program, it can be used with any implementation of the language, without special knowledge of the implementation of tasking. The transformations that we have developed thus far are sufficient to handle most of the complexities of Ada tasking, including arbitrary task types, conditional entry calls, selective waits, timed entry calls, and intertask exceptions. In the course of this work, we have developed some generally useful source program transformations, such as one to uniformly introduce task identifiers. We have also developed some interesting concurrent algorithms for the deadlock monitoring. An actual monitor program for detecting deadlocks has been implemented in Ada. Our basic approach and monitoring algorithms are applicable to other languages with multiple processes.","PeriodicalId":304626,"journal":{"name":"Proceedings of the AdaTEC Conference on Ada","volume":"10 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1982-10-06","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"134151406","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}
Under the auspices of the Commission of the European Communities, the development of a portable root for Ada compilers has been undertaken by Alsys S.A, Cii-Honeywell Bull and Siemens A.G.
{"title":"Lolita: a low level intermediate language for Ada","authors":"O. Roubine, C. Bull, J. Teller, O. Maurel","doi":"10.1145/3304133.3304167","DOIUrl":"https://doi.org/10.1145/3304133.3304167","url":null,"abstract":"Under the auspices of the Commission of the European Communities, the development of a portable root for Ada compilers has been undertaken by Alsys S.A, Cii-Honeywell Bull and Siemens A.G.","PeriodicalId":304626,"journal":{"name":"Proceedings of the AdaTEC Conference on Ada","volume":"22 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1982-10-06","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"114828874","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}
One of the primary purposes of Ada is to encourage the usage of components. Not only are the paradigms of component interconnection important, but also the implementation mechanisms for this interconnection are significant. This paper examines several major mechanisms of component linkage. The evaluation is based upon efficiency, flexibility, implementation difficulty, usability in building systems, and the ability to meet constraints imposed by the Ada language and by the potential underlying KAPSEs.
{"title":"Linkage of Ada components: theme & variations","authors":"Gary Frankel, R. Arnold","doi":"10.1145/3304133.3304161","DOIUrl":"https://doi.org/10.1145/3304133.3304161","url":null,"abstract":"One of the primary purposes of Ada is to encourage the usage of components. Not only are the paradigms of component interconnection important, but also the implementation mechanisms for this interconnection are significant. This paper examines several major mechanisms of component linkage. The evaluation is based upon efficiency, flexibility, implementation difficulty, usability in building systems, and the ability to meet constraints imposed by the Ada language and by the potential underlying KAPSEs.","PeriodicalId":304626,"journal":{"name":"Proceedings of the AdaTEC Conference on Ada","volume":"9 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1982-10-06","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"128010803","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}