Skip to main content

Introduction to Wave v0.0.6-pre-beta: Strong Typing, Function Returns, and continue Support

· 4 min read
LunaStev
Programming Language Engineer

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

I'm very happy to introduce Wave v0.0.6-pre-beta, which is an important step forward in the evolution of language.

The release focuses on expanding the type system, enhancing feature support, and introducing powerful new features such as 'continue' doors and floating arithmetic. With the structured 'WaveType' Enum now replacing all string-based types, Wave has taken a strong step towards becoming a statically typed system language.

The function return type is now fully supported, enabling expressive and reusable logic. You can define the function as -> i32 and return the value using the return keyword. LLVM IR generation logic has also been upgraded to be fully type-aware, ensuring safer and more accurate lower-level output.

The waves are growing fast, and we are very excited to share our future plans. Thank you for supporting me on this journey 💙


✅ Added Features

💬 Comment Support

  • Supports single-line comments using //
  • Supports multi-line comment blocks using /* */

✅ continue statement Support

  • Possible to skip to the next iteration depending on the condition within the 'while' loop
  • Syntax supported for if (condition) {continue; }
  • In LLVM IR, 'continue' is treated as a condition check block for the corresponding loop

🧠 Strong Typing for Variables and Parameters

  • Replaced string-based types with structured WaveType enums in the AST
  • Fully supports types like i32, u64, f32 for both variables and parameters
  • Enables static type checking and safer LLVM IR generation

🔢 Float Type Support (f32)

  • Supports f32 literals (e.g., 12.34)
  • Allows declaration, initialization, and reassignment of f32 variables
  • Enables use of f32 values in arithmetic and comparison operations (e.g., if, while)
  • Promotes float to double using fpext when passing to printf to conform to the C ABI

🖨️ Formatted Print (println("...", value))

  • Automatically maps Wave types to proper C format specifiers (%d, %f, %s)
  • Correctly handles printing of f32, i32, and string types with type inference

🌀 Type-Aware LLVM IR Generation

  • LLVM alloca, store, and load instructions are generated based on WaveType
  • Supports both integer and float value initialization
  • Uses BasicTypeEnum and BasicValueEnum to unify value handling
  • Ensures correctness in mixed-type binary expressions and conditionals

🧩 Function Definition and Calls

  • Supports user-defined functions with multiple parameters
  • Parameters support explicit typing (e.g., i32, str)
  • Functions can be called with literals or variables as arguments
  • LLVM IR correctly handles parameter passing using %0, %1, ... style
  • Parameter values are properly stored and loaded from the stack
  • Enables composable and reusable logic with full IR-level integration

🧠 Function Return Type Support

  • Functions can now specify return types using -> syntax (e.g., -> i32)
  • Supported return types: i32, f32, str (more planned)
  • Return statements (return expr;) emit the appropriate LLVM ret instruction
  • If no return is specified in a void function, ret void is automatically inserted
  • Ensures matching return types between Wave AST and LLVM IR generation

Showcase

Image des2cription

Image descri3ption


Image descr2iption

Image descr3iption


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


Installation Guide

For Linux:

  1. Download and Extract:

    • Download the wave-v0.0.6-pre-beta-linux.tar.gz file from the official source.
    • Use the wget command:
      wget https://github.com/LunaStev/Wave/releases/download/v0.0.6-pre-beta/wave-v0.0.6-pre-beta-linux.tar.gz
    • Extract the archive:
      sudo tar -xvzf wave-v0.0.6-pre-beta-linux.tar.gz -C /usr/local/bin
  2. 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
  3. Verify Installation:

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

Contributor

@LunaStev | 🇰🇷


Website

Website GitHub

Introduction to Wave v0.0.5-pre-beta: Add While Features

· 2 min read
LunaStev
Programming Language Engineer

Hello! I'm LunaStev, the developer of Wave. I'm very excited to release the v0.0.5 pre-beta version. I'm very excited to share the 5th version of Wave.

In this version, we have added a while statement.


✅ Added Features

🔁 Loops: Full Support for while Statements

  • Basic while loops

  • Nested while loops

  • Variable declaration and initialization inside loops

  • Loop termination condition handling (supports comparison operators like <=, <, ==, etc.)

  • print and println functions work inside loops

🧨 Control Flow

  • Support for break statements

  • Allows breaking out of loops in the middle

  • Works correctly even inside nested loops

  • (⏳ Next version: continue support planned)

