| [PJW93] |
Simon L. Peyton Jones and Philip Wadler.
Imperative functional programming.
In Proceedings of the 20th ACM SIGPLAN-SIGACT Symposium on
Principles of Programming Languages, POPL '93, page 71–84, New York, NY,
USA, 1993. Association for Computing Machinery.
[ bib |
DOI |
http ]
We present a new model, based on monads, for performing input/output in a non-strict, purely functional language. It is composable, extensible, efficient, requires no extensions to the type system, and extends smoothly to incorporate mixed-language working and in-place array updates. |
| [Nec97] |
George C. Necula.
Proof-carrying code.
In Proceedings of the 24th ACM SIGPLAN-SIGACT Symposium on
Principles of Programming Languages, POPL '97, page 106–119, New York, NY,
USA, 1997. Association for Computing Machinery.
[ bib |
DOI |
http ]
This paper describes proof-carrying code (PCC), a mechanism by which a host system can determine with certainty that it is safe to execute a program supplied (possibly in binary form) by an untrusted source. For this to be possible, the untrusted code producer must supply with the code a safety proof that attests to the code's adherence to a previously defined safety policy. The host can then easily and quickly validate the proof without using cryptography and without consulting any external agents.In order to gain preliminary experience with PCC, we have performed several case studies. We show in this paper how proof-carrying code might be used to develop safe assembly-language extensions of ML programs. In the context of this case study, we present and prove the adequacy of concrete representations for the safety policy, the safety proofs, and the proof validation. Finally, we briefly discuss how we use proof-carrying code to develop network packet filters that are faster than similar filters developed using other techniques and are formally guaranteed to be safe with respect to a given operating system safety policy. |
| [LHJ95] |
Sheng Liang, Paul Hudak, and Mark Jones.
Monad transformers and modular interpreters.
In Proceedings of the 22nd ACM SIGPLAN-SIGACT Symposium on
Principles of Programming Languages, POPL '95, page 333–343, New York, NY,
USA, 1995. Association for Computing Machinery.
[ bib |
DOI |
http ]
We show how a set of building blocks can be used to construct programming language interpreters, and present implementations of such building blocks capable of supporting many commonly known features, including simple expressions, three different function call mechanisms (call-by-name, call-by-value and lazy evaluation), references and assignment, nondeterminism, first-class continuations, and program tracing.The underlying mechanism of our system is monad transformers, a simple form of abstraction for introducing a wide range of computational behaviors, such as state, I/O, continuations, and exceptions.Our work is significant in the following respects. First, we have succeeded in designing a fully modular interpreter based on monad transformers that incudes features missing from Steele's, Espinosa's, and Wadler's earlier efforts. Second, we have found new ways to lift monad operations through monad transformers, in particular difficult cases not achieved in Moggi's original work. Third, we have demonstrated that interactions between features are reflected in liftings and that semantics can be changed by reordering monad transformers. Finally, we have implemented our interpreter in Gofer, whose constructor classes provide just the added power over Haskell's type classes to allow precise and convenient expression of our ideas. This implementation includes a method for constructing extensible unions and a form of subtyping that is interesting in its own right. |
| [HP19] |
John L. Hennessy and David A. Patterson.
A new golden age for computer architecture.
Commun. ACM, 62(2):48–60, jan 2019.
[ bib |
DOI |
http ]
Innovations like domain-specific hardware, enhanced security, open instruction sets, and agile chip development will lead the way. |
| [Mor73b] |
James H. Morris.
Types are not sets.
In Proceedings of the 1st Annual ACM SIGACT-SIGPLAN Symposium on
Principles of Programming Languages, POPL '73, page 120–124, New York, NY,
USA, 1973. Association for Computing Machinery.
[ bib |
DOI |
http ]
The title is not a statement of fact, of course, but an opinion about how language designers should think about types. There has been a natural tendency to look to mathematics for a consistent, precise notion of what types are. The point of view there is extensional: a type is a subset of the universe of values. While this approach may have served its purpose quite adequately in mathematics, defining programming language types in this way ignores some vital ideas. Some interesting developments following the extensional approach are the ALGOL-68 type system [vW], Scott's theory [S], and Reynolds' system [R]. While each of these lend valuable insight to programming languages, I feel they miss an important aspect of types.Rather than worry about what types are I shall focus on the role of type checking. Type checking seems to serve two distinct purposes: authentication and secrecy. Both are useful when a programmer undertakes to implement a class of abstract objects to be used by many other programmers. He usually proceeds by choosing a representation for the objects in terms of other objects and then writes the required operations to manipulate them. |
| [Mor73a] |
F. Lockwood Morris.
Advice on structuring compilers and proving them correct.
In Proceedings of the 1st Annual ACM SIGACT-SIGPLAN Symposium on
Principles of Programming Languages, POPL '73, page 144–152, New York, NY,
USA, 1973. Association for Computing Machinery.
[ bib |
DOI |
http ]
The purpose of this paper is to advise an approach (and to support that advice by discussion of an example) towards achieving a goal first announced by John McCarthy: that compilers for higher-level programming languages should be made completely trustworthy by proving their correctness. The author believes that the compiler-correctness problem can be made much less general and better-structured than the unrestricted program-correctness problem; to do so will of course entail restricting what a compiler may be. |
| [WL73] |
Richard J. Waldinger and Karl N. Levitt.
Reasoning about programs.
In Proceedings of the 1st Annual ACM SIGACT-SIGPLAN Symposium on
Principles of Programming Languages, POPL '73, page 169–182, New York, NY,
USA, 1973. Association for Computing Machinery.
[ bib |
DOI |
http ]
This paper describes a theorem prover that embodies knowledge about programming constructs, such as numbers, arrays, lists, and expressions. The program can reason about these concepts and is used as part of a program verification system that uses the Floyd-Naur explication of program semantics. It is implemented in the QA4 language; the QA4 system allows many bits of strategic knowledge, each expressed as a small program, to be coordinated so that a program stands forward when it is relevant to the problem at hand. The language allows clear, concise representation of this sort of knowledge. The QA4 system also has special facilities for dealing with commutative functions, ordering relations, and equivalence relations; these features are heavily used in this deductive system. The program interrogates the user and asks his advice in the course of a proof. Verifications have been found for Hoare's FIND program, a real-number division algorithm, and some sort programs, as well as for many simpler algorithms. Additional theorems have been proved about a pattern matcher and a version of Robinson's unification algorithm. |
| [Kil73] |
Gary A. Kildall.
A unified approach to global program optimization.
In Proceedings of the 1st Annual ACM SIGACT-SIGPLAN Symposium on
Principles of Programming Languages, POPL '73, page 194–206, New York, NY,
USA, 1973. Association for Computing Machinery.
[ bib |
DOI |
http ]
A technique is presented for global analysis of program structure in order to perform compile time optimization of object code generated for expressions. The global expression optimization presented includes constant propagation, common subexpression elimination, elimination of redundant register load operations, and live expression analysis. A general purpose program flow analysis algorithm is developed which depends upon the existence of an "optimizing function." The algorithm is defined formally using a directed graph model of program flow structure, and is shown to be correct. Several optimizing functions are defined which, when used in conjunction with the flow analysis algorithm, provide the various forms of code optimization. The flow analysis algorithm is sufficiently general that additional functions can easily be defined for other forms of global code optimization. |
This file was generated by bibtex2html 1.99.