TL;DR: The authors introduce a new programming language concept, called typestate, which is a refinement of the concept of type, which determines the subset of operations which is permitted in a particular context.
Abstract: The authors introduce a new programming language concept, called typestate, which is a refinement of the concept of type. Whereas the type of a data object determines the set of operations over permitted on the object, typestate determines the subset of these operations which is permitted in a particular context. Typestate tracking is a program analysis technique which enhances program reliability by detecting at compile-time syntactically legal but semantically undefined execution sequences. These include reading a variable before it has been initialized and dereferencing a pointer after the dynamic object has been deallocated. The authors define typestate, give examples of its application, and show how typestate checking may be embedded into a compiler. They discuss the consequences of typestate checking for software reliability and software structure, and summarize their experience in using a high-level language incorporating typestate checking.
TL;DR: A method is presented that combines a deep analysis of program dependences with a broad analysis of the interaction among procedures, and a unified approach that integrates subscript analysis with aliasing and interprocedural information is presented.
Abstract: We present a method that combines a deep analysis of program dependences with a broad analysis of the interaction among procedures. The method is more efficient than existing methods: we reduce many tests, performed separately by existing methods, to a single test. The method is more precise than existing methods with respect to references to multi-dimensional arrays and dependence information hidden by procedure calls. The method is more general than existing methods: we accommodate potentially aliased variables and structures of differing shapes that share storage. We accomplish the above through a unified approach that integrates subscript analysis with aliasing and interprocedural information.
TL;DR: An integrated approach to testing is described which includes both static and dynamic analysis methods and which is based on theoretical results that prove both its effectiveness and efficiency.
Abstract: An integrated approach to testing is described which includes both static and dynamic analysis methods and which is based on theoretical results that prove both its effectiveness and efficiency. Programs are viewed as consisting of collections of functions that are joined together using elementary functional forms or complex functional structures. Functional testing is identified as the input-output analysis of functional forms. Classes of faults are defined for these forms, and results are presented which prove the fault-revealing effectiveness of well defined sets of tests. Functional analysis is identified as the analysis of the sequences of operators, functions, and data type transformations which occur in functional structures. Theoretical results are presented which prove that it is only necessary to look at interfaces between pairs of operators and data type transformations in order to detect the presence of operator or data type sequencing errors. The results depend on the definition of normal forms for operator and data type sequencing diagrams.
TL;DR: In this paper, the authors present a framework for using analysis and searching knowledge to guide program synthesis in a stepwise refinement paradigm, and a particular implementation of the framework, called libra, is described.
TL;DR: An APL/370 compiler which accepts a subset of APL that Includes most language features and a majority of APl primitive functions is implemented, which removes the performance penalty ofAPL in computationintensive applications.
Abstract: 594 We have implemented an APL/370 compiler which accepts a subset of APL that Includes most language features and a majority of APL primitive functions. It produces System/370 assembly code directly to be run independently of an interpreter. The compiler does not require variable declarations. Its front end, which is machine-independent, employs extensive typeshape analysis based on a type-shape calculus of the primitive functions and global dataflow analysis. Its back end does storage mapping, code generation for various primitive functions, and register management. For one-line functions, compiled code executes at 2-10 times the speed of the interpreter. On programs with many iterations, the execution time of the compiled code not only is dramatically better than that of inteipretation, but is actually fairly close to that of FORTRAN. This removes the performance penalty of APL in computationintensive applications.
TL;DR: The cover computed by the algorithm is characterized as a minimum of a certain fixed point equation, and is in general a better cover than might be computed by iteration methods (which can compute fixed point covers which are not minimal).
TL;DR: In this paper, the authors present tools for interprocedural program analysis, able to analyze at high levels large FORTRAN programs composed of many subroutines and to perform an automatic high-level parallelism.
Abstract: The demand for very high computing performance has become increasingly common in many scientific and engineering environments. In addition to vector processing, parallel computing is now considered a useful way to enhance performance. However, parallel computing tends to be unpopular among users because, with presently available technology and software, it requires explicit programmer intervention to exploit architectural parallelism. This intervention can be minor in some cases, but it often requires a non-negligible amount of program restructuring, or even a reformulation of some of the algorithms used. In addition, it makes program debugging considerably more difficult. Tools for interprocedural program analysis, able to analyze at high levels large FORTRAN programs composed of many subroutines and to perform an automatic high-level parallelism could also be exploited automatically.
TL;DR: In this paper, a simplified microcomputer program is developed that simulates the progress and project reporting structure of an industrial construction project, taking the form of an interactive game whose objective is to strengthen project management skills.
Abstract: A simplified microcomputer program has been developed that simulates the progress and project reporting structure of an industrial construction project. The program takes the form of an interactive game whose objective is to strengthen project management skills. The program is set up by the player to specify the desired type, frequency, and detail of reports as well as the intensity of predefined problems that the program introduces to disturb the project. Once established, the program begins to cycle through the project, typically on a monthly basis. As reports are produced, the player attempts to identify when a problem has occurred and selects appropriate solutions from among alternatives provided by the program. The program, written in FORTRAN, is designed to run under the MS DOS operating system.
TL;DR: A method of providing a basis for the “thought experiment” by writing a special manual for parts of the operating system, system programs, and library subroutines and presents a mathematical proof that the system satisfies the security policy.
Abstract: Most work concerning secure computer systems has dealt with the design, verification, and implementation of provably secure computer systems, or has explored ways of making existing computer systems more secure. The problem of locating security holes in existing systems has received considerably less attention; methods generally rely on thought experiments as a critical step in the procedure. The difficulty is that such experiments require that a large amount of information be available in a format that makes correlating the details of various programs straightforward. This paper describes a method of providing such a basis for the thought experiment by writing a special manual for parts of the operating system, system programs, and library subroutines.
TL;DR: In this article, a method for controlling computer program sequences has a command shell with a set of programs and program control files for use with the computer programs sequences, and a sequencing program makes decisions as to which computer program should be run next with which control file, and generates the job control language (JCL) to run it.
Abstract: A method for controlling computer program sequences has a command shell with a set of programs and program control files for use with the computer program sequences. A sequencing program makes decisions as to which computer program should be run next with which control file, and generates the job control language (JCL) to run it. A sequencing text contains a strategy which the sequencing program uses to decide which program control file combination to run. An interactive monitor program helps submit and monitor a sequence while it is running. The user prepares the design input file and submits it with the aid of the monitor program. The monitor program also checks and reports the completion of the process and makes a final report. The sequence then runs to completion or terminates in an error.
TL;DR: This work has shown how the corresponding distribution functions change during the execution of the program construct, and how the transition probabilities connected to the arcs of the control-flow graph can be calculated locally.
TL;DR: The structure of a conversational program system for mathematical optimization is described, the types of optimization problems solvable by the program system are overviewed, and three basic layers of the system are characterized - service layer, program kernel and data files.
TL;DR: It is shown how the call-return tree can be used to compute the live times and the execution times of the various calls made during the execution of a program execution.
Abstract: The notion of a call-return tree is defined to describe the dynamic calling relationship of the procedure and functions in a program execution. It is shown how the call-return tree can be used to compute the live times and the execution times of the various calls made during the execution. The call-return tree can also be used to compute other behavioral metrics such as the depth and height of a call and the number of direct and indirect calls generated from any point. The technique applies uniformly for both nonrecursive and recursive calls. The algorithms take linear time in the length of the source code and the number of calls made during an execution.
TL;DR: A procedure to check that the correct basic relationships hold between visibility, initialisation, use and update of vairables in Dijkstra's Guarded Commands language, from static analysis of program text, is motivated, presented and verified.
TL;DR: The developed software is an interactive concept program and can be used by people with or no experience in the computer programming, which is definitly an economic and practical tool to solving the resource balancing problems.
TL;DR: Analyzing program style may be properly considered an integral part of program compilation—as successfully implemented in two style-analysis tools for Fortran 77: AUTOMARK and ASSESS.
Abstract: Analyzing program style may be properly considered an integral part of program compilation—as successfully implemented in two style-analysis tools for Fortran 77: AUTOMARK and ASSESS. The authors look forward to the day when all major language compilers routinely provide a standard style-analysis vector for users to interpret as they see fit.
TL;DR: A mini methodology for generation and representation of design and program structures and for structural consistency checking between two successive designs or between a design and a program is described.
Abstract: The author describes a mini methodology for generation and representation of design and program structures and for structural consistency checking between two successive designs or between a design and a program. This methodology comprises a tool (Program Design Language), a representation, and consistency criteria. The Program Design Language (PDL) extracts structure information, in a controlled way, from the top level program design, through layers of detailed designs, down to the source code itself. It generates an actual, complete, concise, and easily comparable structure representation. Structural consistency between levels can be checked, both at the development phase and at the operation and maintenance phase, ensuring continued structural consistency between the design(s) and the program.
TL;DR: It was found that a one-page description of two common sorting algorithms or of some common approximation problems was sufficient for the computer to understand and analyze a wide variety of programs and identify and describe almost all errors.