James Noble
YOU?
Author Swipe
View article: Reasoning about External Calls
Reasoning about External Calls Open
In today’s complex software, internal trusted code is tightly intertwined with external untrusted code. To reason about internal code, programmers must reason about the potential effects of calls to external code, even though that code is …
View article: Towards AI-Assisted Synthesis of Verified Dafny Methods
Towards AI-Assisted Synthesis of Verified Dafny Methods Open
Large language models show great promise in many domains, including programming. A promise is easy to make but hard to keep, and language models often fail to keep their promises, generating erroneous code. A promising avenue to keep model…
View article: All Languages Are Dynamic (Invited Talk)
All Languages Are Dynamic (Invited Talk) Open
Virtual Machines, Dynamic Compllers, and Implementation Frameworks make dynamic langauges easier and more efficient to optimize. Meanwhile, IDEs, provers, dependent types, type inferencers, and (so-called) "generative AI" mean programmers …
View article: programmingLanguage as Language;
programmingLanguage as Language; Open
Programming languages are languages --- "unnatural" languages because they are constructed explicitly; "formal" languages because they rely on mathematical notations and are described mathematically; "machine" languages because they are us…
View article: Reference Capabilities for Flexible Memory Management
Reference Capabilities for Flexible Memory Management Open
Verona is a concurrent object-oriented programming language that organises all the objects in a program into a forest of isolated regions. Memory is managed locally for each region, so programmers can control a program's memory use by adju…
View article: Guidance document describing how rapid near patient (point of care) IVD manufacturers can meet the new IVD EU Regulation 2017/746
Guidance document describing how rapid near patient (point of care) IVD manufacturers can meet the new IVD EU Regulation 2017/746 Open
Guidance document on how commercial stakeholders can meet the meet the IVD EU Regulation 2017/746, the replacement for EU Directive 98/79/EC, Regulation (EU) 2017/746, when considering automated, rapid near patient (point of care) testing …
View article: <i>Necessity</i> specifications for robustness
<i>Necessity</i> specifications for robustness Open
Robust modules guarantee to do only what they are supposed to do – even in the presence of untrusted malicious clients, and considering not just the direct behaviour of individual methods, but also the emergent behaviour from calls to more…
View article: Necessity Specifications for Robustness
Necessity Specifications for Robustness Open
Robust modules guarantee to do only what they are supposed to do - even in the presence of untrusted, malicious clients, and considering not just the direct behaviour of individual methods, but also the emergent behaviour from calls to mor…
View article: Necessity Specifications for Robustness and Appendices
Necessity Specifications for Robustness and Appendices Open
This is the full paper of Necessity Specifications for Robustness, to be published at OOPSLA 2022. It includes the full appendices.
View article: Necessity Specifications for Robustness
Necessity Specifications for Robustness Open
Robust modules guarantee to do only what they are supposed to do – even in the presence of untrusted, malicious clients, and considering not just the direct behaviour of individual methods, but also the emergent behaviour from calls to mor…
View article: Necessity Specifications for Robustness
Necessity Specifications for Robustness Open
Robust modules guarantee to do only what they are supposed to do – even in the presence of untrusted, malicious clients, and considering not just the direct behaviour of individual methods, but also the emergent behaviour from calls to mor…
View article: Rusty Links in Local Chains
Rusty Links in Local Chains Open
Rust successfully applies ownership types to control memory allocation. This restricts the programs' topologies to the point where doubly-linked lists cannot be programmed in Safe Rust. We sketch how more flexible "local" ownership could b…
View article: More Programming Than Programming: Teaching Formal Methods in a Software Engineering Programme
More Programming Than Programming: Teaching Formal Methods in a Software Engineering Programme Open
Formal methods for software correctness are critical to the future of software engineering - and so must be an essential part of software engineering education. Unfortunately, formal methods are often resisted by students due to perceived …
View article: Dala: a simple capability-based dynamic language design for data race-freedom
Dala: a simple capability-based dynamic language design for data race-freedom Open
Dynamic languages like Erlang, Clojure, JavaScript, and E adopted data-race freedom by design. To enforce data-race freedom, these languages either deep copy objects during actor (thread) communication or proxy back to their owning thread.…
View article: Design patterns for Angular Hotdraw
Design patterns for Angular Hotdraw Open
© 2019 Association for Computing Machinery. The number of web frameworks available for use is growing. Web developers need to learn how to use them effectively and efficiently. Working through the design patterns presented in this paper fo…
View article: Design patterns for Angular Hotdraw
Design patterns for Angular Hotdraw Open
© 2019 Association for Computing Machinery. The number of web frameworks available for use is growing. Web developers need to learn how to use them effectively and efficiently. Working through the design patterns presented in this paper fo…
View article: Holistic Specifications for Robust Programs
Holistic Specifications for Robust Programs Open
Functional specifications describe what program components do: the sufficient conditions to invoke a component's operations. They allow us to reason about the use of components in the closed world setting, where the component interacts wit…
View article: Challenging software developers: dialectic as a foundation for security assurance techniques
Challenging software developers: dialectic as a foundation for security assurance techniques Open
Development teams are increasingly expected to deliver secure code, but how can they best achieve this? Traditional security practice, which emphasizes ‘telling developers what to do’ using checklists, processes and errors to avoid, has pr…
View article: Which of my transient type checks are not (almost) free?
Which of my transient type checks are not (almost) free? Open
One form of type checking used in gradually typed language is transient type checking: whenever an object ‘flows’ through code with a type annotation, the object is dynamically checked to ensure it has the methods required by the annotatio…
View article: CallƐ: an effect system for method calls
CallƐ: an effect system for method calls Open
Effect systems are used to statically reason about the effects an expression\nmay have when evaluated. In the literature, such effects include various\nbehaviours as diverse as memory accesses and exception throwing. Here we\npresent CallE…
View article: Towards Gradual Checking of Reference Capabilities
Towards Gradual Checking of Reference Capabilities Open
Concurrent and parallel programming is difficult due to the presence of memory side-effects, which may introduce data races. Type qualifiers, such as reference capabilities, can remove data races by restricting sharing of mutable data. Unf…
View article: Transient Typechecks are (Almost) Free [Artifact]
Transient Typechecks are (Almost) Free [Artifact] Open
Transient gradual typing imposes run-time type tests that typically cause a linear slowdown in programs' performance. This performance impact discourages the use of type annotations because adding types to a program makes the program slowe…
View article: Agile Self-selecting Teams Foster Expertise Coordination
Agile Self-selecting Teams Foster Expertise Coordination Open
Aim/Purpose: This paper aims to discuss the activities involved in facilitating self-selecting teams for Agile software development projects. This paper also discussed how these activities can influence the successful expertise coordinatio…
View article: The Dynamic Practice and Static Theory of Gradual Typing
The Dynamic Practice and Static Theory of Gradual Typing Open
We can tease apart the research on gradual types into two `lineages': a pragmatic, implementation-oriented dynamic-first lineage and a formal, type-theoretic, static-first lineage. The dynamic-first lineage’s focus is on taming particular …
View article: Agile Practices in Practice: Towards a Theory of Agile Adoption and Process Evolution
Agile Practices in Practice: Towards a Theory of Agile Adoption and Process Evolution Open
As teams and organisations make the difficult shift to agile ways of working, there has been relatively little investigation of how they adopt and use agile practices. To aid those teams looking to move to agile we should examine how other…
View article: Reforming Performance Appraisal for Agile Software Development Projects
Reforming Performance Appraisal for Agile Software Development Projects Open
Changes in software development methods should lead to changes in an organization’s performance appraisal system. Several organizations, however, have adopted Agile software development methods without reforming their performance apprais…
View article: Transient Typechecks are (Almost) Free
Transient Typechecks are (Almost) Free Open
Transient gradual typing imposes run-time type tests that typically cause a linear slowdown in programs' performance. This performance impact discourages the use of type annotations because adding types to a program makes the program slowe…