Daniel P. Friedman

dblp:f/DPFriedman · DBLP profile ↗
← Back
37ranked-venue papers
10as first author
0since 2021 · last 2016
0000-0001-9992-1675ORCID · verified

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 26 · 5 first-authorTheory of computation · 8 · 4 first-authorDatabases, data management, data science and information retrieval · 3 · 3 first-authorHuman-computer interaction and ubiquitous computing · 3Systems, architecture and hardware · 1 · 1 first-author

Expertise — from the expertise taxonomy: the topics of the expert's papers under the CCF categories. A weight counts papers with recency: 1 for a paper about the topic, 0.3 when the topic is its context, halved every five years.

Software engineering, system software, and programming languages
9 papers
Programming languages and type systems · 98% Concurrent programming · 2% Compilers and program optimization · 0%
Theoretical computer science
2 papers
Logic in computer science · 44% Mathematical optimization · 44% Automated reasoning and model checking · 13%

Topics — the 24 heaviest of 24, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Programming languages and type systems
language design
0.021995
An Algebraic Semantics of Subobjects · OOPSLA 1995
Quasi-Static Scoping: Sharing Variable Bindings Across Multiple Lexical Scopes · POPL 1993
Programming languages and type systems
language semantics
0.011995
An Algebraic Semantics of Subobjects · OOPSLA 1995
Programming languages and type systems › language semantics › formal semantics
object-oriented language semantics
0.011995
An Algebraic Semantics of Subobjects · OOPSLA 1995
Programming languages and type systems › lambda calculus
variable binding
0.011993
Quasi-Static Scoping: Sharing Variable Bindings Across Multiple Lexical Scopes · POPL 1993
Programming languages and type systems › control structures
control abstraction
0.021987
Embedding Continuations in Procedural Objects · ACM Trans. Program. Lang. Syst. 1987
Constraining Control · POPL 1985
Programming languages and type systems › control operators
dynamic-wind
0.021987
Embedding Continuations in Procedural Objects · ACM Trans. Program. Lang. Syst. 1987
Constraining Control · POPL 1985
Programming languages and type systems › control operators
first-class continuations
0.021987
Embedding Continuations in Procedural Objects · ACM Trans. Program. Lang. Syst. 1987
Constraining Control · POPL 1985
Programming languages and type systems
lambda calculus
0.011987
A Calculus for Assignments in Higher-Order Languages · POPL 1987
Programming languages and type systems › language semantics › formal semantics
operational semantics
0.011987
A Calculus for Assignments in Higher-Order Languages · POPL 1987
Mathematical optimization › iterative methods
continuation method
0.011986
Reasoning with Continuations · LICS 1986
Logic in computer science
lambda calculus
0.011986
Reasoning with Continuations · LICS 1986
Programming languages and type systems
module systems
0.011993
Quasi-Static Scoping: Sharing Variable Bindings Across Multiple Lexical Scopes · POPL 1993
Programming languages and type systems › functional programming
applicative programming
0.011980
An Indeterminate Constructor for Applicative Programming · POPL 1980
Concurrent programming › concurrent processes
parallel processes
0.011980
An Indeterminate Constructor for Applicative Programming · POPL 1980
Programming languages and type systems
extensibility
0.011987
Embedding Continuations in Procedural Objects · ACM Trans. Program. Lang. Syst. 1987
Programming languages and type systems › programming paradigms
imperative languages
0.011987
A Calculus for Assignments in Higher-Order Languages · POPL 1987
Parallel and multicore computing
parallel programming models
0.011978
Aspects of Applicative Programming for Parallel Processing · IEEE Trans. Computers 1978
Programming languages and type systems
control operators
0.011986
Reasoning with Continuations · LICS 1986
Knowledge, reasoning and agents › Knowledge representation and reasoning
temporal reasoning
0.011977
Hendrix's Model for Simultaneous Actions and Continuous Processes: An Introduction and Implementation · Int. J. Man Mach. Stud. 1977
Automated reasoning and model checking
reasoning about actions
0.011977
Hendrix's Model for Simultaneous Actions and Continuous Processes: An Introduction and Implementation · Int. J. Man Mach. Stud. 1977
Programming languages and type systems
evaluation strategies
0.011976
CONS Should Not Evaluate its Arguments · ICALP 1976
Programming languages and type systems
lazy evaluation
0.011976
CONS Should Not Evaluate its Arguments · ICALP 1976
Compilers and program optimization
parallelizing compiler
0.011978
Aspects of Applicative Programming for Parallel Processing · IEEE Trans. Computers 1978
Programming languages and type systems
functional programming
0.011976
CONS Should Not Evaluate its Arguments · ICALP 1976

