UWSpace

UWSpace is the University of Waterloo’s institutional repository for the free, secure, and long-term home of research produced by faculty, students, and staff.

Depositing Theses/Dissertations or Research to UWSpace

Are you a Graduate Student depositing your thesis to UWSpace? See our Thesis Deposit Help and UWSpace Thesis FAQ pages to learn more.

Are you a Faculty or Staff member depositing research to UWSpace? See our Waterloo Research Deposit Help and Self-Archiving pages to learn more.

Photo by Waterloo staff

Recent Submissions

  • Item type: Item ,
    Beyond Sameness: Children use similarity to infer friendship
    (University of Waterloo, 2026-07-30) Ozlu, Aysegul
    One way people infer social affiliations is by attending to shared interests. Past studies revealed that children use identical preferences to infer friendship. However, sharing interests does not always come down to having identical preferences. We investigated whether children see similar preferences as suggestive of friendships. In four experiments, 4-7-year-old children (N = 442, 51% female, 49% male, 0.2% not stated) judged whether pairs of characters were friends. The characters had similar interests in some trials and dissimilar ones in others. In Experiment 1, 5-7-year-olds were more likely to think that the characters were friends if they had similar preferences rather than dissimilar ones, but 4-year-olds were not. Experiments 2 and 3 replicated this finding, while showing that children’s judgments did not depend on the number of similar kinds of things that the characters liked or the amount of evidence for their preferences. Experiment 4 showed that children’s use of similarity depended on similarity per se and did not reduce to inferences about identical preferences. Together, these findings reveal that from age 5, children see similar preferences as suggestive of friendships.
  • Item type: Item ,
    Towards Fast, Safe and Persistent Concurrent Data Structures for Non-experts
    (University of Waterloo, 2026-07-30) Coccimiglio, Gaetano
    The process of designing and implementing correct concurrent data structures is non-trivial and often error-prone. The recent commercial availability of non-volatile memory has prompted many researchers to also consider designing concurrent data structures that allow recovery following a power failure. These so-called persistent concurrent data structures further complicate the process of achieving correct and efficient implementations. Due to this difficulty, designing, implementing and effectively utilizing persistent concurrent data structures is often only feasible for expert programmers who already possess extensive specialized knowledge. The goal of this thesis is to empower non-experts with the ability to achieve fast, safe and persistent concurrent data structures without requiring the specialized knowledge needed to understand the details of such algorithms. I focus on two general techniques that non-experts can utilize to implement persistent concurrent data structures, transactional memory and universal constructions. Each approach provides a different trade-off between programmer effort and performance of the resulting data structures. Achieving correct and efficient synchronization is one of the most difficult challenges when designing and implementing concurrent algorithms. This process can be simplified through the use of a mechanism known as transactional memory (TM). TMs allow users to execute sequences of memory accesses as atomic transactions. Within a transaction, the implementation can be written in a sequential manner with the added requirement of replacing accesses to shared objects with TM accesses. This approach is useful for non-experts since synchronization is handled by the TM. A different mechanism known as a universal construction (UC) trivializes the implementation of concurrent algorithms. Given a sequential object as input, a UC produces a concurrent object. Sequential data structures are relatively straightforward making this approach suitable for non-experts. Both TMs and UCs can be augmented to also guarantee persistence through the use of non-volatile memory. I present a novel persistent TM, a novel volatile multiversion TM, and a novel persistent UC. All three algorithms are fully implemented and experimentally evaluated. These evaluations demonstrate that in many cases my algorithms represent the current state of the art. The end result of this thesis is a toolbox for non-experts to achieve fast, safe and persistent concurrent data structures
  • Item type: Item ,
    Can reduced scattering coefficients obtained using inversion procedures lead to unsound inferences about the optical factors contributing to the appearance of blood vessels embedded in the skin?
    (University of Waterloo, 2019-12) Van Leeuwen, Spencer R.; Baranoski, Gladimir V. G.
    Advances in tissue appearance modelling have allowed researchers to perform in silico (computational) evaluations of the relationship between the morphological characteristics of a given tissue and its appearance. Two recent works in this area considered multiple tissues in order to simulate the appearance of blood vessels underneath the skin. However, the authors of these works providing conflicting conclusions regarding the importance of Rayleigh scattering's contribution to the bluish appearance of veins. Additionally, the authors of the later publication provided information that may lead readers to misinterpret the methodology and conclusions of the earlier work. In this paper, we outline the differences between the investigation approaches employed in both works, notably elaborating on the use of reduced scattering coefficients in the later work. We then highlight key aspects of the earlier work in order to correct any potential misinterpretations and analyze the distinct conclusions presented by the authors of both works.
  • Item type: Item ,
    Handling bidirectional control flow: Technical report
    (University of Waterloo, 2020-10) Zhang, Yizhou; Salvaneschi, Guido; Myers, Andrew C.
    Pressed by the difficulty of writing asynchronous, event-driven code, mainstream languages have recently been building in support for a variety of advanced control-flow features. Meanwhile experimental language designs have suggested effect handlers as a unifying solution to programmer-defined control effects, subsuming exceptions, generators, and async-await. However, despite these trends, complex control flow - in particular, control flow that exhibits a bidirectional pattern - remains challenging to manage. We introduce bidirectional algebraic effects, a new programming abstraction that supports bidirectional control transfer in a more natural way. Handlers of bidirectional effects can raise further effects to transfer control back to the site where the initiating effect was raised, and can use themselves to handle their own effects. We present applications of this expressive power, which falls out naturally as we push toward the unification of effectful programming with object-oriented programming. We pin down the mechanism and the unification formally using a core language that makes generalization to effect operations and effect handlers. The usual propagation semantics of control effects such as exceptions conflicts with modular reasoning in the presence of effect polymorphism - it breaks parametricity. Bidirectionality exacerbates the problem. Hence, we set out to show the core language, which builds on the existing tunneling semantics for algebraic effects, is not only type-safe (no effects go unhandled), but also abstraction-safe (no effects are accidentally handled). We devise a step-indexed logical-relations model, and construct its parametricity and soundness proofs. These core results are fully mechanized in Coq. While a full-featured compiler is left to future work, experiments show that as a first-class language feature, bidirectional handlers can be implemented efficiently.
  • Item type: Item ,
    iDOT: A DOT calculus with object initialization
    (University of Waterloo, 2020-10) Kabir, Ifaz; Li, Yufeng; Lhotak, Ondrej
    The Dependent Object Types (DOT) calculus serves as a foundation of the Scala programming language, with a machine-verified soundness proof. However, Scala's type system has been shown to be unsound due to null references, which are used as default values of fields of objects before they have been initialized. This paper proposed iDOT, an extension of DOT for ensuring safe initialization of objects. DOT was previously extended to kDOT with the addition of mutable fields and constructors. To kDOT, iDOT adds an initialization effect system that statically prevents the possibility of reading a null reference from an uninitialized object. To design iDOT, we have reformulated the Freedom Before Commitment object initialization scheme in terms of disjoint subheaps to make it easier to formalize in an effect system and prove sound. Soundness of iDOT depends on the interplay of three systems of rules: a type system close to that of DOT, an effect system to ensure definite assignment of fields in each constructor, and an initialization system that tracks the initialization status of objects in a stack of subheaps. We have proven the overall system sound and verified the soundness proof using the Coq proof assistant.