Daniel P. Friedman

Pure, Declarative, and Constructive Arithmetic Relations (Declarative Pearl) ⋆ (2009)

Oleg Kiselyov, William E. Byrd, Daniel P. Friedman, Chung-chieh Shan

Abstract. We present decidable logic programs for addition, multiplication, division with remainder, exponentiation, and logarithm with remainder over the unbounded domain of natural numbers. Our...

Abstract αKanren A Fresh Name in Nominal Logic Programming (2009)

William E. Byrd, Daniel P. Friedman

We present αKanren, an embedding of nominal logic programming in Scheme. αKanren is inspired by αProlog and MLSOS, and allows programmers to easily write interpreters, type inferencers, and other...

Aspect-Oriented Programming is Quantification and Obliviousness Abstract (2009)

Robert E. Filman, Daniel P. Friedman

This paper proposes that the distinguishing characteristic of Aspect-Oriented Programming (AOP) systems is that they allow programming by making quantified programmatic assertions over programs...

Pure, Declarative, and Constructive Arithmetic Relations (Declarative Pearl) ⋆ (2008)

Oleg Kiselyov, William E. Byrd, Daniel P. Friedman, Chung-chieh Shan

Abstract. We present decidable logic programs for addition, multiplication, division with remainder, exponentiation, and logarithm with remainder over the unbounded domain of natural numbers. Our...

Abstract αKanren A Fresh Name in Nominal Logic Programming (2008)

William E. Byrd, Daniel P. Friedman

We present αKanren, an embedding of nominal logic programming in Scheme. αKanren is inspired by αProlog and MLSOS, and allows programmers to easily write interpreters, type inferencers, and other...

Organization: Applications of Continuations (2008)

Daniel P. Friedman

The lecture is in three parts. In the first part we define, primarily by example, the key terms. These are conventional procedures, escape procedures and continuations. The primitive notions of...

Characterizing the Paralation Model using Dynamic Assignment (2008)

Eric T. Freeman, Daniel P. Friedman

Abstract. Collection-oriented languages provide high-level constructs for describing computations over collections. These languages are becoming increasingly popular with the advent of massively...

Abstract Expansion-Passing Style: A General Macro Mechanism* (2008)

R. Kent Dybvig, Daniel P. Friedman, Christopher T. Haynes

The traditional Lisp macro expansion facility inhibits several important forms of expansion control. These include selective expansion of subexpressions, expansion of subexpressions using modified...

Multi-way Streams in Scheme (2007)

John Franco, Daniel P. Friedman, Steven D. Johnson

We present a mechanism for the maintenance of streams based on the Scheme facility of call-with-current-continuation or call/cc. The mechanism supports stream sharing and has overhead cost which is...

An Object Encoding For SelfType (2007)

Steven E. Ganz, Daniel P. Friedman

SelfType is a programming language feature of object systems which allows both methods and instance variable declarations to refer to the type of self. We present an object encoding sucient to model...

CISE Educational Infrastructure: Tools and techniques for use of the Scheme programming language in Undergraduate Education (2007)

Christopher T. Haynes, R. Kent Dybvig, Daniel P. Friedman, Lorilee Sadler, George Springer

the utility of the curricular materials developed by this project. 1 Introduction The Scheme programming language was initially designed at MIT to support research in programming languages [19]. The...

Trampolining Architectures (2007)

Steven Ganz Indiana, Steven E. Ganz, Daniel P. Friedman

A trampolining architecture is a special case and extension of a monad which is useful in implementing multiprogramming. Five trampolining architectures, operating over the range of two trampolining...

A Monadic Categorical Semantics for Threads (2007)

Jonathan Sobel, Steven E. Ganz, Daniel P. Friedman, Mitchell Wand

Rather than relegating threads to be a machine-level concept, it is possible to describe thread semantics at the programming-language level. Here, a categorical semantics is given for a potentially...

Characterizing the Paralation Model using Dynamic Assignment (2007)

Eric Freeman, Daniel P. Friedman

. Collection-oriented languages provide high-level constructs for describing computations over collections. These languages are becoming increasingly popular with the advent of massively parallel...

On the Correctness and Efficiency of the Krivine Machine Mitchell Wand Northeastern University (2007)