Methods — techniques the papers use, named apart from their topics

formal modeling · 0.0algebraic semantics · 0.0fluids · 0.0continuations · 0.0rewriting semantics · 0.0domain mechanisms · 0.0denotational semantics · 0.0suspension-based evaluation · 0.0recursion elimination · 0.0
YearPublicationVenuePosition
2016 A small embedding of logic programming with a simple complete search
abstract
We present a straightforward, call-by-value embedding of a small logic programming language with a simple complete search. We construct the entire language in 54 lines of Racket---half of which implement unification. We then layer over it, in 43 lines, a reconstruction of an existing logic programming language, miniKanren, and attest to our implementation's pedagogical value. Evidence suggests our combination of expressiveness, concision, and elegance is compelling: since microKanren's release, it has spawned over 50 embeddings in over two dozen host languages, including Go, Haskell, Prolog and Smalltalk.
Jason Hemann, Daniel P. Friedman, William E. Byrd, Matthew Might
DLS2
2008 alpha-leanTAP: A Declarative Theorem Prover for First-Order Classical Logic
Joseph P. Near, William E. Byrd, Daniel P. Friedman
ICLP3
2005 Backtracking, interleaving, and terminating monad transformers: (functional pearl)
abstract
We design and implement a library for adding backtracking computations to any Haskell monad. Inspired by logic programming, our library provides, in addition to the operations required by the MonadPlus interface, constructs for fair disjunctions, fair conjunctions, conditionals, pruning, and an expressive top-level interface. Implementing these additional constructs is easy in models of backtracking based on streams, but not known to be possible in continuation-based models. We show that all these additional constructs can be generically and monadically realized using a single primitive msplit. We present two implementations of the library: one using success and failure continuations; and the other using control operators for manipulating delimited continuations.
Oleg Kiselyov, Chung-chieh Shan, Daniel P. Friedman, Amr Sabry
ICFP3
2002 CPS in little pieces: composing partial continuations
abstract
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 nontail calls into tail calls. The algorithm combines the metaphors of the Plotkin-style CPS transformation along with reduction in the λ-calculus.
Daniel P. Friedman, Amr Sabry
J. Funct. Program.1
1999 Trampolined Style
abstract
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 primitives for multithreading without language support for continuations. Various forms of trampolining allow for different degrees of interaction between threads. We present two architectures based on an only mildly intrusive trampolined style. Concurrency can be supported at multiple levels of granularity by performing the trampolining transformation multiple times.
Steven E. Ganz, Daniel P. Friedman, Mitchell Wand
ICFP2
1998 Synthesizing Object-Oriented and Functional Design to Promote Re-Use
Shriram Krishnamurthi, Matthias Felleisen, Daniel P. Friedman
ECOOP3
1998 Recycling Continuations
abstract
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, intermediate structures for managing program control, the space they occupy can be reused for the structures that the programs produce as their output. To effect this immediate memory reclamation, we use a sequence of correctness-preserving program transformations, demonstrated through a series of simple examples. We then apply the transformations to general anamorphism operators, with the important consequence that all finite-output anamorphisms can now be run without any stack- or continuation-space overhead.
Jonathan Sobel, Daniel P. Friedman
ICFP2
1996 Modeling Subobject-based Inheritance
Jonathan G. Rossie Jr., Daniel P. Friedman, Mitchell Wand
ECOOP2
1996 Enriching the Lambda Calculus with Contexts: Toward a Theory of Incremental Program Construction
abstract
A context in the λ-calculus is a term with some holes. Hole filling differs from β-substitution in that name capture is intended. This seemingly simple feature transcends static scope and lies at the heart of modular and object-oriented programming. Still, the name capture feature of hole filling is at odds with hygienic β-substitution. In this paper we conservatively extend the λ-calculus to incorporate the notion of contexts without jeopardizing the β-rule. We perceive contexts as source code and λ-terms as target code. Context filling is encoded as compilation operations and the enriched calculus is a theory of separate compilation and incremental program construction. Linking of separately-developed programs is done by coherent renaming of free variables.We apply our context-enriching schema to the λ-calculus extended with definitions and devise a calculus of first-class modules. We show that module linking can be modeled solely by the renaming of import and export variables. We add relinkable variable references to model virtual method references essential to object systems.The inclusion of contexts introduces parameters whose linking is based on names (symbols, identifiers, or keywords). We simulate in the context-enriched calculus other extensions of the λ-calculus with name-based programming notions such as Dami's λ-calculus with names, Aït-Kaci and Garrigue's label-selective λ-calculus, Lamping's transparent data parameters, and our quasi-static procedures.
Shinn-Der Lee, Daniel P. Friedman
ICFP2
1995 An Algebraic Semantics of Subobjects
abstract
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 of virtual and nonvirtual base classes as well as virtual and non-virtual methods. By abstracting the implementational notion of a subobject and formalizing subobject selection, we develop a formalism to model this combination of features. Not intended as a formal semantics of C++, the resulting model should nevertheless provide an essential level of understanding for language theorists and implementors in their dealings with C++ and related languages. 1 Introduction The style of multiple inheritance first proposed for Simula by Krogdahl[21] and later developed into the C++ multiple inheritance system by Stroustrup[35, 15] exemplifies a particular kind of inheritance in which the underlying imperative is to maintain the integrity of subobjects. Subobjects are historically an implementation...
Jonathan G. Rossie Jr., Daniel P. Friedman
OOPSLA2
1993 Quasi-Static Scoping: Sharing Variable Bindings Across Multiple Lexical Scopes
abstract
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. Facilities such as module and object systems that require cross references of variables therefore must be added as special features. In this paper we present an alternative: quasi-static scoping. Quasi-static scoping is more flexible than static scoping, but has the same encapsulation mechanism. The user can control when and in what scope to resolve a quasi-static variable, i.e., to associate it with a variable binding. To demonstrate its versatility, we add quasi-static scoping to Scheme and show how to build the aforementioned facilities at the user-level. We also show that quasi-static scoping can be implemented efficiently.
Shinn-Der Lee, Daniel P. Friedman
POPL2
1993 Issues in the choice of programming language for CS 1 (abstract)
abstract
No abstract available.
Rhys Price Jones, Doug Cooper, Daniel P. Friedman, Richard C. Holt, Peter Robinson 0001
SIGCSE3
1993 Using SCHEME in the introductory computer science curriculum (abstract)
abstract
No abstract available.
Arthur M. Riehl, Daniel P. Friedman, Brian Harvey, Simon M. Kaplan, Richard M. Salter, George Springer
SIGCSE2
1990 A Syntactic Theory of Transparent Parameterization
Stanley Jefferson, Shinn-Der Lee, Daniel P. Friedman
ESOP3
1990 Towards a Facility for Lexically Scoped, Dynamic Mutual Recursion in Scheme
John V. Franco, Daniel P. Friedman
Comput. Lang.2
1990 Multi-Way Streams in Scheme
John V. Franco, Daniel P. Friedman, Steven D. Johnson
Comput. Lang.2
1989 Creating Efficient Programs by Exchanging Data for Procedures
John V. Franco, Daniel P. Friedman
Comput. Lang.2
1989 A Syntactic Theory of Sequential State
Matthias Felleisen, Daniel P. Friedman
Theor. Comput. Sci.2
1987 A Calculus for Assignments in Higher-Order Languages
abstract
Imperative assignments are abstractions of recurring programming patterns in purely functional programming languages. When added to higher-order functional languages, they provide a higher-level of modularity and security but invalidate the simple substitution semantics. We show that, given an operational interpretation of a denotational semantics for such a language, it is possible to design a two-level extension of the lu-calculus. This calculus provides a location-free rewriting semantics of the language and offers new possibilities for reasoning with assignments. The upper level of the calculus factors out all the steps in a reduction sequence which must be in a linear order; the lower level allows a partial ordering of reduction steps.
Matthias Felleisen, Daniel P. Friedman
POPL2
1987 Abstracting Timed Preemption with Engines
Christopher T. Haynes, Daniel P. Friedman
Comput. Lang.2
1987 A Syntactic Theory of Sequential Control
Matthias Felleisen, Daniel P. Friedman, Eugene E. Kohlbecker, Bruce F. Duba
Theor. Comput. Sci.2
1987 Embedding Continuations in Procedural Objects
abstract
Continuations, when available as first-class objects, provide a general control abstraction in programming languages. They liberate the programmer from specific control structures, increasing programming language extensibility. Such continuations may be extended by embedding them in procedural objects. This technique is first used to restore a fluid environment when a continuation object is invoked. We then consider techniques for constraining the power of continuations in the interest of security and efficiency. Domain mechanisms, which create dynamic barriers for enclosing control, are implemented using fluids. Domains are then used to implement an unwind-protect facility in the presence of first-class continuations. Finally, we present two mechanisms, wind-unwind and dynamic-wind, that generalize unwind-protect.
Christopher T. Haynes, Daniel P. Friedman
ACM Trans. Program. Lang. Syst.2
1986 Reasoning with Continuations
Matthias Felleisen, Daniel P. Friedman, Eugene E. Kohlbecker, Bruce F. Duba
LICS2
1986 A Closer Look at Export and Import Statements
Matthias Felleisen, Daniel P. Friedman
Comput. Lang.2
1986 Obtaining Coroutines with Continuations
Christopher T. Haynes, Daniel P. Friedman, Mitchell Wand
Comput. Lang.2
1985 Constraining Control
abstract
Continuations, when available as first-class objects, provide a general control abstraction in programming languages. They liberate the programmer from specific control structures, increasing programming language extensibility. Such continuations may be extended by embedding them in functional objects. This technique is first used to restore a fluid environment when a continuation object is invoked. We then consider techniques for constraining the power of continuations in the interest of security and efficiency. Domain mechanisms, which create dynamic barriers for enclosing control, are implemented using fluids. Domains are then used to implement an unwind-protect facility in the presence of first-class continuations. Finally, we demonstrate two mechanisms, wind-unwind and dynamic-wind, that generalize unwind-protect.
Daniel P. Friedman, Christopher T. Haynes
POPL1
1980 An Indeterminate Constructor for Applicative Programming
abstract
This paper proposes the encapsulization and control of contending parallel processes within data structures. The advantage of embedding the contention within data is that the contention, itself, thereby becomes an object which can be handled by the program at a level above the actions of the processes themselves. This means that an indeterminate behavior, never precisely specified by the programmer or by the input, may be shared in the same way that an argument to a function is shared by every use of the corresponding parameter, an ability which is of particular importance to applicative-style programming.
Daniel P. Friedman, David S. Wise
POPL1
1980 Concur: A Language for Continuous, Concurrent Processes
Richard M. Salter, Terence J. Brennan, Daniel P. Friedman
Comput. Lang.3
1979 Reference Counting Can Manage the Circular Environments of Mutual Recursion
Daniel P. Friedman, David S. Wise
Inf. Process. Lett.1
1978 Functional Combination
Daniel P. Friedman, David S. Wise
Comput. Lang.1
1978 Compiling Lambda-Expressions Using Continuations and Factorizations
Mitchell Wand, Daniel P. Friedman
Comput. Lang.2
1978 Unbounded Computational Structures
abstract
Abstract The concept of suspended evaluation is used as an approach to co‐routines. Problems from the literature involving infinite data structures are solved in a LISP‐like applicative language to demonstrate that simple new semantics can enrich old and ‘friendly’ control structures. It appears that the very nature of these problems draws control structure and data structure together, so that issues of style may be studied at once for both.
Daniel P. Friedman, David S. Wise
Softw. Pract. Exp.1
1978 Aspects of Applicative Programming for Parallel Processing
abstract
Early results of a project on compiling stylized recursion into stackless iterative code are reviewed as they apply to a target environment with multiprocessing. Parallelism is possible in executing the compiled image of argument evaluation (collateral argument evaluation of Algol 68), of data structure construction when suspensions are used, and of functional combinations. The last facility provides generally, concise expression for all operations performed in Lisp by mapping functions and in APL by typed operators; there are other uses as well.
Daniel P. Friedman, David S. Wise
IEEE Trans. Computers1
1977 Hendrix's Model for Simultaneous Actions and Continuous Processes: An Introduction and Implementation
John D. Lowrance, Daniel P. Friedman
Int. J. Man Mach. Stud.2
1976 CONS Should Not Evaluate its Arguments
Daniel P. Friedman, David S. Wise
ICALP1
1976 Output Driven Interpretation of Recursive Programs, or Writing Creates and Destroys Data Structures
Daniel P. Friedman, David S. Wise
Inf. Process. Lett.1
1976 Garbage Collecting a Heap Which Includes a Scatter Table
Daniel P. Friedman, David S. Wise
Inf. Process. Lett.1