A library that brings higher-level programming features like generic data structures, polymorphism, and garbage collection to C.
Cello is a library that brings higher-level programming features to the C language, acting as a modern runtime system. It solves the problem of C's lack of built-in support for features like generic data structures, polymorphism, and garbage collection, making these capabilities accessible while maintaining C's performance and tooling.
C developers interested in experimenting with modern programming paradigms, hobbyists exploring language design, or those working on projects where C's low-level control is needed but higher-level abstractions are desired.
Developers choose Cello because it uniquely extends C with features typically found in higher-level languages, without requiring a switch to C++ or other tools. It offers a seamless integration with standard C, providing a balance between low-level control and modern convenience.
Higher level programming in C
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Provides type-safe collections like Array and Table that work with any data type, as demonstrated in examples with `new(Array, Int, ...)` for easy data management.
Adds higher-level paradigms such as exceptions, interfaces, and reflection to C, making code more expressive and reducing boilerplate for error handling and polymorphism.
Offers both stack allocation with `$` and heap allocation with `new`, plus optional garbage collection to automate cleanup and prevent memory leaks.
Works alongside standard C tooling and libraries, allowing incremental adoption without rewriting existing code, as emphasized in the philosophy.
Described as a 'fun experiment' with 'oddities and pitfalls' in the FAQ, lacking maturity and widespread testing, making it risky for production.
No high-profile projects use it, and community support is minimal compared to alternatives like C++, as admitted in the FAQ regarding portability and maintenance.
Introduces runtime overhead for features like reflection and dynamic typing, which can impact performance in compute-intensive or low-level C applications.
Relies on macros and custom syntax like `$` and `var`, which can be confusing, hinder debugging, and break compatibility with standard C compilers and tools.