Daniel P. Friedman

We provide a short derivation of the Krivine machine by showing how it simulates weak head reduction. We propose a small variation to the machine that improves its performance dramatically. Recall...

Case of Modular Interpreters and the Search for a Solution in Object-Oriented Programming (2007)

Steven E. Ganz, Daniel P. Friedman

The problem of writing modular interpreters for functional languages has largely been studied from the perspective of statically typed languages. This paper explores the use of an object-oriented...

An Object Encoding For SelfType (2007)

Steven E. Ganz, Daniel P. Friedman

SelfType is a programming language feature of object systems which allows both methods and instance variable declarations to refer to the type of self. We present an object encoding sucient to model...

THEORET I CAL PEARLS CPS in Little Pieces: Composing Partial Continuations (2007)

Daniel P. Friedman, Amr Sabry

This paper presents a new two-stage CPS algorithm. The first stage plants trivial partial continuations via a recursive-descent traversal and the second stage is a rewrite system that terminates when...

THEORET I CAL PEARLS CPS in Little Pieces: Composing Partial Continuations (2007)

Daniel P. Friedman, Amr Sabry

This paper presents a new two-stage CPS algorithm. The first stage plants trivial partial continuations via a recursive-descent traversal and the second stage is a rewrite system that transforms all...

by (2007)

