Network


Latest external collaboration on country level. Dive into details by clicking on the dots.

Hotspot


Dive into the research topics where Doug Kimelman is active.

Publication


Featured researches published by Doug Kimelman.


programming language design and implementation | 2005

Jungloid mining: helping to navigate the API jungle

David Mandelin; Lin Xu; Rastislav Bodik; Doug Kimelman

Reuse of existing code from class libraries and frameworks is often difficult because APIs are complex and the client code required to use the APIs can be hard to write. We observed that a common scenario is that the programmer knows what type of object he needs, but does not know how to write the code to get the object.In order to help programmers write API client code more easily, we developed techniques for synthesizing jungloid code fragments automatically given a simple query that describes that desired code in terms of input and output types. A jungloid is simply a unary expression; jungloids are simple, enabling synthesis, but are also versatile, covering many coding problems, and composable, combining to form more complex code fragments. We synthesize jungloids using both API method signatures and jungloids mined from a corpus of sample client programs.We implemented a tool, prospector, based on these techniques. prospector is integrated with the Eclipse IDE code assistance feature, and it infers queries from context so there is no need for the programmer to write queries. We tested prospector on a set of real programming problems involving APIs; prospector found the desired solution for 18 of 20 problems. We also evaluated prospector in a user study, finding that programmers solved programming problems more quickly and with more reuse when using prospector than without prospector.


european conference on object oriented programming | 1994

Modeling Object-Oriented Program Execution

Wim De Pauw; Doug Kimelman; John Vlissides

This paper describes a way of organizing information about an object-oriented programs execution. The context is our system for visualizing that execution. The critical constraints are completeness, compactness, and efficient retrieval. We describe our design and how it meets these constraints.


symposium on principles of programming languages | 2010

Programming with angelic nondeterminism

Rastislav Bodik; Satish Chandra; Joel Galenson; Doug Kimelman; Nicholas Tung; Shaon Barman; Casey Rodarmor

Angelic nondeterminism can play an important role in program development. It simplifies specifications, for example in deriving programs with a refinement calculus; it is the formal basis of regular expressions; and Floyd relied on it to concisely express backtracking algorithms such as N-queens. We show that angelic nondeterminism is also useful during the development of deterministic programs. The semantics of our angelic operator are the same as Floyds but we use it as a substitute for yet-to-be-written deterministic code; the final program is fully deterministic. The angelic operator divines a value that makes the program meet its specification, if possible. Because the operator is executable, it allows the programmer to test incomplete programs: if a program has no safe execution, it is already incorrect; if a program does have a safe execution, the execution may reveal an implementation strategy to the programmer. We introduce refinement-based angelic programming, describe our embedding of angelic operators into Scala, report on our implementation with bounded model checking, and describe our experience with two case studies. In one of the studies, we use angelic operators to modularize the Deutsch-Schorr-Waite (DSW) algorithm. The modularization is performed with the notion of a parasitic stack, whose incomplete specification was instantiated for DSW with angelic nondeterminism.


international conference on software engineering | 2006

A Bayesian approach to diagram matching with application to architectural models

David Mandelin; Doug Kimelman; Daniel M. Yellin

IT system architectures, as well as other systems, are often described by formal models or informal diagrams. In practice, there are often a number of versions of a model, e.g. for different views of a system, divergent variants, or a series of revisions. Understanding how versions of a model correspond or differ is crucial, yet little work has been done on automated assistance for matching models and diagrams.We have designed a framework based on Bayesian methods for finding these correspondences automatically. We represent models and diagrams as graphs whose nodes have attributes such as name, type, connections, and containment relations, and we have developed probabilistic models for rating the quality of candidate correspondences based on various features of the nodes in the graphs. Given the probabilistic models, we can find high quality correspondences using search algorithms. Preliminary experiments focusing on architectural models suggest that the technique is promising.


graph drawing | 1994

Reduction of Visual Complexity in Dynamic Graphs

Doug Kimelman; Bruce Leban; Tova Roth; Dror Zernik

Graphs are used extensively in software visualization to represent both static aspects of software structure and dynamic aspects of execution-time behavior. However, for realistic subject software systems, there are far too many nodes and edges in the displayed graphs to be comprehensible to an end user. Further, for presentation of dynamics, continual change and redisplay of such large graphs is too demanding for conventional workstation computational resources. This paper poses the problem of “reduction” or “abstraction” in dynamically changing graphs, and proposes a combination of techniques that can be used to reduce the visual complexity of a graph, without obscuring the significant information that it was meant to convey. The abstract graph can be comprehended more readily and it changes far less frequently than the full graph. As well, when the abstract graph does change, it requires far less computation for layout and redisplay. These abstraction techniques are illustrated by way of examples showing their use in systems for visualization of object-oriented and multi-layer software systems.


