Copper is a minimal, low-level programming language developed as a personal project intended to serve as a replacement for C. It distinguishes itself by employing a Ruby-like syntax while maintaining a C backend, a design choice that facilitates bootstrapping—the process of using a language to compile its own source code. By leveraging a C backend, the language aims to provide a more expressive syntax for system-level programming without sacrificing the ability to interface with existing low-level infrastructure.
The language incorporates several high-level features, including generics and object-oriented (OOP) constructs such as classes and an implicit `self` keyword. However, the extent of its OOP capabilities is a point of discussion; some observers note that while it facilitates object-oriented designs, it may lack the maturity found in more specialized languages like Pony. The author has documented the language's evolution through a personal blog, detailing specific design trade-offs, such as the deliberate decision to omit exceptions from the language's core architecture.
Despite its expressive syntax, Copper's technical specifications remain partially opaque in its current documentation. Users have raised questions regarding its specific memory model, whether it utilizes a garbage collector, and its ABI (Application Binary Interface) compatibility with C. While the standard library includes allocators that feature `free` functions, the primary examples provided do not explicitly demonstrate how deallocation is handled. Additionally, the language's support for Unicode and its specific compilation targets remain undefined, leaving open questions about its suitability for complex, production-grade systems.
