William R. Cook

William R. Cook
University of Texas at Austin | UT · Department of Computer Science

PhD Brown University

About

120
Publications
20,335
Reads
How we measure 'reads'
A 'read' is counted each time someone views a publication summary (such as the title, abstract, and list of authors), clicks on a figure, or views or downloads the full-text. Learn more
4,638
Citations
Citations since 2017
2 Research Items
692 Citations
2017201820192020202120222023020406080100120140
2017201820192020202120222023020406080100120140
2017201820192020202120222023020406080100120140
2017201820192020202120222023020406080100120140
Introduction
Programming languages, modeling languages, domain-specific languages, strategic programming, interfacing programming languages and databases, distributed computing and web services, software engineering, type theory, mixins, object-oriented programming, web-based information systems. Currently working on Ensō: A self-describing DSL workbench.
Additional affiliations
January 2003 - present
University of Texas at Austin
February 1991 - May 1993
Apple Inc.
Position
  • Software Engineer
Description
  • I ran the team that developed AppleScript and the Open Scripting Architecture
August 1989 - January 1991
HP Inc.
Position
  • Member of Technical Staff

Publications

Publications (120)
Article
This paper addresses the problem of verifying equivalence between a pair of programs that operate over databases with different schemas. This problem is particularly important in the context of web applications, which typically undergo database refactoring either for performance or maintainability reasons. While web applications should have the sam...
Conference Paper
Applications in the cloud such as real-time analytics and interactive analysis combine large-scale components with overlapping functionality but with very different non-functional properties to meet requirements such as scalability, latency, fault-tolerance, and consistency. The current state of the art is the Lambda Architecture, in which a batch...
Conference Paper
The majority of modern programming languages provide concurrency and object-orientation in some form. However, object-oriented concurrency remains cumbersome in many situations. We introduce the language OrcO, Orc with concurrent Objects, which enables a flexible style of concurrent object-oriented programming. OrcO extends the Orc programming lang...
Article
The majority of modern programming languages provide concurrency and object-orientation in some form. However, object-oriented concurrency remains cumbersome in many situations. We introduce the language OrcO, Orc with concurrent Objects, which enables a flexible style of concurrent object-oriented programming. OrcO extends the Orc programming lang...
Conference Paper
Distributed programs are often written as a collection of communicating modules. For example, to use Java RMI, programs are divided into objects which can be remotely referenced. Yet, in many cases, it would be desirable to write the program without the program structure being driven by distribution decisions. If distribution is decoupled from prog...
Article
Full-text available
Programming languages, modeling languages, feature-oriented programming, interfacing programming languages and databases, distributed computing and web services , software engineering, type theory, web-based information systems.
Article
Language workbenches are environments for simplifying the creation and use of computer languages. The annual Language Workbench Challenge (LWC) was launched in 2011 to allow the many academic and industrial researchers in this area an opportunity to quantitatively and qualitatively compare their approaches. We first describe all four LWCs to date,...
Article
An Object Grammar is a variation on traditional BNF grammars, where the notation is extended to support declarative bidirectional mappings between text and object graphs. The two directions for interpreting Object Grammars are parsing and formatting. Parsing transforms text into an object graph by recognizing syntactic features and creating the cor...
Conference Paper
Full-text available
Language workbenches are tools that provide high-level mechanisms for the implementation of (domain-specific) languages. Language workbenches are an active area of research that also receives many contributions from industry. To compare and discuss existing language workbenches, the annual Language Workbench Challenge was launched in 2011. Each yea...
Conference Paper
Full-text available
Object algebras are a new programming technique that enables a simple solution to basic extensibility and modularity issues in programming languages. While object algebras excel at defining modular features, the composition mechanisms for object algebras (and features) are still cumbersome and limited in expressiveness. In this paper we leverage tw...
Conference Paper
Object Grammars define mappings between text and object graphs. Parsing recognizes syntactic features and creates the corresponding object structure. In the reverse direction, formatting recognizes object graph features and generates an appropriate textual presentation. The key to Object Grammars is the expressive power of the mapping, which decoup...
Article
Full-text available
Incremental Programming (IP) is a programming style in which new program components are defined as increments of other components. Examples of IP mechanisms include: Object-oriented programming (OOP) inheritance, aspect-oriented programming (AOP) advice and feature-oriented programming (FOP). A characteristic of IP mechanisms is that, while individ...
Conference Paper
Full-text available
Managed Data is a two-level approach to data abstraction in which programmers first define data description and manipulation mechanisms, and then use these mechanisms to define specific kinds of data. Managed Data allows programmers to take control of many important aspects of data, including persistence, access/change control, reactivity, logging,...
Article
Full-text available
This paper presents a new functional programming model for graph structures called structured graphs. Structured graphs extend conventional algebraic datatypes with explicit definition and manipulation of cycles and/or sharing, and offer a practical and convenient way to program graphs in functional programming languages like Haskell. The represent...
Article
Full-text available
Object Grammars define mappings between text and object graphs. Parsing recognizes syntactic features and creates the corresponding object struc-ture. In the reverse direction, formatting recognizes object graph features and generates an appropriate textual presentation. The key to Object Grammars is the expressive power of the mapping, which decou...
Conference Paper
Full-text available
Although Breadth-First Search (BFS) has several advantages over Depth-First Search (DFS) its prohibitive space requirements have meant that algorithm designers often pass it over in favor of DFS. To address this shortcoming, we introduce a theory of efficient BFS (EBFS), along with a simple recursive program schema for carrying out the search. The...
Chapter
Full-text available
Although Breadth-First Search (BFS) has several advantages over Depth-First Search (DFS) its prohibitive space requirements have meant that algorithm designers often pass it over in favor of DFS. To address this shortcoming, we introduce a theory of Efficient BFS (EBFS) along with a simple recursive program schema for carrying out the search. The t...
Conference Paper
Full-text available
This paper presents a new solution to the expression problem (EP) that works in OO languages with simple generics (including Java or C#). A key novelty of this solution is that advanced typing features, including F-bounded quantification, wildcards and variance annotations, are not needed. The solution is based on object algebras, which are an abst...
Conference Paper
Full-text available
Hybrid partial evaluation (HPE) is a pragmatic approach to partial evaluation that borrows ideas from both online and offline partial evaluation. HPE performs offline-style specialization using an online approach without static binding time analysis. The goal of HPE is to provide a practical and predictable level of optimization for programmers, wi...
Conference Paper
Full-text available
Mechanized proof assistants are powerful verification tools, but proof development can be difficult and time-consuming. When verifying a family of related programs, the effort can be reduced by proof reuse. In this paper, we show how to engineer product lines with theorems and proofs built from feature modules. Each module contains proof fragments...
Article
Full-text available
This paper is a short tutorial introduction to online partial evaluation. We show how to write a simple online partial evaluator for a simple, pure, first-order, functional programming language. In particular, we show that the partial evaluator can be derived as a variation on a compositionally defined interpreter. We demonstrate the use of the res...
Conference Paper
Full-text available
Most learning in planners to date has been focused on speedup learning. Recently the focus has been more on learn-ing to improve plan quality. We introduce a different dimen-sion: learning not just from failed plans, but learning from inefficient plans. We call this cost-based learning (CAL). CBL can be used to improve both plan quality and provide...
Article
Full-text available
Cascading Style Sheets (CSS) are used in the HyperText Markup Language (HTML) to describe the style, size, color, and position of elements in a document. While simple styles are easy to specify, a style sheet for a complex site can become many thousands of lines long. One problem in style sheets is that as they grow there is a tendency for increasi...
Conference Paper
Most large-scale applications integrate remote services and/ or transactional databases. Yet building software that efficiently invokes distributed service or accesses relational databases is still quite difficult. Existing approaches to these problems are based on the Remote Procedure Call (RPC), Object-Relational Mapping (ORM), or Web Services (W...
Conference Paper
Full-text available
A long-standing problem in algorithm design has been to characterize the class of problems for which greedy algorithms exist. Many greedy problems can be described using algebraic structures called matroids, which were later generalized to greedoids. Once in this form, the original problem can be solved using Edmonds’ Greedy Algorithm. However ther...
Conference Paper
Full-text available
Due to the shift from software-as-a-product (SaaP) to software-as-a-service (SaaS), software components that were developed to run in a single address space must increasingly be accessed remotely across the network. Distribution middleware is frequently used to facilitate this transition. Yet a range of middleware platforms exist, and there are few...
Conference Paper
Full-text available
Revision control systems are a major means to manage versions and variants of today's software systems. An ongoing problem in these systems is how to resolve conflicts when merging independently developed revisions. Unstructured revision control systems are purely text-based and solve conflicts based on textual similarity. Structured revision contr...
Conference Paper
Full-text available
Most large-scale applications integrate remote services and/or transactional databases. Yet building software that efficiently invokes distributed service and accesses relational databases is still quite difficult. Existing approaches to these problems are based on the Remote Procedure Call (RPC) and Object-Relational Mapping (ORM). RPCs have been...
Conference Paper
Full-text available
Advice is a mechanism, widely used in aspect-oriented lan- guages, that allows one program component to augment or modify the behavior of other components. When advice and other components are composed together they become tightly coupled, sharing both control and data flows. How- ever this creates important problems: modular reasoning about a comp...
Conference Paper
Full-text available
Abstract—The Web Service Description Language,defines a service as a procedure,whose,inputs,and,outputs,are structured XML data values, sometimes called documents. In this paper,we,argue,that document-oriented interfaces can be viewed,as batches of calls to finer-grained procedural interfaces. Turning this correspondence around, we show that flexib...
Conference Paper
Full-text available
In 1985 Luca Cardelli and Peter Wegner, my advisor, published an ACM Computing Surveys paper called "On understanding types, data abstraction, and polymorphism". Their work kicked off a flood of research on semantics and type theory for object-oriented programming, which continues to this day. Despite 25 years of research, there is still widespread...
Conference Paper
Full-text available
Domain Specific Languages are raising the level of abstraction of software specifications and of knowledge represen-tation in general. When DSLs are used to formalize the results of domain analysis, the result is a clean separation of concerns in the problem space. This is a major advance over aspect oriented programming, where separation of concer...
Conference Paper
Full-text available
It is well-known that a naive algorithm can often be turned into an efficient program by applying appropriate semantics - preserving transformations. This technique has been used to derive programs to solve a variety of maximum-sum pro- grams. One problem with this approach is that each prob- lem variation requires a new set of transformations to b...
Article
Full-text available
Web services are promoted as a new model for distributed systems, yet many skeptics see them as simply a poor implementation of traditional remote procedure calls (RPC) or distributed objects. Previous comparisons support the skeptics: web services are shown to be significantly slower than RPC, and they lack features like automatic proxies. However...
Conference Paper
Full-text available
Reflective Database Access Control (RDBAC) is a model in which a database privilege is expressed as a database query itself, rather than as a static privilege in an access control matrix. RDBAC aids the management of database access controls by improving the expressiveness of policies. The Transaction Datalog language provides a powerful syn- tax a...
Conference Paper
Full-text available
Because Remote Procedure Calls do not compose efficiently, d esign- ers of distributed object systems use Data Transfer and Remote Facade patterns to create large-granularity interfaces, hard-coded for part icular client use cases. As an alternative to RPC-based distributed objects, this pape r presents Remote Batch Invocation (RBI), language suppo...
Conference Paper
Full-text available
Although distributed object systems, including RMI and CORBA, enable object-oriented programs to be easily distributed across a network, achieving acceptable performance usually requires client-specific optimization of server interfaces, making such systems difficult to maintain and evolve. Automatic optimization techniques, including Batched Futur...
Conference Paper
Full-text available
Algorithm synthesis transforms a formal specification into an efficient algorithm to solve a prob- lem. Algorithm synthesis in Specware combines the formal speicifcation of a problem with a high- level algorithm strategy. To derive an efficient algorithm, a developer must define operators that refine the algorithm by combining the generic operators...
Conference Paper
Full-text available
Programs of a software product line can be synthesized by composing features which implement some unit of program functionality. In most product lines, only some combination of features are meaningful; feature models express the high-level domain constraints that govern feature compatibility. Product line developers also face the problem of safe co...
Conference Paper
Full-text available
Orc was originally presented as a process calculus. It has now evolved into a full programming language, which we describe in this paper. The language has the structure and feel of a functional program- ming language, yet it handles many non-functional aspects eectively, including spawning of concurrent threads, time-outs and mutable state. We rst...
Conference Paper
Full-text available
Programs of a software product line can be synthesized by composing features which implement a unit of program func- tionality. In most product lines, only some combination of features are meaningful; feature models express the high- level domain constraints that govern feature compatibility. Product line developers also face the problem of safe co...
Conference Paper
Full-text available
Both XML and Lisp have demonstrated the utility of generic syn- tax for expressing tree-structured data. But generic langu ages do not provide the syntactic richness of custom languages. Generic Expression Language (Gel) is a rich generic syntax that embodies many of the common syntactic conventions for operators, grouping and lists in widely-used...
Article
Full-text available
The fundamental ideas of distributed objects have changed little in the last 20 years. Existing languages are retrofitted with transparent distribution mechanisms based on proxies. Experiments with mobile code demonstrate its power but have little impact on practice. The problems with trans-parency and mobile code have been well known since at leas...
Article
Full-text available
Inheritance is a mechanism for incrementally modifying recursive definitions. While inheritance is typically used in object-oriented languages, inheritance also has something to offer to functional programming. In this paper we illustrate the use of inheritance in a pure functional language by de- veloping a small library for memoization. We define...
Article
Full-text available
So the solution's easy enough; each of us stays put in his or her corner and takes no notice of the others. You here, you here, and I there. Like soldiers at our posts. Also, we mustn't speak. Not one word. That won't be dicult; each of us has plenty of material for self-communings. { Huis Clos (No Exit) by Jean Paul Sartre ABSTRACT In this essay w...
Article
Full-text available
This paper discusses several problems in teaching programming languages. A language tends to indoctrinate its users and desensitize us to its problems and limitations. In addition, many language issues don't arise until programs reach a certain scale, which can be difficult to do in a one-semester course. No solution is proposed; instead the focus...
Chapter
Full-text available
Today, concurrency is ubiquitous, in desktop applications, client-server systems, workflow systems, transaction processing and web services. Design of concurrent systems, particularly in the presence of communication failures, time-outs and interrupts, is still difficult and error-prone. Theoretical models of concurrency focus on expressive power a...
Conference Paper
Full-text available
Transparent persistence promises to integrate programming languages and databases by allowing programs to access persistent data with the same ease as non-persistent data. In this work we demonstrate the feasibility of optimizing transparently persistent programs by extracting queries to efficiently prefetch required data. A static analysis derives...
Article
Orc is a kernel language for structured concurrent programming. Orc provides three powerful combinators that deflne the structure of a concurrent computation. These combinators support sequential and concurrent execution, and concurrent execution with blocking and termination. Orc is particularly well-suited for task orchestration, a form of concur...
Article
Full-text available
Orc is a new language for task orchestration, a form of concurrent pro- gramming with applications in workflow, business process management, and web service orchestration. Orc provides constructs to orchestrate the concurrent invocation of services - while managing time-outs, priori- ties, and failure of services or communication. In this paper, we...
Conference Paper
Full-text available
Programs of a software product line can be synthesized by compos- ing modules that implement features. Besides high-level domain constraints that govern the compatibility of features, there are also low-level implementation constraints: a feature module can refer- ence elements that are defined in other feature modules. Safe com- position is the gu...
Conference Paper
Full-text available
One challenge in developing wide-area distributed applications is analyzing the system's non-functional properties, including timing constraints and internal dependencies that can affect quality of service. Analysis of non-functional properties requires a precise formal semantics for the language in which the system is written; but labelled transit...
Article
Full-text available
We explore the following quintessential problem: given a set of basic computing elements how do we compose them to yield interesting computation patterns. Our goal is to study composition operators which apply across a broad spectrum of computing elements, from sequential programs to distributed transactions over computer networks. Our theory makes...
Conference Paper
Full-text available
Transparent persistence promises to integrate programming languages and databases by allowing procedural programs to access persistent data with the same ease as non-persistent data. When the data is stored in a relational database, however, transparent persistence does not naturally leverage the performance benefits of relational query optimizatio...
Article
Full-text available
Abstract— Web,services are promoted,as a new,model,for distributed systems, yet many skeptics see them as simply a poor implementation,of traditional remote,procedure,calls (RPC) or distributed objects. Previous comparisons,support,the skeptics: web services are shown to be significantly slower than RPC, and they lack features like automatic proxie...
Conference Paper
Full-text available
AppleScript is a scripting language and environment for the Mac OS. Originally conceived in 1989, AppleScript allows end users to automate complex tasks and customize Mac OS applications. To automate tasks, AppleScript provides standard programming language features (control flow, variables, data structures) and sends Apple Events to invoke applica...
Conference Paper
Full-text available
I was aware of a need for object-oriented programming long before I learned that it existed. I felt the need because I was using C and Lisp to build medium-sized systems, including a widely-used text editor, CASE and VLSI tools. Stated simply, I wanted flexible connections between providers and consumers of behavior in my systems. For example, in t...
Conference Paper
Full-text available
Object persistence architectures support transparent access to persistent objects. For e-ciency, many of these architectures support queries that can prefetch associated objects as part of the query result. While specifying prefetch manually in a query can signiflcantly improve performance, correct prefetch speciflcations are di-cult to determine a...
Conference Paper
Full-text available
Van der Aalst recently proposed a set of workflow patterns to characterize the kinds of control flow that appear frequently in workflow processes. These patterns are useful for evaluating the capabilities of workflow systems and models. In this paper we provide implementations of the workflow patterns in Orc, a new process calculus for orchestratin...
Conference Paper
Full-text available
Virtual classes are class-valued attributes of objects. Like virtual methods, virtual classes are defined in an object’s class and may be redefined within subclasses. They resemble inner classes, which are also defined within a class, but virtual classes are accessed through object instances, not as static components of a class. When used as types,...
Conference Paper
Full-text available
To make it practical to mechanize proofs in programming language metatheory, several capabilities are required of the theorem proving framework. One must be able to repre- sent and efficiently reason about complex recursively-defined expressions, define arbitrary induction schemes including mutual inductions over several objects and inductions over...
Conference Paper
Full-text available
Orc is a new language for task orchestration, a form of con- current programming with applications in work∞ow, business process management, and web service orchestration. Orc provides constructs to orchestrate the concurrent invocation of services { while managing time- outs, priorities, and failure of services or communication. In this paper, we s...
Conference Paper
Full-text available
While object-oriented programming and high-performance databases are now mainstream, programmers continue to struggle with persistent storage of objects. Juggling object persistence with requirements for simplicity, flexibility, maintainability, transparency, scalability and five-nines uptime can rattle even the most hardened architect.It has been...
Conference Paper
Full-text available
Web services are promoted as a new model for distributed systems, yet many skeptics see them as simply a poor implementation of traditional remote procedure calls (RPC) or distributed objects. Previous comparisons support the skeptics: web services are shown to be significantly slower than RPC, and they lack features like automatic proxies. However...
Article
Full-text available
Most persistence architectures for Java and .NET provide interfaces to execute queries written in an architecture-specific query language. These interfaces are string based : queries are defined in strings that are passed to the persistence engine for interpretation. String-based query interfaces have significant negative impact on programmer pro-d...
Conference Paper
Full-text available
A software product-lineis a family of related programs. Each program is defined by a unique combination of features, where a feature is an increment in program functionality. Modularizing features is difficult, as feature-specific code often cuts across class boundaries. New modularization technologies have been proposed in recent years, but their...
Conference Paper
Full-text available
Developers of data-intensive applications are increasingly using persistence frameworks such as EJB, Hibernate and JDO to access relational data. These frameworks support both transparent persistence for individual objects and explicit queries to efficiently search large collections of objects. While transparent persistence is statically typed, exp...
Article
Full-text available
The problem of integrating databases and programming lan- guages has been open for nearly 45 years. During this time much progress has been made, in exploring specialized database programming languages, orthogonal persistence, object-oriented databases, transaction models, data access libraries, embedded queries, and object-relational mapping. Whil...
Article
When building scalable systems that involve general-purpose computation and persistent data, object-oriented languages and relational databases are often essential components. Yet the impedance mismatch between these technologies has not been completely overcome by existing integration approaches. Call level interfaces like ODBC and JDBC are an uns...
Article
Full-text available
[9] Mary-Claire van Leunen and Richard Lipton. How to have your abstract rejected. http://www.acm.org/sigplan/conferences/author-info/vanLeunenLipton.html. [10] Mark N. Wegman. What it’s like to be a POPL referee: How to write an extended
Article
Full-text available
This paper presents a denotational model of inheritance. The model is based on an intuitive motivation of the purpose of inheritance. The correctness of the model is demonstrated by proving it equivalent to an operational semantics of inheritance based upon the method-lookup algorithm of object-oriented languages. Although it was originally develop...
Article
Full-text available
Abstract: "This thesis develops a semantic model of inheritance and investigates its applications for the analysis and design of programming languages. Inheritance is a mechanism for incremental programming in the presence of self-reference. This interpretation of inheritance is formalized using traditional techniques of fixed-point theory, resulti...
Article
Full-text available
This paper discusses policy-based authorization, an effective intermediate point between MAC and DAC that promises to combine the best features of both models. Policy-based authorization can be viewed as a reformulation of content-based authorization (3) with simplified content-based policies as the central focus. The primary contributions of this...
Article
Full-text available
Due to the shift from software-as-a-product to software-as-a-service, software components that were developed to run in a single address space must increasingly be accessed remotely across the network. Distribution middleware is frequently used to facilitate this transition. Yet a range of middleware platforms exist, and there are few existing guid...
Article
Full-text available
The hierarchy of interfaces implicit in the Smalltalk-80 collection class library is computed and analyzed. The interface hierarchy is independent of the inheritance hierarchy because methods are frequently deleted by subclasses, and because unrelated classes sometimes implement the same messages. Specifications of the interfaces are developed, rev...
Article
Full-text available
The diverse inheritance mechanisms provided by Smalltalk, Beta, and CLOS are interpreted as different uses of a single underlying construct. Smalltalk and Beta differ primarily in the direction of class hierarchy growth. These inheritance mechanisms are subsumed in a new inheritance model based on composition of mixins, or abstract subclasses. This...
Article
Full-text available
The Open Scripting Architecture combines aspectsofts 37539-4131 programming, distributed computation, database queries, anddynamic-39150 into a powerful and practical system for automation,integration,66 customization of applications and system services. Applications areintegrated830 with distributed messaging. The messages operate uponuser-level26...
Conference Paper
Full-text available
This tutorial collects and elaborates arguments for distinguishing between object-oriented pro- gramming and abstract data types. The basic distinction is that object-oriented programming achieves data abstraction by the use of procedural abstraction, while abstract data types depend upon type ab- straction. Object-oriented programming and abstract...
Conference Paper
Full-text available
In typed object-oriented languages the subtype relation is typically based on the inheritance hierarchy. This ap- proach, however, leads either to insecure type-systems or to restrictions on inheritance that make it less flexible than untyped Smalltalk inheritance. We present a new typed model of inheritance that allows more of the flex- ibility of...
Article
Full-text available
This paper develops a system of explicit interfaces for object-oriented programming. The system provides the benefits of module interfaces found in languages like Ada and Modula-2 while preserving the expressiveness that gives untyped object-oriented languages like Smalltalk their flexibility. Interfaces are interpreted as polymorphic types to make...
Article
Full-text available
Statically type-correct Ei#el programs may produce run-time errors because (1) attributes may be redeclared during inheritance, invalidating assignments in the superclass, (2) a formal method argument type may be restricted in violation of the contravariance of function types, and (3) two applications of a generic class are assumed to conform if th...
Conference Paper
Full-text available
Bounded quantiflcation was introduced by Cardelli and Wegner as a means of typing functions that operate uni- formly over all subtypes of a given type. They deflned a simple \object" model and used bounded quantiflca- tion to type-check functions that make sense on all ob- jects having a specifled set of \attributes." A more re- alistic presentatio...
Article
Full-text available
The dominant approach to model-driven development and domain-specific language engineering is to write a translator, or compiler, that defines a strategy for executing the high-level language. In this paper we introduce a new approach to strategic programming by writing interpreters of high-level modeling languages, rather than compilers. This tech...
Article
Full-text available
Exact pointer analysis is an intractable problem, so numerous pointer analysis algorithms have been developed that approximate the exact solution with varying levels of precision. These algo-rithms employ a variety of algorithmic strategies to describe how to approximate the exact solution. However, there is no formal de-scription of the precision...
Article
Full-text available
Model-driven software development is a promising new application area for partial evaluation. In this papers, we develop an approach to generic programming using models instead of types. The work is done in the context of Pummel, a first-order subset of Scheme with objects and monoid comprehensions. We define generic operations for validation, read...

Network

Cited By