Amr Sabry (editor, Daniel P. Friedman

The notion of continuations is ubiquitous in many different areas of computer

D.P.: From variadic functions to variadic relations: A miniKanren perspective (2006)

William E. Byrd, Daniel P. Friedman

We present an implementation of miniKanren, an embedding of logic programming in R 5 RS Scheme that comprises three logic operators. We describe these operators, and use them to define plus o, a...

Improving the Lazy Krivine Machine (2004)

Daniel Friedman Abdulaziz, Daniel P. Friedman, Abdulaziz Ghuloum, Jeremy G. Siek, Lynn Winebarger

Krivine presents the machine, which produces weak head normal form results. Sestoft introduces several call-by-need variants of the machine that implement result sharing via pushing update markers on...

ρ Environments (2003)

Daniel P. Friedman

We provide a short derivation of the Krivine machine by showing how it simulates weak head reduction. We propose a small variation to the machine that improves its performance dramatically. Recall...

Essentials of Programming Languages (2001)

Friedman, Daniel P., Wand, Mitchell, Haynes, Christopher T., Abelson, Hal (pról.)

Obra en que se explican los principales conceptos relativos a los lenguajes de programación, desde un punto de vista analítico, a la vez que se da la semántica de muchos elementos de los lenguajes...

Recursion is a computational effect (2000)

Daniel P. Friedman, Daniel P. Friedman, Amr Sabry, Amr Sabry

In a recent paper, Launchbury, Lewis, and Cook observe that some Haskell applications could benefit from a combinator mfix for expressing recursion over monadic types. We investigate three possible...

Aspect-Oriented Programming is Quantification and Obliviousness (2000)

Robert E. Filman, Daniel P. Friedman

This paper proposes that the distinguishing characteristic of Aspect-Oriented Programming (AOP) systems is that they allow programming by making quantified programmatic assertions over programs...

Writing macros in continuation-passing style (2000)

Erik Hilsdale, Daniel P. Friedman

The Scheme programming language has a standard mechanism for syntactic extension that is little used because it is perceived to have not enough expressive power. While there are useful...

Trampolining Architectures (2000)

Steven E. Ganz, Daniel P. Friedman

A trampolining architecture is a special case and extension of a monad which is useful in implementing multiprogramming. Five trampolining architectures, operating over the range of two trampolining...

Recursion is a Computational E ect (2000)

Daniel P. Friedman, Amr Sabry, Daniel P. Friedman, Amr Sabry

In a recent paper, Launchbury, Lewis, and Cook observe that some Haskell applications could bene t from a combinator m x for expressing recursion over monadic types. We investigate three possible de...

Quantification and Obliviousness (2000)

Robert E. Filman, Daniel P. Friedman, Robert E. Filman, Robert E. Filman, Daniel P. Friedman

This paper proposes that the distinguishing characteristic of Aspect-Oriented Programming (AOP) systems is that they allow programming by making quantified programmatic assertions over programs...

Recursion is a Computational E ect (2000)

Daniel P. Friedman, Amr Sabry, Daniel P. Friedman, Amr Sabry

In a recent paper, Launchbury, Lewis, and Cook observe that some Haskell applications could bene t from a combinator m x for expressing recursion over monadic types. We investigate three possible de...

Trampolined style (1999)

Daniel P. Friedman

Writing programs in continuation-passing style is a good tool for understanding reified continuations and call/cc. Similarly, writing programs in an object-oriented style is a good tool for...

Trampolined style (1999)

Steven E. Ganz, Daniel P. Friedman

A trampolined program is organized as a single loop in which computations are scheduled and their execution allowed to proceed in discrete steps. Writing programs in trampolined style supports...

Abstraction and Performance from Explicit Monadic Reflection (1999)

Jonathan Sobel, Erik Hilsdale, R. Kent Dybvig, R. Kent, Dybvig Daniel, Daniel P.Friedman

ion and Performance from Explicit Monadic Re#ection Jonathan Sobel Erik Hilsdale R. Kent Dybvig Daniel P.Friedman # Department of Computer Science Indiana University Bloomington, Indiana 47405...

Trampolined Style (1999)

Steven E. Ganz, Daniel P. Friedman, Mitchell Wand

A trampolined program is organized as a single loop in whichcomputations are scheduled and their execution allowed to proceed in discrete steps. Writing programsintrampolined style supports...

Trampolined Style (1999)

Steven E. Ganz, Daniel P. Friedman, Mitchell Wand

A trampolined program is organized as a single loop in which computations are scheduled and their execution allowed to proceed in discrete steps. Writing programs in trampolined style supports...

Trampolined Style (1999)

Steven Ganz Indiana, Steven E. Ganz, Daniel P. Friedman

A trampolined program is organized as a single loop in which computations are scheduled and their execution allowed to proceed in discrete steps. Writing programs in trampolined style supports...

Abstraction and Performance from Explicit Monadic Reflection (1999)

Jonathan Sobel, Erik Hilsdale, R. Kent Dybvig, Daniel P. Friedman

Much of the monadic programming literature gets the types right but the abstraction wrong. Using monadic parsing as the motivating example, we demonstrate standard monadic programs in Scheme,...

(Principal Adviser) (1999)

Daniel P. Friedman, Ph. D

ii Copyright cfl1999 Oscar Waddell ALL RIGHTS RESERVED iii iv Acknowledgments I am profoundly grateful to my advisor, Kent Dybvig, for his keen insight, patient support, and sound advice. His active...

Multi-way Streams in Scheme \Lambda. (1999)

John Franco, Daniel P. Friedman, Steven D. Johnson

Abstract We present a mechanism for the maintenance of streams based on the Scheme facility of call-with-current-continuation or call/cc. The mechanism supports stream sharing and has overhead cost...

GRASPE 1.5: A GRAPH PROCESSOR AND ITS APPLICATION. (1998)

Friedman,Daniel P., Dickson,David C., Fraser,John J., Pratt,Terrence W.

A set of primitives to allow graph processing on a list processing system is investigated. The object of the investigation is to provide a method of applying intuitive graph solution techniques to...

Data Compilation: Its Design and Analysis. (1998)

Franco, John, Friedman, Daniel P.

The aim of this research is to study the idea compilation and its impact on the development of concise, efficient, verifiable code. This entails developing, formalizing, analyzing, and extending a...

Synthesizing object-oriented and functional design to promote re-use (1998)

Shriram Krishnamurthi, Matthias Felleisen, Daniel P. Friedman

Abstract. Many problems require recursively speci ed types of data and a collection of tools that operate on those data. Over time, these problems evolve so that the programmer must extend the...

Recycling Continuations (1998)

Jonathan Sobel, Daniel P. Friedman

If the continuations in functional data-structure-generating programs are made explicit and represented as records, they can be #recycled." Once they have served their purpose as temporary,...

Revised^5 Report on the Algorithmic Language Scheme (1998)

H. Abelson, R. Kent Dybvig, Christopher T. Haynes, Guillermo J. Rozas, ...

The report gives a defining description of the programming language Scheme. Scheme is a statically scoped and properly tail-recursive dialect of the Lisp programming language invented by Guy Lewis...

Revised^5 Report on the Algorithmic Language Scheme (1998)

Richard Kelsey, William Clinger, Jonathan Rees (editors, Jonathan Rees, H. Abelson, ...

Programming languages should be designed not by piling feature on top of feature, but by removing the weaknesses and restrictions that make additional features appear necessary. Scheme demonstrates...

Revised^5 Report on the Algorithmic Language Scheme (1998)

Richard Kelsey, William Clinger, Jonathan Rees (editors, Jonathan Rees, H. Abelson, ...

Programming languages should be designed not by piling feature on top of feature, but by removing the weaknesses and restrictions that make additional features appear necessary. Scheme demonstrates...

An Introduction to Reflection-Oriented Programming (1996)

J.M. Sobel, Daniel P. Friedman

Most accounts of reflection are in an interpreted framework and tend to assume the availability of particular pieces of the state of a program's interpretation, including the current source code...

Modeling Subobject-based Inheritance (1996)

Jonathan G. Rossie, Daniel P. Friedman

: A model of subobjects and subobject selection gives us a concise expression of key semantic relationships in a variety of inheritance-based languages. Subobjects and their selection have been...

Modeling Subobject-based Inheritance (1996)

Jonathan G. Rossie, Daniel P. Friedman, Mitchell Wand

. A model of subobjects and subobject selection gives us a concise expression of key semantic relationships in a variety of inheritancebased languages. Subobjects and their selection have been...

Modeling Subobject-based Inheritance (1996)

Jonathan Rossie, Daniel P. Friedman

. A model of subobjects and subobject selection gives us a concise expression of key semantic relationships in a variety of inheritancebased languages. Subobjects and their selection have been...

An Algebraic Semantics of Subobjects (1996)

Jonathan G. Rossie, Daniel P. Friedman

Existing formalisms of inheritance are not sufficient to model the complexities of the kind of multiple inheritance exemplified in C++. Any satisfactory formalism must model the complicating effects...

An Introduction to Reflection-Oriented Programming (1996)

Jonathan M. Sobel, Daniel P. Friedman

Most accounts of reflection are in an interpreted framework and tend to assume the availability of particular pieces of the state of a program's interpretation, including the current source code...

A Unified Approach to Hardware Verification through Heterogeneous Logic of Design Diagrams (1996)

Jon Barwise, Steven D. Johnson, Daniel P. Friedman, Kathryn Fisler, Kathryn Fisler

Designers use a variety of notations, some of them diagrammatic, while developing systems. Unfortunately, verification tools mainly support single, textual logics. This gap between design practice...

Compiler Construction Using Scheme (1995)

Erik Hilsdale, J. Michael Ashley, R. Kent Dybvig, R. Kent, Dybvig Daniel, Daniel P. Friedman

This paper describes a course in compiler design that focuses on the Scheme implementation of a Scheme compiler that generates native assembly code for a real architecture. The course is suitable for...

Compiler Construction Using Scheme (1995)

Erik Hilsdale, J. Michael Ashley, R. Kent Dybvig, R. Kent, Dybvig Daniel, Daniel P. Friedman

This paper describes a course in compiler design that focuses on the Scheme implementation of a Scheme compiler that generates native assembly code for a real architecture. The course is suitable for...

Foundations for a Semantics of Subobjects (Extended Abstract) (1995)

Jonathan G. Rossie, Daniel P. Friedman

Jonathan G. Rossie, Jr. and Daniel P. Friedman fjrossie,dfriedg@cs.indiana.edu Department of Computer Science, Indiana University 215 Lindley Hall, Bloomington, Indiana 47405 May 17, 1995 Abstract We...

Towards a Theory of Reflective Programming Languages (1993)

Anurag Mendhekar, C Flanurag Mendhekar, Daniel P. Friedman, Daniel P. Friedman

This paper attempts to develop a better theoretical understanding of reflective systems. We begin by a developing a reflective extension of the v -calculus and define a simple operational semantics...

Towards a Theory of Reflective Programming Languages (Extended Abstract) (1993)

Anurag Mendhekar, Daniel P. Friedman

This paper attempts to develop a better theoretical understanding of reflective systems. We begin by developing a reflective extension of the Lambda-calculus and define a simple operational semantics...

Quasi-Static Scoping: Sharing Variable Bindings Across Multiple Lexical Scopes (1993)

Shinn-Der Lee, Daniel P. Friedman

Static scoping embodies a strong encapsulation mechanism for hiding the details of program units. Yet, it does not allow the sharing of variable bindings (locations) across independent program units....

First-class Interpreters: Illustrating the Limits Imposed by Representation in a Reflective Language (1993)

John Wiseman Simmons, John Wiseman, Simmons Ii, Daniel P. Friedman

Introduction A reflective system allows the user's code to reify and manipulate parts of the system's computational state. The modified state can then be reinstalled, changing the course of...

First-class extents (1992)

Shinn-der Lee, Daniel P. Friedman

Abstract. Adding environments as first-class entities to a language can greatly enhance its expressiveness. But first-class environments rely on identifiers, the syntax of variables, and thus do not...

First-Class Extents (1992)

Shinn-Der Lee, Daniel P. Friedman

Adding environments as first-class values to a language can greatly enhance its expressiveness. But first-class environments do not mesh well into a lexically scoped language since they rely on...

Language Extension via First-class Interpreters (1992)

John Wiseman Simmons, John Wiseman, Simmons Ii, Stanley Jefferson, Daniel P. Friedman

Refci is an extensible reflective language based on the reflective tower model. The Refci interpreter procedures are reifiable, first-class objects, and user programs can directly modify the...

Towards Leakage Containment (1992)

Julia L. Lawall, Daniel P. Friedman

Functional programs are organized into procedures, each encapsulating a specific task. A procedure should not cause its callers to repeat its work. This forced repetition of work we call leakage. In...

A Reflective System is as Extensible as its Internal Representations: An Illustration (1992)

John Wiseman Simmons, John Wiseman, Simmons Ii, Daniel P. Friedman

Reflective systems are intended to be open enough to allow the user to extend and modify them easily. In this paper we show that the openness and extensibility of a reflective system depends to a...

A Simple Reflective Interpreter (1992)

Stanley Jefferson, Stanley Jefferson, Daniel P. Friedman, Daniel P. Friedman

Procedurally reflective programming languages enable user programs to semantically extend the language itself, by permitting them to run at the level of the language implementation with access to...

A simple reflective interpreter (1992)

Stanley Jefferson, Daniel P. Friedman

Procedurally reflective programming languages enable user programs to semantically extend the language itself, by permitting them to run at the level of the language implementation with access to...

Towards Leakage Containment (1992)

Julia L. Lawall, Daniel P. Friedman

Functional programs are organized into procedures, each encapsulating a speci c task. A procedure should not cause its callers to repeat its work. This forced repetition of work we call leakage. In...

First-class extents (1992)

Shinn-der Lee, Daniel P. Friedman

Adding environments as rst-class values to a language can greatly enhance its expressiveness. But rst-class environments do not mesh well into a lexically scoped language since they rely on identi...

Revised^4 Report on the Algorithmic Language Scheme (1991)

William Clinger, Jonathan Rees, Jonathan Rees (editors, Hal Abelson, ...

Programming languages should be designed not by piling feature on top of feature, but by removing the weaknesses and restrictions that make additional features appear necessary. Scheme demonstrates...

Multi-way Streams in Scheme (1989)

John Franco Daniel, Daniel P. Friedman, Steven D. Johnson

We present a mechanism for the maintenance of streams based on the Scheme facility of call-with-current-continuation or call/cc. The mechanism supports stream sharing and has overhead cost which is...

The mystery of the tower revealed: A non-reflective description of the reflective tower (1988)

Daniel P. Friedman

In an important series of papers [8, 9], Brian Smith has discussed the nature of programs that know about their text and the context in which they are executed. He called this kind of knowledge...

Expansion-Passing Style: A General Macro Mechanism (1988)

R. Kent Dybvig, Daniel P. Friedman, Christopher T. Haynes

The traditional Lisp macro expansion facility inhibits several important forms of expansion control. These include selective expansion of subexpressions, expansion of subexpressions using modified...