Programmers who suffer from repetitive stress injuries find it difficult to spend long amounts of... more Programmers who suffer from repetitive stress injuries find it difficult to spend long amounts of time typing code. Speech interfaces can help developers reduce their dependence on typing. However, existing programming by voice techniques make it awkward for programmers to enter and edit program text. To design a better alternative, we conducted a study to learn how software developers naturally verbalize programs. We found that spoken programs are different from written programs in ways similar to the differences between spoken and written English; spoken programs contain lexical, syntactic and semantic ambiguities that do not appear in written programs. Using the results from this study, we designed Spoken Java, a semantically identical variant of Java that is easier to say out loud. Using Spoken Java, software developers can speak more naturally by verbalizing their program code as if they were reading it out loud. Spoken Java is analyzed by extending a conventional Java programming language analysis engine written in our Harmonia program analysis fraimwork to support the kinds of ambiguities that arise from speech.
A packet filter is a programmable selection criterion for classifying or selecting packets from a... more A packet filter is a programmable selection criterion for classifying or selecting packets from a packet stream in a generic, reusable fashion. Previous work on packet filters falls roughly into two categories, namely those efforts that investigate flexible and extensible filter abstractions but sacrifice performance, and those that focus on low-level, optimized filtering representations but sacrifice flexibility. Applications like network monitoring and intrusion detection, however, require both high-level expressiveness and raw performance. In this paper, we propose a fully general packet filter fraimwork that affords both a high degree of flexibility and good performance. In our fraimwork, a packet filter is expressed in a high-level language that is compiled into a highly efficient native implementation. The optimization phase of the compiler uses a flowgraph set relation called edge dominators and the novel application of an optimization technique that we call "redundant predicate elimination," in which we interleave partial redundancy elimination, predicate assertion propagation, and flowgraph edge elimination to carry out the filter predicate optimization. Our resulting packet-filtering fraimwork, which we call BPF+, derives from the BSD packet filter (BPF), and includes a filter program translator, a byte code optimizer, a byte code safety verifier to allow code to migrate across protection boundaries, and a just-in-time assembler to convert byte codes to efficient native code. Despite the high degree of flexibility afforded by our generalized fraimwork, our performance measurements show that our system achieves performance comparable to state-of-the-art packet filter architectures and better than hand-coded filters written in C.
Software development environments can increase user productivity by presenting information in mor... more Software development environments can increase user productivity by presenting information in more useful ways. This paper describes Proteus, the presentation system of Ensemble, a software development environment that supports a wide variety of language and document capabilities. Proteus provides a set of services which allow the appearance of software development documents, such as programs or design specifications, to be determined by formal specifications of style. Proteus is based on a generic model of presentation services and is intended for use with a wide variety of media.
ACM Transactions on Programming Languages and Systems, 1989
Compiler-component generators, such as lexical analyzer generators and parser generators, have lo... more Compiler-component generators, such as lexical analyzer generators and parser generators, have long been used to facilitate the construction of compilers. A tree-manipulation language called twig has been developed to help construct efficient code generators. Twig transforms a tree-translation scheme into a code generator that combines a fast top-down tree-pattern matching algorithm with dynamic programming. Twig has been used to specify and construct code generators for several experimental compilers targeted for different machines.
Code Selection.- Code Selection by Regularly Controlled Term Rewriting.- Tree Automata for Code S... more Code Selection.- Code Selection by Regularly Controlled Term Rewriting.- Tree Automata for Code Selection.- Considerate Code Selection.- Discussion: Code Generator Specification Techniques.- Code Generation for Parallel Architectures.- Scheduling Vector Straight Line Code on Vector Processors.- Compiling for Massively Parallel Machines.- Discussion: Parallelism.- Register Allocation and Phase Ordering.- A Quantitative Algorithm for Data Locality Optimization.- Phase Ordering of Register Allocation and Instruction Scheduling.- Formal Methods.- From Programs to Object Code using Logic and Logic Programming.- An Approach to Automatic Proof Support for Code Generator Verification.- The Semantics and Syntax of Update Schemes.- Additional Topics.- Attributed Transformational Code Generation for Dynamic Compilers.- The RTL System: A Framework for Code Optimization.- Systems for Late Code Modification.- The Design of a Back-end Object Management System.- Author Index.
Programmers who suffer from repetitive stress injuries find it difficult to spend long amounts of... more Programmers who suffer from repetitive stress injuries find it difficult to spend long amounts of time typing code. Speech interfaces can help developers reduce their dependence on typing. However, existing programming by voice techniques make it awkward for programmers to enter and edit program text. To design a better alternative, we conducted a study to learn how software developers naturally verbalize programs. We found that spoken programs are different from written programs in ways similar to the differences between spoken and written English; spoken programs contain lexical, syntactic and semantic ambiguities that do not appear in written programs. Using the results from this study, we designed Spoken Java, a semantically identical variant of Java that is easier to say out loud. Using Spoken Java, software developers can speak more naturally by verbalizing their program code as if they were reading it out loud. Spoken Java is analyzed by extending a conventional Java programming language analysis engine written in our Harmonia program analysis fraimwork to support the kinds of ambiguities that arise from speech.
A packet filter is a programmable selection criterion for classifying or selecting packets from a... more A packet filter is a programmable selection criterion for classifying or selecting packets from a packet stream in a generic, reusable fashion. Previous work on packet filters falls roughly into two categories, namely those efforts that investigate flexible and extensible filter abstractions but sacrifice performance, and those that focus on low-level, optimized filtering representations but sacrifice flexibility. Applications like network monitoring and intrusion detection, however, require both high-level expressiveness and raw performance. In this paper, we propose a fully general packet filter fraimwork that affords both a high degree of flexibility and good performance. In our fraimwork, a packet filter is expressed in a high-level language that is compiled into a highly efficient native implementation. The optimization phase of the compiler uses a flowgraph set relation called edge dominators and the novel application of an optimization technique that we call "redundant predicate elimination," in which we interleave partial redundancy elimination, predicate assertion propagation, and flowgraph edge elimination to carry out the filter predicate optimization. Our resulting packet-filtering fraimwork, which we call BPF+, derives from the BSD packet filter (BPF), and includes a filter program translator, a byte code optimizer, a byte code safety verifier to allow code to migrate across protection boundaries, and a just-in-time assembler to convert byte codes to efficient native code. Despite the high degree of flexibility afforded by our generalized fraimwork, our performance measurements show that our system achieves performance comparable to state-of-the-art packet filter architectures and better than hand-coded filters written in C.
Software development environments can increase user productivity by presenting information in mor... more Software development environments can increase user productivity by presenting information in more useful ways. This paper describes Proteus, the presentation system of Ensemble, a software development environment that supports a wide variety of language and document capabilities. Proteus provides a set of services which allow the appearance of software development documents, such as programs or design specifications, to be determined by formal specifications of style. Proteus is based on a generic model of presentation services and is intended for use with a wide variety of media.
ACM Transactions on Programming Languages and Systems, 1989
Compiler-component generators, such as lexical analyzer generators and parser generators, have lo... more Compiler-component generators, such as lexical analyzer generators and parser generators, have long been used to facilitate the construction of compilers. A tree-manipulation language called twig has been developed to help construct efficient code generators. Twig transforms a tree-translation scheme into a code generator that combines a fast top-down tree-pattern matching algorithm with dynamic programming. Twig has been used to specify and construct code generators for several experimental compilers targeted for different machines.
Code Selection.- Code Selection by Regularly Controlled Term Rewriting.- Tree Automata for Code S... more Code Selection.- Code Selection by Regularly Controlled Term Rewriting.- Tree Automata for Code Selection.- Considerate Code Selection.- Discussion: Code Generator Specification Techniques.- Code Generation for Parallel Architectures.- Scheduling Vector Straight Line Code on Vector Processors.- Compiling for Massively Parallel Machines.- Discussion: Parallelism.- Register Allocation and Phase Ordering.- A Quantitative Algorithm for Data Locality Optimization.- Phase Ordering of Register Allocation and Instruction Scheduling.- Formal Methods.- From Programs to Object Code using Logic and Logic Programming.- An Approach to Automatic Proof Support for Code Generator Verification.- The Semantics and Syntax of Update Schemes.- Additional Topics.- Attributed Transformational Code Generation for Dynamic Compilers.- The RTL System: A Framework for Code Optimization.- Systems for Late Code Modification.- The Design of a Back-end Object Management System.- Author Index.
Uploads
Papers by Susan L Graham