🧠 Variable Handling

  • Fully correct local variable scoping (e.g., a new j is created in each loop)

  • Supports var declarations (must specify types like i32, u32, etc.)

  • Allows variable reassignment (handles patterns like i = i + 1)


Showcase

Image description

Image description


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


Installation Guide

For Linux:

  1. Download and Extract:

    • Download the wave-v0.0.5-pre-beta-linux.tar.gz file from the official source.
    • Use the wget command:
      wget https://github.com/LunaStev/Wave/releases/download/v0.0.5-pre-beta/wave-v0.0.5-pre-beta-linux.tar.gz
    • Extract the archive:
      sudo tar -xvzf wave-v0.0.5-pre-beta-linux.tar.gz -C /usr/local/bin
  2. 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
  3. Verify Installation:

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

Contributor

@LunaStev | 🇰🇷


Website

Website GitHub

Introduction to Wave v0.0.4-pre-beta: If statement completed

· 2 min read
LunaStev
Programming Language Engineer

Hello! I'm LunaStev, the developer of Wave. I'm excited to release the v0.0.4 pre-beta version. I'm very excited to share the 4th version of Wave.

In this version, we have added an if statement.


✨ Major Updates

⚠️ if Statement Partially Functional

Basic conditional branching with if statements is now working, but the implementation is not yet perfect. While if and else blocks are parsed and compiled to LLVM IR, some edge cases or complex conditions may not behave correctly. Improvements are ongoing.

✅ Arithmetic Expression Support

Arithmetic expressions like a + b and c * d are now properly represented in the AST and converted into LLVM IR. BinaryExpression is now fully supported.

✅ Expression Output in Format Strings

Expressions can now be directly used inside format strings. Example: println("{}", a + a) works flawlessly, allowing real-time expression results to be printed.

✅ Expanded Code Generator Structure

Introduced generate_expression_ir() for full recursive processing of expressions. Ready for further expansion to support more complex and diverse expression types.


Showcase

image

image


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


Installation Guide

For Linux:

  1. Download and Extract:

    • Download the wave-v0.0.4-pre-beta-linux.tar.gz file from the official source.
    • Use the wget command:
      wget https://github.com/LunaStev/Wave/releases/download/v0.0.4-pre-beta/wave-v0.0.4-pre-beta-linux.tar.gz
    • Extract the archive:
      sudo tar -xvzf wave-v0.0.4-pre-beta-linux.tar.gz -C /usr/local/bin
  2. 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
  3. Verify Installation:

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

Contributor

@LunaStev | 🇰🇷


Website

Website GitHub

Wave is now featured on LibHunt! Check out the comparisons with Leo, KCL, and Erg!

· 2 min read
LunaStev
Programming Language Engineer

Exciting news! Wave, the next-generation programming language built with Rust, is now featured on LibHunt!

Not only that, but Wave is also being compared to other established Rust-based languages like Leo, KCL, and Erg.
This is a huge step forward in getting Wave recognized in the developer community!


🔍 What is LibHunt?

LibHunt is a platform that tracks and compares open-source projects based on GitHub activity,
mentions on tech blogs (like Dev.to, Reddit, etc.), and overall developer interest.

The fact that Wave has been included and is already being compared to well-known Rust-based languages
means that it's gaining attention as a promising new programming language!

📌 Check out Wave's LibHunt page here:
👉 LibHunt Wave Page


🚀 How does Wave compare to other Rust-based languages?

Here are some key comparisons:

FeatureWaveLeoKCLErg
Mentions114217
Stars64,8181,9182,757
Activity9.99.69.59.7
Last Commit6 days ago7 days ago9 days ago17 days ago
LicenseMPL 2.0GPL v3Apache 2.0Apache 2.0

🌟 Why is this exciting?

  • Wave is still in its early stages but is already being compared to well-established Rust-based languages!
  • Wave has a higher activity score (9.9) than some of these languages, meaning rapid development is ongoing!
  • This is an opportunity to introduce more developers to Wave and grow its community!

🔗 Join the conversation & help Wave grow!

🚀 Want to explore Wave?
⭐ Star us on GitHub: GitHub - LunaStev/Wave
📖 Read more about Wave: Wave Official Website

💬 What do you think about Wave's approach compared to these other languages?
Join the discussion in the Rust community, Reddit, and Twitter! Let's build the future of Wave together! 🚀💡

Introduction to Wave v0.0.3-pre-beta: Output variables to format

· One min read
LunaStev
Programming Language Engineer

