Jet: Programming Language that puts developers first.
Tags: showdev, javascript, c, programming
Published: 2021-10-06 21:28:05

Hi Everyone!

I'm Ashish and this is my first post on the platform and I'm very excited to share my project [Jet](https://github.com/The-NextGen-Project/jet). This post is for updates and recent developments for the programming language I am developing.

## About
If you have ever tried to develop an application, you know hard it is to get your app up and running on your desired platform, but even more exhausting to develop one for multiple platforms, especially when scrolling through piles of error messages. This is where Jet comes in to help. Jet seeks to provide the highest performance applications in both the Web and in Native environments while keeping the developer informed of what **actually** caused the error.

## Understanding The Language
There is no need to discuss the entire language specifics here, but you can totally read about it on our [Github](https://github.com/The-NextGen-Project/jet/blob/main/LANG.md).

## What's new, and what's planned?
The language has had a variety of features planned and fine-tuned to create simple and flexible language.

### Error Messages
One of Jet's main strengths are its error messages. When I first learned programming, they had a whole lesson teaching on how to interpret stack traces and error messages, this should not be how it works!

Error messages should be clear and explain to the programmer what they did wrong. Let's look at an example:
![ParseErrorExample2](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ycq9lh0jcc4jaukll2z4.png)

Here we get a clear reason as to the error, and we get the location to fix the problem. And yes, this is output on a **Windows** machine, your eyes do not deceive you. This is the output we get on all platforms **Mac, Linux, and Windows**.

If we look at the same error in C++, however, we get a nasty error message:

 ![BadC++Error](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l6e1mb4kfw8lovv9no3r.png)
Along with some compiler gibberish, it doesn't even tell us where to fix the problem! This is not how programming languages should be designed. This is especially tricky if you are missing braces in a sequence of braces.
 
Let's have a look at another example:
![LexErrorExample2](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x6ukdcohlaearn1r8pth.png)
Here we get a list of possible values that are acceptable and tell the programmer why the compiler errored out. In C++, we don't even get an error, worse, its designated as a warning which commonly overlooked and can lead to undefined behavior. 

We take inspiration in our error messages from Rust and Elm to increase the productivity of the developer.

### Updates
Jet has removed some extra features that do not sit well for the core language and has now made explicit grammar definitions for enums and a structures.

#### Compile-time code execution
Inspired by the *Jai Programming Language* by Johnathon Blow, we have based a lot of different principles in the language after that, including compile-time code execution.

```rust
does_something => () {
  return "Hi";
}
// ...
another_function => () {
  // Variable `some_value` evaluated at compile-time
  some_value := static {
    return does_something();
  }
}
```

#### Code Generation
Jet's current state is in the midst of type-checking and *C Programming Language* code generation. However, we don't intend to solely rely on C, there is [x64 Backend](https://github.com/The-NextGen-Project/jet/blob/dev/lib/jet-x64-assembler.cpp) in its testing phase too. 

JavaScript code generation is also on high priority after the C backend, as we want Jet code to get up and running on the web as soon as possible. In order to keep up with those who dislike manual memory management, **smart pointers** are already planned to be implemented in the near future which will translate well into JavaScript code generation. 

#### Web Development
In order to live up to expectations, web development is in the works, too. A complete web project consists not just of JavaScript files and other programming language build files may be necessary, so Jet is keen on generating complete projects that interact with every aspect to launching existing code on the web.


## Conclusion
Jet is planned to have close to 90% of features to be implemented and tested with code generation within the next year, and hopefully begins its user-base testing in the Spring of 2022.

I would love any feedback that is to be given on the language, and contributions are always made welcome, and are really helpful too!
Make sure to star the [repo](https://github.com/The-NextGen-Project/jet/tree/dev) and watch it for updates as they present themselves on Github, and I hope to give you another update in the future.

Thank you for your time!