Shadow is a type-safe, general purpose, systems language intended to be compiled to machine code. The reference implementation for Shadow uses LLVM, the same infrastructure that the C-family compiler Clang is built on, and targets the x86 and x64 architectures for the Linux, macOS, and Windows operating systems.
It can! Sure, you have to pay for checks on array bounds and a few other things, but some trade-offs are worth making.
For hardcore systems programming, C and C++ have been the only practical options. Shadow doesn’t allow direct pointer arithmetic like those languages, but for those rare situations when you need that level of control, Shadow allows you to declare a method that can be implemented in C or raw LLVM.
The Java Virtual Machine is a great execution environment, but the overhead of dynamic class loading, just-in-time compilation, and other VM services is not zero, especially when it comes to memory footprint. Our goal in making Shadow was the best of both worlds: the modern syntax and safety guarantees of Java combined with the performance of C++.
We’re so glad you asked! Despite its roots, it’s not merely an unholy amalgamation of Java and C++. It has a distinctive feel with unique features and syntax.
Here’s a taste:
- Methods that can return multiple values
- Properties for easy member access
- Immutable types and references
- Reified generics
- Signed and unsigned primitive types
- Language-supported singletons
- Garbage collection through reference counting
- Built-in UTF-8 support
Want to know more? Head over to the Features page. If you have more general questions, check out the FAQ.