Releases: wavefnd/Wave
v0.1.7-pre-beta
Wave v0.1.6-pre-beta Release Note
We are proud to announce a major milestone in the evolution of the Wave programming language. This release is not just a collection of patches; it represents a fundamental shift in Wave’s capabilities. From a completely overhauled CLI to sophisticated C ABI interoperability and a comprehensive Linux system interface, Wave is now equipped for serious systems engineering.
1. Mastering Interoperability: System V ABI & C FFI
The implementation of a robust C Calling Convention (ABI) lowering mechanism allows Wave to handle complex data structures with the same precision as a native C compiler.
- ABI Compliance: Our LLVM backend now strictly follows standard ABI rules, including SRet (Structured Return) for large aggregates, ByVal for passing structures by value, and Split/HFA (Homogeneous Floating-point Aggregates) for high-performance vector passing.
- The
externKeyword: Declare external C functions with ease, including support for block syntax and symbol redirection. - Safety in Packing: We’ve refactored aggregate packing to use
build_memcpyinstead of simple bit-casts, ensuring memory alignment requirements are strictly respected during FFI calls.
2. Direct Kernel Access: Linux x86_64 Syscall Suite
Wave now speaks the language of the Linux kernel natively via high-precision inline assembly. This foundation has allowed us to build the initial Wave Standard Library (std):
std::sys::linux: Native, zero-overhead interfaces for FS, Memory Management (mmap), Process Control, and Time.std::net: Synchronous networking withTcpListener,TcpStream, andUdpSocket.std::libc: Ready-to-use bindings for essential C functions likemalloc,free,stdio, andunistd.
Note: The standard library is in early development. While we are stabilizing the internal coupling, we recommend using
std/libcfor critical external bindings.
3. Hardened Inline Assembly: Clobbers and Normalization
Low-level programming requires total control. We’ve upgraded our asm blocks to support clobber clauses (e.g., clobber("rax", "memory")). This prevents subtle optimization bugs by explicitly informing the compiler about register and memory trashing.
The new AsmPlan engine automatically handles register normalization and sign-aware operand extension, making inline assembly both safer and more expressive.
4. Advanced Type System: Enums and Type Aliases
Wave now provides better tools for data modeling and code readability:
- Enums: Define named constants with a specific underlying representation. Enum variants are automatically treated as global constants.
enum ShaderUniformType -> i32 { FLOAT = 0, VEC2, VEC3 }
- Type Aliases: Simplify complex type signatures and improve code reuse.
enum ShaderUniformType -> i32 { FLOAT = 0, VEC2, VEC3, VEC4 } type UniformType = ShaderUniformType;
- Type Resolution Pass: A new compiler pass flattens aliases and resolves enum types across the entire program before code generation begins.
5. Iterative Constant Evaluation
Our constant evaluator is now significantly more powerful. It supports multi-round resolution, allowing constants to depend on other constants defined later in your code.
- Aggregate Support: You can now define constants that are struct literals or array literals.
- Built-in Keywords:
true,false, andnullare now fully supported in constant contexts. - Frontend Validation: The compiler now catches undeclared identifiers and type mismatches much earlier in the verification phase.
6. A Modern, Structured CLI
We have completely refactored the wavec toolchain with a command-dispatch system:
- Commands:
run,build,install std, andupdate std. - Enhanced Linking: Use
--linkand-Lto link against external system libraries directly. - Improved Diagnostics: Refined RGB color palette and accurate source-pointing for a better developer experience.
7. Formalizing the Project
- Wave Foundation: Core maintenance and assets are now officially managed by the Wave Foundation.
- MPL-2.0 License: All source files are now licensed under the Mozilla Public License v2.0.
- Rich Examples: Explore
examples/for everything from a mini-game to a TCP HTTP server and Graph algorithms (DFS/BFS).
Looking Ahead
Wave v0.1.7-pre-beta transforms the language into a tool capable of building its own ecosystem. With C FFI, enums, and direct syscall support, Wave is ready for the next level of system programming.
Get started:
# Install the compiler
# Set up the standard library
wavec install std
# Run the new Enum/Type Alias example
wavec run examples/type_enum.waveWave: Build fast, stay lean, and control the machine.
v0.1.6-pre-beta
Wave v0.1.6-pre-beta Release Note
This release marks a significant milestone in the development of Wave, featuring a massive architectural refactoring, the introduction of a modular standard library, and substantial enhancements to the compiler frontend and LLVM backend.
Core Refactoring and Architecture
- Modular Compiler Frontend: The Lexer and Parser have been completely refactored from monolithic files into modular components. This improves maintainability and allows for more granular development of syntax and semantics.
- Introduction of the Utils Crate: A new internal utility crate has been added, providing custom implementations for JSON parsing, terminal colorization (colorex), and string formatting (formatx), reducing reliance on external regex dependencies.
- Improved Error System: The diagnostic system now uses a refined RGB color palette for better terminal readability and provides more accurate source code pointing and suggestions.
Language Features
- Expanded Type System: Added support for a wider range of primitive types including i8-i128, u8-u128, f32/f64, bool, char, and byte.
- Enhanced Literals: Added support for binary (0b), hexadecimal (0x), and octal (0o) integer literals, as well as character literals and boolean constants.
- Advanced Expressions:
- Implemented unary operators: negation (-), logical not (!), and bitwise not (~).
- Implemented increment and decrement operators (++, --) in both prefix and postfix forms.
- Added support for bitwise shift operations (<<, >>) and bitwise XOR (^).
- Pointers and Memory: Improved address-of (&) and dereference (deref) operations, with stricter validation for l-values.
- Arrays and Structs:
- Added support for array literals and bounds-checked array type declarations.
- Enhanced struct support including struct literals, field access, and method call syntax sugar.
- Control Flow: Refined handling of if-else if-else chains and while loops, including support for break and continue statements within nested scopes.
Compiler Backend (LLVM)
- Clang-based Linking: The compiler now generates object files via LLVM and uses Clang as a linker. This allows seamless linking with the C standard library (libc) and math library (libm).
- Optimization Levels: Added support for optimization flags (-O0, -O1, -O2, -O3, -Oz, -Ofast).
- Enhanced Inline Assembly: The
asmblock has been upgraded to support sophisticated input and output constraints, allowing for direct system calls and high-performance low-level code. - Modular Codegen: The LLVM backend is now organized into specialized modules for expressions, statements, and variable management.
CLI and Tooling
- New CLI Commands:
build: Compiles a Wave file into a standalone executable.install std/update std: Manages the Wave standard library installation from the official repository.
- Granular Debugging: Added the
--debug-waveflag to output specific compiler stages:tokens,ast,ir,mc,hex, orall. - Automated Testing: Introduced a Python-based test runner and a patch verification script to ensure compiler stability across changes.
- Maintainers Registry: Added a
MAINTAINERSfile to define code ownership and streamline the review process.
Standard Library (std)
- Introduced the first iteration of the Wave Standard Library, which operates independently of the compiler:
math: Modules for bit manipulation, floating-point operations, and integer utilities.string: Core string operations including length calculation, comparison, finding, and trimming.sys: Linux syscall wrappers.net: Initial UDP socket support.libc: A bridge for C ABI compatibility.
Development and Contribution
- License Change: The project has returned to the Mozilla Public License 2.0 (MPL 2.0).
- DCO Requirement: All contributions now require a Developer Certificate of Origin (Signed-off-by) to ensure legal clarity.
- Updated Guidelines:
CONTRIBUTING.mdhas been rewritten to support both GitHub Pull Requests and email-based patch workflows.
Miscellaneous
- Updated
.gitignoreand.mailmapfor better repository hygiene. - Removed legacy testing documentation in favor of the new automated test suite.
- Improved the project README with updated build instructions and licensing information.
v0.1.5-pre-beta
This release introduces the foundation of Object-Oriented Programming in Wave with the addition of Structs and Proto methods. Additionally, the build system has been completely overhauled to rely on system-installed LLVM libraries, significantly improving build stability and cross-platform compatibility.
Key Features
1. Structs & Field Access
You can now define custom data structures using the struct keyword and access their fields using dot notation.
- Struct Definition: Define data containers with typed fields.
- Field Access: Read values using
object.field. - Pass-by-Value: Structs can be passed as arguments to functions.
struct Box {
size: i32;
}
fun main() {
var b: Box = Box { size: 42 };
println("Size: {}", b.size);
}
2. Methods via proto
The proto keyword is now used to attach methods to existing structs.
- Method Definition: Define methods associated with a specific struct.
selfParameter: Access the instance data within methods.- Method Call Syntax: Call methods using
object.method().
proto Box {
fun double_size(self: Box) -> i32 {
return self.size * 2;
}
}
3. Build System Overhaul
We have moved away from downloading custom LLVM binaries. The compiler now links against your system's LLVM installation.
- System LLVM Detection: Automatically detects LLVM 14 on Linux, macOS (Homebrew), and Windows.
x.pyScript: A new Python script (x.py) replacesMakefilesfor easier building, testing, and packaging.- Cross-Compilation: Improved configuration for compiling Linux/Windows targets from a single environment.
4. CI/CD Improvements
- Added macOS build workflows to GitHub Actions to ensure compatibility across major operating systems.
Fixes & Internal Changes
- Parser Update: Improved lookahead logic to correctly distinguish between field access (
obj.field) and method calls (obj.method()). - LLVM IR Generation: Refactored expression generation to handle struct literals and memory addresses more reliably.
- Config: Fixed target-specific linker errors in
.cargo/config.toml.
v0.1.4-pre-beta
Wave 0.1.4-pre-beta
PR and Commits
Showcase
The showcase is available at Wave-Test.
Features
CLI:
wavec run --img main.waveMethod Chaining:
fun len(s: str) -> i32 {
var count: i32 = 0;
while (s[count] != 0) {
count += 1;
}
return count;
}
fun main() {
var my_string: str = "Hello World";
var length: i32 = my_string.len();
println("Result of my_string.len(): {}", length);
}Thank you for using Wave! Stay tuned for future updates and enhancements.
Installation Guide
-
Download:
- Download to Curl.
curl -fsSL https://wave-lang.dev/install.sh | bash -s -- --version v0.1.4-pre-beta
- Download to Curl.
-
Verify Installation:
- Open a terminal and type:
wavec --version
- If the version number displays, the installation was successful.
- Open a terminal and type:
Contributor
@LunaStev | 🇰🇷
v0.1.4-pre-beta-nightly-2025-07-16
Wave 0.1.4-pre-beta-nightly-2025-07-16
PR and Commits
Showcase
The showcase is available at Wave-Test.
Thank you for using Wave! Stay tuned for future updates and enhancements.
Installation Guide
-
Download:
- Download to Curl.
curl -fsSL https://wave-lang.dev/install.sh | bash -s -- --version v0.1.4-pre-beta-nightly-2025-07-16
- Download to Curl.
-
Verify Installation:
- Open a terminal and type:
wavec --version
- If the version number displays, the installation was successful.
- Open a terminal and type:
Contributor
@LunaStev | 🇰🇷
v0.1.3-pre-beta
Wave 0.1.3-pre-beta
PR and Commits
- [#197]Change function parameter syntax from semicolon to comma (issue #196)
- [#198]Fix incorrect LLVM IR generation for array of pointers and IndexAccess dereferencing (issue #198)
- [#201]Parameters can have multiple types
- [#204]Param bug fix
- [#206]Handling Inline Assembly Negative Values (issue #205)
- [#208]Troubleshooting if statement bugs in paser
- [#210]Cambiar la estructura de import
Showcase
The showcase is available at Wave-Test.
Thank you for using Wave! Stay tuned for future updates and enhancements.
Installation Guide
-
Download:
- Download to Curl.
curl -fsSL https://wave-lang.dev/install.sh | bash -s -- --version v0.1.3-pre-beta
- Download to Curl.
-
Verify Installation:
- Open a terminal and type:
wavec --version
- If the version number displays, the installation was successful.
- Open a terminal and type:
Contributor
@LunaStev | 🇰🇷
v0.1.3-pre-beta-nightly-2025-07-11
Wave 0.1.3-pre-beta-nightly-2025-07-11
PR and Commits
- [#197]Change function parameter syntax from semicolon to comma (issue #196)
- [#198]Fix incorrect LLVM IR generation for array of pointers and IndexAccess dereferencing (issue #198)
- [#201]Parameters can have multiple types
- [#204]Param bug fix
- [#206]Handling Inline Assembly Negative Values (issue #205)
- [#208]Troubleshooting if statement bugs in paser
Thank you for using Wave! Stay tuned for future updates and enhancements.
Installation Guide
For Linux:
-
Download and Extract:
- Download the
wave-v0.1.3-pre-beta-nightly-2025-07-11-x86_64-linux-gnu.tar.gzfile from the official source. - Use the wget command:
wget https://github.com/LunaStev/Wave/releases/download/v0.1.3-pre-beta-nightly-2025-07-11/wave-v0.1.3-pre-beta-nightly-2025-07-11-x86_64-linux-gnu.tar.gz
- Extract the archive:
sudo tar -xvzf wave-v0.1.3-pre-beta-nightly-2025-07-11-x86_64-linux-gnu.tar.gz -C /usr/local/bin
- Download the
-
Setting up LLVMs
- Open a terminal and type:
sudo apt-get update sudo apt-get install llvm-14 llvm-14-dev clang-14 libclang-14-dev lld-14 clang sudo ln -s /usr/lib/llvm-14/lib/libLLVM-14.so /usr/lib/libllvm-14.so export LLVM_SYS_140_PREFIX=/usr/lib/llvm-14 source ~/.bashrc
- Open a terminal and type:
-
Verify Installation:
- Open a terminal and type:
wavec --version
- If the version number displays, the installation was successful.
- Open a terminal and type:
Contributor
@LunaStev | 🇰🇷
v0.1.3-pre-beta-nightly-2025-07-06
Wave 0.1.3-pre-beta-nightly-2025.07.06
PR and Commits
- [#197]Change function parameter syntax from semicolon to comma (issue #196)
- [#198]Fix incorrect LLVM IR generation for array of pointers and IndexAccess dereferencing (issue #198)
- [#201]Parameters can have multiple types
- [#204]Param bug fix
- [#206]Handling Inline Assembly Negative Values (issue #205)
Thank you for using Wave! Stay tuned for future updates and enhancements.
Installation Guide
For Linux:
-
Download and Extract:
- Download the
wave-v0.1.3-pre-beta-nightly-2025-07-06-x86_64-linux-gnu.tar.gzfile from the official source. - Use the wget command:
wget https://github.com/LunaStev/Wave/releases/download/v0.1.3-pre-beta-nightly-2025-07-06/wave-v0.1.3-pre-beta-nightly-2025-07-06-x86_64-linux-gnu.tar.gz
- Extract the archive:
sudo tar -xvzf wave-v0.1.3-pre-beta-nightly-2025-07-06-x86_64-linux-gnu.tar.gz -C /usr/local/bin
- Download the
-
Setting up LLVMs
- Open a terminal and type:
sudo apt-get update sudo apt-get install llvm-14 llvm-14-dev clang-14 libclang-14-dev lld-14 clang sudo ln -s /usr/lib/llvm-14/lib/libLLVM-14.so /usr/lib/libllvm-14.so export LLVM_SYS_140_PREFIX=/usr/lib/llvm-14 source ~/.bashrc
- Open a terminal and type:
-
Verify Installation:
- Open a terminal and type:
wavec --version
- If the version number displays, the installation was successful.
- Open a terminal and type:
Contributor
@LunaStev | 🇰🇷
v0.1.3-pre-beta-nightly-2025-06-28
branch: https://github.com/LunaStev/Wave/tree/llvm_opt
Thank you for using Wave! Stay tuned for future updates and enhancements.
Installation Guide
For Linux:
-
Download and Extract:
- Download the
wave-v0.1.3-pre-beta-nightly-2025-06-28-x86_64-linux-gnu.tar.gzfile from the official source. - Use the wget command:
wget https://github.com/LunaStev/Wave/releases/download/v0.1.3-pre-beta-nightly-2025-06-28/wave-v0.1.3-pre-beta-x86_64-linux-gnu.tar.gz
- Extract the archive:
sudo tar -xvzf wave-v0.1.3-pre-beta-nightly-2025-06-28-x86_64-linux-gnu.tar.gz -C /usr/local/bin
- Download the
-
Setting up LLVMs
- Open a terminal and type:
sudo apt-get update sudo apt-get install llvm-14 llvm-14-dev clang-14 libclang-14-dev lld-14 clang sudo ln -s /usr/lib/llvm-14/lib/libLLVM-14.so /usr/lib/libllvm-14.so export LLVM_SYS_140_PREFIX=/usr/lib/llvm-14 source ~/.bashrc
- Open a terminal and type:
-
Verify Installation:
- Open a terminal and type:
wavec --version
- If the version number displays, the installation was successful.
- Open a terminal and type:
Contributor
@LunaStev | 🇰🇷
v0.1.3-pre-beta-nightly-2025.06.25
Wave 0.1.3-pre-beta-nightly-2025.06.25
PR and Commits
- [#197]Change function parameter syntax from semicolon to comma (issue #196)
- [#198]Fix incorrect LLVM IR generation for array of pointers and IndexAccess dereferencing (issue #198)
- [#201]Parameters can have multiple types
Thank you for using Wave! Stay tuned for future updates and enhancements.
Installation Guide
For Linux:
-
Download and Extract:
- Download the
wave-v0.1.3-pre-beta-nightly-2025-06-25-x86_64-linux-gnu.tar.gzfile from the official source. - Use the wget command:
wget https://github.com/LunaStev/Wave/releases/download/v0.1.3-pre-beta-nightly-2025-06-25/wave-v0.1.3-pre-beta-x86_64-linux-gnu.tar.gz
- Extract the archive:
sudo tar -xvzf wave-v0.1.3-pre-beta-nightly-2025-06-25-x86_64-linux-gnu.tar.gz -C /usr/local/bin
- Download the
-
Setting up LLVMs
- Open a terminal and type:
sudo apt-get update sudo apt-get install llvm-14 llvm-14-dev clang-14 libclang-14-dev lld-14 clang sudo ln -s /usr/lib/llvm-14/lib/libLLVM-14.so /usr/lib/libllvm-14.so export LLVM_SYS_140_PREFIX=/usr/lib/llvm-14 source ~/.bashrc
- Open a terminal and type:
-
Verify Installation:
- Open a terminal and type:
wavec --version
- If the version number displays, the installation was successful.
- Open a terminal and type:
Contributor
@LunaStev | 🇰🇷