Community Join the discussion Curious about PL design, compilers, systems programming, or want to contribute? Join our community, and share your ideas, questions and feedback with us!
MVS & Theory
Compiler
Compilation using LLVM
Novel techniques for compiling generics with coherence
Caching and serialization of the compiler’s program state
C interop research
Standard Library
Developer Experience
Compiler DevOps
Who Owns the Contents of a Doubly-Linked List? PDF Dimi Racordon 2025-09 High-Fidelity C Interoperability in Hylo PDF Ambrus Tóth 2025-06 Debugging Hylo PDF Tudor-Stefan Magirescu 2025-06 On the State of Coherence in the Land of Type Classes PDF Dimi Racordon, Eugene Flessele, Cao Nguyen Pham 2025-02 Method Bundles Dimi Racordon, Dave Abrahams 2024-10 Type Checking with Rewriting Rules Dimi Racordon 2024-10 Use Site Checking Considered Harmful Dimi Racordon, Benjamin Chung 2024-10 Borrow checking Hylo PDF Dimi Racordon, Dave Abrahams 2023-10 The Val Object Model PDF Dave Abrahams, Sean Parent, Dimi Racordon, David Sankel 2022-10 Existentialize Your Generics PDF Dimi Racordon, Matt Bovel, Hamza Remmal 2022-06 Implementation Strategies for Mutable Value Semantics PDF Dimi Racordon, Denys Shabalin, Daniel Zheng, Dave Abrahams, Brennan Saeta 2022 Toward a Lingua Franca for Memory Safety PDF Dimi Racordon, Aurélien Coet, Didier Buchs 2022 Native Implementation of Mutable Value Semantics PDF Dimi Racordon, Denys Shabalin, Daniel Zheng, Dave Abrahams, Brennan Saeta 2021-06 A Formal Definition of Swift's Value Semantics PDF Dimi Racordon 2020-11
Are you interested in research collaboration — as a student, professor, or independent contributor?
Learn about our open research topics , or suggest a new topic!
Even though the compiler and standard library are still in their early stages, we can already show some advanced examples
of Hylo code that you can try out on Compiler Explorer .
https://godbolt.org/z/Mzz17c5z1
/// The orientation of a 2D vector.
public type Angle: Deinitializable {
/// The value of `self` in radians.
public var radians: Float64
/// Creates an instance with its value in radians.
/// Creates an instance with its value in degrees.
public init(degrees: Float64) {
& self .radians = degrees * Float64.pi() / 180 . 0
/// The value of `self` in degrees.
public property degrees: Float64 {
let { radians * 180 . 0 / Float64.pi() }
var d = radians * 180 . 0 / Float64.pi()
& self .radians = d * Float64.pi() / 180 . 0
var a = Angle(radians: .pi())
precondition(a.radians == 0 . 0 )
https://godbolt.org/z/cY7T5jPEc
/// A computer that must be explicitly shut down using a sink method.
public fun shutdown () sink -> Void {
print( "Key received, shutting down... Memory contents was: " )
var computer = Computer(ram: "Important data" )
} Cannot deinit `computer`
var computer = Computer(ram: "Important data" )
} Cannot deinit `computer` [when `if` not entered]
var computer = Computer(ram: "Important data" )
computer. shutdown() Use of consumed object [after first iteration]
} Cannot deinit `computer` [when `while` not entered]
fun random_bool () -> Bool {
return false // Generated using a fair dice roll % 2.
type A: Deinitializable {
public init(x: sink Int) {
public fun take_value (from source: sink Self ) {
precondition(s.witness == 2 )
See more examples in the compiler test suite .