Results 1 -
5 of
5
A transformation tool for functional logic program development
- German University of Cairo
, 2010
"... Abstract. We present a tool to develop functional logic programs from their specifications. Specifications of functional logic languages, i.e., contracts in the form of pre- and postconditions, are written in the same language as the final programs. Thus, contracts serve either as initial prototypic ..."
Abstract
-
Cited by 1 (1 self)
- Add to MetaCart
(Show Context)
Abstract. We present a tool to develop functional logic programs from their specifications. Specifications of functional logic languages, i.e., contracts in the form of pre- and postconditions, are written in the same language as the final programs. Thus, contracts serve either as initial prototypical implementations or as assertions to check the expected behavior of more efficient implementations. We describe a tool that supports this software development process. Our tool can either instrument ordinary programs with run-time assertions obtained from declarative contracts or can transform declarative contracts into prototypical implementations. 1
Safe and Effective Contracts
, 2011
"... This dissertation introduces a framework enabling the dynamic verification of expressive specifications. Inspired by formal verification methods, this framework supports assertion, framing, and separation contracts. Assertion contracts specify what code should do, whereas framing contracts specify w ..."
Abstract
-
Cited by 1 (0 self)
- Add to MetaCart
This dissertation introduces a framework enabling the dynamic verification of expressive specifications. Inspired by formal verification methods, this framework supports assertion, framing, and separation contracts. Assertion contracts specify what code should do, whereas framing contracts specify what code must not do. Separation contracts, inspired by separation logic, combine an explicit assertion contract with an implicit framing contract. In addition to supporting these expressive contracts, this framework also enables assertions to call existing code with side effects while ensuring that successful assertions do not affect the rest of the program. Contracts are guaranteed safe while remaining easy to write. This dissertation introduces a single interface, the delimited checkpoint, that supports all of the contracts listed above. Similar to previous work on equipping a programming language with first class stores, checkpoints represent a state in time. Computations can be run with memory restored to a checkpoint state. Checkpoints augment existing work with a novel family of difference operations that compare two checkpoints, revealing how the intervening computation interacted with memory. Additionally, checkpoints are delimited:
Exploiting Virtual Machine Infrastructure To Implement Low-Overhead Error Checking Tools
, 2012
"... Program-specific bugs are a growing problem with modern software. General bugs—language-level bugs that would be errors in any program, such as memory leaks and buffer overflows—have mostly been solved by modern programming languages and tools. However, program-specific bugs, such as violating data ..."
Abstract
- Add to MetaCart
Program-specific bugs are a growing problem with modern software. General bugs—language-level bugs that would be errors in any program, such as memory leaks and buffer overflows—have mostly been solved by modern programming languages and tools. However, program-specific bugs, such as violating data structure invariants, remain. In addition, modern trends such as construction of large programs, use of large standard libraries and thirdparty frameworks, and increasingly higher-level languages conspire to make program-specific bugs even more common in the future. Static analysis tools struggle with the size of these programs and language features such as dynamic classloading. Current dynamic analysis tools are too slow, often incurring a slowdown of 1-2 orders of magnitude, and thus can only be used in a debugging environment. In this thesis, we introduce a set of dynamic analysis tools that help programmers find program-specific bugs in their software. These dynamic
Contracts and Specifications for Functional Logic Programming
"... The expressive power of functional logic languages supports high-level specifications as well as efficient implementations of problems in the same language. If specifications are executable, they can be used both as initial prototypical implementations and as contracts for checking the reliable exec ..."
Abstract
- Add to MetaCart
(Show Context)
The expressive power of functional logic languages supports high-level specifications as well as efficient implementations of problems in the same language. If specifications are executable, they can be used both as initial prototypical implementations and as contracts for checking the reliable execution of implementations expected to satisfy the specification. In this paper, we propose a concrete framework to support this general approach to coding. We discuss the notions of specifications and contracts for functional logic programming and present a tool that supports the development of declarative programs based on these notions. 1
Expressing Contract Monitors as Patterns of Communication
"... Abstract We present a new approach to contract semantics which expresses myriad monitoring strategies using a small core of foundational communication primitives. This approach allows multiple existing contract monitoring approaches, ranging from Findler and Felleisen's original model of highe ..."
Abstract
- Add to MetaCart
(Show Context)
Abstract We present a new approach to contract semantics which expresses myriad monitoring strategies using a small core of foundational communication primitives. This approach allows multiple existing contract monitoring approaches, ranging from Findler and Felleisen's original model of higher-order contracts to semi-eager, parallel, or asynchronous monitors, to be expressed in a single language built on well-understood constructs. We prove that this approach accurately simulates the original semantics of higher-order contracts. A straightforward implementation in Racket demonstrates the practicality of our approach which not only enriches existing Racket monitoring strategies, but also support a new style of monitoring in which collections of contracts collaborate to establish a global invariant.