
Kathryn E. GrayUniversity of Cambridge | Cam · Computer Laboratory
Kathryn E. Gray
PhD Computer Science
About
24
Publications
2,535
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
660
Citations
Citations since 2017
Introduction
Additional affiliations
July 2012 - December 2015
July 2011 - December 2011
Microsoft Research, Cambridge
Position
- Research Developer
Education
September 2000 - August 2006
September 1996 - May 2000
Publications
Publications (24)
Architecture specifications notionally define the fundamental interface between hardware and software: the envelope of allowed behaviour for processor implementations, and the basic assumptions for software development and verification. But in practice, they are typically prose and pseudocode documents, not rigorous or executable artifacts, leaving...
Previous work on the semantics of relaxed shared-memory concurrency has only considered the case in which each load reads the data of exactly one store. In practice, however, multiprocessors support mixed-size accesses, and these are used by systems software and (to some degree) exposed at the C/C++ language level. A semantic foundation for softwar...
Previous work on the semantics of relaxed shared-memory concurrency has only considered the case in which each load reads the data of exactly one store. In practice, however, multiprocessors support mixed-size accesses, and these are used by systems software and (to some degree) exposed at the C/C++ language level. A semantic foundation for softwar...
In this paper we develop semantics for key aspects of the ARMv8 multiprocessor architecture: the concurrency model and much of the 64-bit application-level instruction set (ISA). Our goal is to clarify what the range of architecturally allowable behaviour is, and thereby to support future work on formal verification, analysis, and testing of concur...
In this paper we develop semantics for key aspects of the ARMv8 multiprocessor architecture: the concurrency model and much of the 64-bit application-level instruction set (ISA). Our goal is to clarify what the range of architecturally allowable behaviour is, and thereby to support future work on formal verification, analysis, and testing of concur...
Weakly consistent multiprocessors such as ARM and IBM POWER have been with us for decades, but their subtle programmer-visible concurrency behaviour remains challenging, both to implement and to use; the traditional architecture documentation, with its mix of prose and pseudocode, leaves much unclear.
In this paper we show how a precise architectur...
Recent years have seen remarkable successes in rigorous engineering: using mathematically rigorous semantic models (not just idealised calculi) of real-world processors, programming languages, protocols, and security mechanisms, for testing, proof, analysis, and design. Building these models is challenging, requiring experimentation, dialogue with...
Recent years have seen remarkable successes in rigorous engineering: using mathematically rigorous semantic models (not just idealised calculi) of real-world processors, programming languages, protocols, and security mechanisms, for testing, proof, analysis, and design. Building these models is challenging, requiring experimentation, dialogue with...
Scripting languages are used to quickly and easily develop or ex-tend programs. Frequently, these scripted programs are combined with libraries and other programs from conventional languages to build more complex applications. Bridging the gap between dif-ferent languages requires manual data conversions and dynamic checks which can introduce subtl...
Software is often tested with unit tests, in which each procedure is executed in isolation, and its result compared with an
expected value. Individual tests correspond to Hoare triples used in program logics, with the pre-conditions encoded into
the procedure initializations and the post-conditions encoded as assertions. Unit tests for procedures t...
Inheritance is a standard means for reuse and for interfacing with external libraries. In a multi-language software product,
extending a class written in a statically-typed language with a dynamically-typed class can require a significant number of
manual indirections and other error-prone complications. Building on our previous interoperability wo...
We report on the experience of teaching an introductory second semester computer science course on Fundamentals of Computer Science that uses our curriculum How to Design Class Hierarchies and the ProfessorJ programming languages implemented within the DrScheme programming environment.This comprehensive curriculum for an introductory course focuses...
We report on the experience of teaching an introductory second semester computer science course on Fundamentals of Computer Science that uses our curriculum How to Design Class Hierarchies and the ProfessorJ programming languages implemented within the DrScheme programming environment.This comprehensive curriculum for an introductory course focuses...
As a value flows across the boundary between interoperating languages, it must be checked and converted to fit the types and representations of the target language. For simple forms of data, the checks and coercions can be immediate; for higher order data, such as functions and objects, some must be delayed until the value is used in a particular w...
Our experimental compiler translates Java to PLT Scheme; it en- ables the use of Java libraries within Scheme programs, and it makes our Scheme programming tools available when program- ming with Java. With our system, a programmer can extend and use classes from either language, and Java programmers can em- ploy other Scheme data by placing it in...
In the second-semester programming course at the University of Utah, we have observed that our students suffer unnecessarily from a mismatch between the course content and the programming environment. The course is typical, in that it exposes students to Java a little at a time. The programming environments are also typical, in that they report com...
In the second-semester programming course at the University of Utah, we have observed that our students suffer unnecessarily from a mismatch between the course content and the programming environment. The course is typical, in that it exposes students to Java a little at a time. The programming environments are also typical, in that they report com...
. The growing application of theorem proving techniques has increased the need for customized theorem provers. Powerful provers contain numerous interacting subsystems, each of which requires substantial time and expertise to build; constructing new provers from scratch is virtually prohibitive. Plug-and-play prover frameworks promise an alternativ...
xml is a language for describing markup languages for struc- tured data. A growing number of applications that process xml docu- ments are transformers, i.e., programs that convert documents between xml languages. Unfortunately, the current proposals for transformers are complex general-purpose languages, which will be unappealing as the xml user b...
Our experimental compiler translates Java to PLT Scheme; it en- ables the use of Java libraries within Scheme programs, and it makes our Scheme programming tools available when program- ming with Java. With our system, a programmer can extend and use classes from either language, and Java programmers can em- ploy other Scheme data by placing it in...
Existing systems for writing unit tests exploit built-in lan- guage constructs, such as reflection, to simulate the addi- tion of testing constructs. While these simulations provide the minimally necessary functionality, they fail to support testing properly in many instances. In response, we have designed, implemented, and evaluated extensions for...
Thesis (Ph. D.)--School of Computing, University of Utah, 2006. Includes bibliographical references (leaves [140]-144).