workshop on parallel & distributed debugging | 1993

On-the-fly topological sort—a basis for interactive debugging and live visualization of parallel programs

Doug Kimelman; Dror Zernik

This paper presents an optimal technique for on-they ordering and matching of event data records that are being produced by a number of distinct processors. This is essential for eeective interactive debugging and live visualization of parallel programs. The technique involves on-they construction of the causality graph of the execution of the program. A sliding window over the graph is maintained by discarding portions of the graph as soon as they are no longer required for ensuring correct order of subsequent program events. The sort places an event record into the causality graph when it is received, places it into the output stream as soon as possible|as soon as all of its predecessors in the causal order have been placed into the output, and discards the event record as soon as possible|as soon as all of its successors in the causal order notice that it has been output. This technique is optimal in terms of the amount of space required for the sort, and in terms of the amount of additional delay incurred prior to delivery of an event record to its ultimate destination. We describe the algorithm in detail, show its optimality, and present results from experiments on a Meiko system running with PICL and ParaGraph.


IEEE Transactions on Software Engineering | 2010

Bayesian Approaches to Matching Architectural Diagrams

Doug Kimelman; Marsha Kimelman; David Mandelin; Daniel M. Yellin

IT system architectures and many other kinds of structured artifacts are often described by formal models or informal diagrams. In practice, there are often a number of versions of a model or diagram, such as a series of revisions, divergent variants, or multiple views of a system. Understanding how versions correspond or differ is crucial, and thus, automated assistance for matching models and diagrams is essential. We have designed a framework for finding these correspondences automatically based on Bayesian methods. We represent models and diagrams as graphs whose nodes have attributes such as name, type, connections to other nodes, and containment relations, and we have developed probabilistic models for rating the quality of candidate correspondences based on various features of the nodes in the graphs. Given the probabilistic models, we can find high-quality correspondences using search algorithms. Preliminary experiments focusing on architectural models suggest that the technique is promising.


measurement and modeling of computer systems | 2001

Graph cutting algorithms for distributed applications partitioning

Karin Högstedt; Doug Kimelman; V. T. Rajan; Tova Roth; Mark N. Wegman

The problem of optimally allocating the components of a distributed program over several machines can be shown to reduce to a multi-terminal graph cutting problem. In case of three of more terminals, this problem has been shown to be NP-hard. This paper introduces a number of heuristic graph algorithms for use in partitioning distributed object applications --- that is, for deciding which objects should be placed on which machines in order to minimize communication and achieve best overall performance of the application. These heuristics are particularly effective for graphs with characteristics specific to representative distributed object applications.


european conference on object-oriented programming | 1998

Partitioning and Assignment of Distributed Object Applications Incorporating Object Replication and Caching

Doug Kimelman; V. T. Rajan; Tova Roth; Mark N. Wegman

Partitioning of distributed object applications, and task assignment for classical distributed systems, addresses a fundamental problem in client-server and n-tier systems: determining the machine (from high-end servers to tier-0 devices) on which each object should be placed and executed for best overall performance of the application. Traditionally, techniques for automated partitioning have employed a graph-based model of the application being partitioned. In order to remain realistic and effective, these techniques must be extended to incorporate notions of object replication, caching, and synchronization protocols for maintaining consistency.


sigplan symposium on new ideas new paradigms and reflections on programming and software | 2014

Korz: Simple, Symmetric, Subjective, Context-Oriented Programming

David M. Ungar; Harold Ossher; Doug Kimelman

Korz is a new computational model that provides for context-oriented programming by combining implicit arguments and multiple dispatch in a slot-based model. This synthesis enables the writing of software that supports contextual variation along multiple dimensions, and graceful evolution of that software to support new, unexpected dimensions of variability, without the need for additional mechanism such as layers or aspects. With Korz, a system consists of a sea of method and data slots in a multidimensional space. There is no fixed organization of slots into objects - a slot pertains to a number of objects instead of being contained by a single object - and slots can come together according to the implicit context in any given situation, yielding subjective objects. There is no dominant decomposition, and no dimension holds sway over any other. IDE support is essential for managing complexity when working with the slot space and with subjectivity, allowing the task at hand to dictate what subspaces to isolate and what dominance of dimensions to use when presenting nested views to the user. We have implemented a prototype interpreter and IDE, and used it on several examples. This early experience has revealed much that needs to be done, but has also shown considerable promise. It seems that Korzs particular combination of concepts, each well-known from the past, is indeed more powerful than the sum of its parts.

Collaboration


Dive into the Doug Kimelman's collaboration.

Researchain Logo
Decentralizing Knowledge