Hello! I am LunaStev, the developer of Wave. I am excited to announce the release of v0.0.3-pre-beta. I am thrilled to share the third version of Wave.

In this version, we have created a function that allows you to output variables in a format.

New Features in v0.0.3-pre-beta

  1. You can format and output by entering a numeric value in a variable.

Showcase

image

image


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


Installation Guide

For Linux:

  1. Download and Extract:

    • Download the wave-v0.0.3-pre-beta-linux.tar.gz file from the official source.
    • Use the wget command:
      wget https://github.com/LunaStev/Wave/releases/download/v0.0.3-pre-beta/wave-v0.0.3-pre-beta-linux.tar.gz
    • Extract the archive:
      sudo tar -xvzf wave-v0.0.3-pre-beta-linux.tar.gz -C /usr/local/bin
  2. 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
  3. Verify Installation:

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

Contributor

@LunaStev | 🇰🇷


Website

Website GitHub

Introduction to Wave v0.0.1-pre-beta: The First Usable Version

· 3 min read
LunaStev
Programming Language Engineer

Hello! I’m LunaStev, the developer of Wave, and I’m excited to announce the release of v0.0.1-pre-beta. While it’s still an early version, I’m happy to share this first usable version of Wave with you all. There’s a lot to improve, but this release shows the direction I’m heading with the project.

In this version, you can now use LLVM to create binary files from Wave code. Although there are still many limitations, this release gives you a glimpse into how Wave is progressing. Let’s take a closer look at what’s new and how you can get started.

New Features in v0.0.1-pre-beta

  1. LLVM Support for Binary Creation

With v0.0.1-pre-beta, you can use LLVM to compile Wave code into binary files. This means you can now actually run Wave code and see it in action. However, there are a few limitations:

  • You can only print output using Println or the print command. Multiple prints may not work as expected in this version.
  1. Temporary Suspension of Windows Support

Due to some issues with LLVM on Windows, support for Windows has been temporarily suspended. This version is Linux-only for now, but I plan to bring back Windows support in future updates once the issues are resolved. Thanks for your understanding!

Showcase

Here are some preview images of the new functionality in action:

Image description

Image description

Installation Guide

If you’re ready to try Wave, here’s how to get started:

For Linux:

  1. Download and Extract

Download the wave-v0.0.1-pre-beta-linux.tar.gz file from the official release page. You can also download it directly using this command:

wget https://github.com/LunaStev/Wave/releases/download/v0.0.1-pre-beta/wave-v0.0.1-pre-beta-linux.tar.gz

Then, extract the archive with:

sudo tar -xvzf wave-v0.0.1-pre-beta-linux.tar.gz -C /opt
  1. Set Environment Variables

Add the Wave binary to your PATH by editing your shell configuration file (~/.bashrc or ~/.zshrc):

export PATH=$PATH:/opt

Apply the changes by running:

source ~/.bashrc
  1. Set up LLVM

Wave relies on LLVM for binary creation, so you’ll need to install it. Run the following commands:

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
  1. Verify Installation

To check if the installation was successful, type the following:

wave --version

If everything is set up correctly, you should see the version number!


Wrapping Up

Wave is still in its early stages, but I’m committed to making it a powerful and flexible language. I appreciate all your support and feedback as I continue to improve it. I hope you’ll enjoy exploring this version, and I look forward to hearing what you think!

Stay tuned for the next release!


Developer

@LunaStev 🇰🇷


Website

Website GitHub

Introduction to Wave v0.0.2-pre-beta: Continuous Output Available

· One min read
LunaStev
Programming Language Engineer

Hello! I am LunaStev, the developer of Wave. I am excited to announce the release of v0.0.2-pre-beta. I am thrilled to share the second version of Wave.

In this version, the bug related to continuous output from v0.0.1-pre-beta has been fixed.

New Features in v0.0.2-pre-beta

  1. Print and Println can be entered multiple times and multiple lines.

Showcase

Code

Print

Installation Guide

For Linux:

  1. Download and Extract:

    • Download the wave-v0.0.2-pre-beta-linux.tar.gz file from the official source.
    • Use the wget command:
      wget https://github.com/LunaStev/Wave/releases/download/v0.0.2-pre-beta/wave-v0.0.2-pre-beta-linux.tar.gz
    • Extract the archive:
      sudo tar -xvzf wave-v0.0.2-pre-beta-linux.tar.gz -C /usr/local/bin
  2. 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
  3. Verify Installation:

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

Contributor

@LunaStev | 🇰🇷


Website

Website GitHub