Hello! I'm LunaStev, the developer of Wave.

We are excited to announce Wave v0.1.1-pre-beta
This update introduces inline assembly (asm {}) support, enabling you to write low-level system code directly in Wave, such as making syscalls with direct register manipulation.

Additionally, Wave now fully supports pointer chaining (ptr>) and array types (array), including index access, address-of operations, and validation of literal lengths — expanding Wave's capability for systems-level and memory-safe programming.

These improvements bring Wave closer to its vision as a low-level but expressive programming language.


✅ Added Features

⚙️ Inline Assembly (asm { ... }) Support

  • Introduced asm { ... } block syntax to embed raw assembly instructions directly within Wave code.

  • Supports instruction strings (e.g., "syscall") and explicit register constraints via in("reg") var and out("reg") var.

  • Variables used in in(...) are passed into specified registers; variables in out(...) receive output from registers.

  • Supports passing literal constants directly to registers (e.g., in("rax") 60).

  • Pointer values (e.g., ptr) are correctly passed to registers such as rsi, enabling low-level syscalls like write.

  • Internally leverages LLVM's inline assembly mechanism using Intel syntax.

  • Currently supports single-output only; multiple out(...) constraints will overwrite each other.

  • Does not yet support clobber lists or advanced constraint combinations.

  • Provides essential capability for system-level programming (e.g., making direct syscalls, writing device-level code).

⚠️ This is not a fully general-purpose inline ASM facility yet, but it enables practical low-level operations within Wave. Full support is planned for later phases.

⚙️ Make pointer chain explicit

  • Nested parsing like ptr, ptr>

  • Can create ptr for any type (no restrictions on T)

  • Support for consecutive deref operations (e.g., deref deref deref)

⚙️ Array type complete

  • IndexAccess (numbers[0]) handling

  • ArrayLiteral → Parse into AST and validate length

  • AddressOf → Support array literals with address-of values (e.g., [&a, &b])

  • Confirmed that array supports any type as T

✨ Other Changes

🧠 Library and Binary 2 Coexist

  • Add lib.rs for easy package manager creation, development, and easy access.

Showcase

Image1description

Image2description


Image3description

Image4description


Image5description

Image6description


Image7description

Image8description


Image9description

Image10description


Thank you for using Wave! Stay tuned for future updates and enhancements.


Installation Guide

For Linux:

  1. Download and Extract:

    • Download the wave-v0.1.1-pre-beta-x86_64-linux-gnu.tar.gz file from the official source.
    • Use the wget command:
     wget https://github.com/LunaStev/Wave/releases/download/v0.1.1-pre-beta/wave-v0.1.1-pre-beta-x86_64-linux-gnu.tar.gz
    
  • Extract the archive:

     sudo tar -xvzf wave-v0.1.1-pre-beta-x86_64-linux-gnu.tar.gz -C /usr/local/bin
    
  1. 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
    
  2. Verify Installation:

    • Open a terminal and type:
     wavec --version
    
  • If the version number displays, the installation was successful.

Contributor

@lunastev | 🇰🇷


Website

Website
GitHub
Discord
Ko-fi