StormScript: Year in Review
Tags: opensource, cpp, stormscript, linux
Published: 2019-04-21 02:39:11

---
title: StormScript: Year in Review
published: true
description: It has been a year since I created the StormScript programming language, here's what has changed.
tags: #opensource, #cpp, #stormscript, #linux
---

It has been over a year since I created the [StormScript programming language](https://stormscript.dev). Since then, I have not only fixed many issues with the language, but I have also introduced many new features to the language. In this post, I will go over them.

# Syntax Changes

## Keyword Changes

Initially, the keyword `out` was used to print. This was a fine keyword, but I feel that `print` would make more since in this setting.
```
do {
    out "Hello, World!";
}end;
```
was changed to
```
do {
    printl "Hello, World";
}end;
```
This change also allowed there to be 2 forms of `print`, `print` and `printl`. `printl` adds a newline to the end of the value that is printed.

`@args` was originally used to add function arguments. The problem with this is that it required the arguments to be on a separate line than the function.

## The removal of `end;`

Originally, StormScript used *two* ways to end a code block. Many people commented on this in my [first post](https://dev.to/stormprograms/stormscript-my-thoughts-on-how-syntax-should-be-5ei0). Not only would users have to put curly braces to end a scope, they would also have to put the `end;` keyword.  This proved to be redundant and was removed.

Code was changed from

```
do {
    printl "Hello, World!";
}end;
```
to
```
do {
    printl "Hello, World!";
}
```

This not only makes long files look nicer, but it also saves time.

## Static to Dynamic Type

StormScript was planned to be statically typed, but this changed after I realized how much this kills the readability of the language. As a result,
```
do {
    str name: "Ethan";
    printl "Hello, ", name;
}
```
would become
```
do {
    name: "Ethan";
    printl "Hello, ", name;
}
```

## Comparisons

As with any programming language, StormScript has many different comparison operators. These have not changed much over time, although StormScript uses keywords rather than symbols. These keywords are `is`, `not`, `less`, `greater`, `lesseq`, and `greatereq`.

# Website

In early March, I decided that StormScript should migrate to [its own website](https://stormscript.dev).
![](https://thepracticaldev.s3.amazonaws.com/i/qbdst4yu2siw9noatpuf.png)

# The Future

Looking forward, I hope to publish version 1.0.0 by the end of the year. For now, [version 0.7.0](https://github.com/stormprograms/StormScript/releases/tag/v0.7.0) just came out, and I am currently working on version 0.8.0. Here are some new things.

## String Concatenation

For string concatenation, I am using the `$` symbol followed by a variable name inside of a string literal.

```
do {
    int i: randomrange => min: 0, max: 100;
    printl i, " is my favorite number";
}
```
is now
```
do {
    int i: randomrange => min: 0, max: 100;
    printl "$i is my favorite number";
}
```

## Live interpretation

Live interpretation allows code to be run and changes to be reflected live. This would save variable states, as well as location. In the current development branch, live interpretation only reruns the program when changes are made.

```bash
$ stormscript test FILENAME
```

I am happy to say that [the file that runs live interpretation](https://github.com/stormprograms/StormScript/blob/dev/src/core/live.sts) is completely written in StormScript.

# Afterword

Be sure to check out the website at [stormscript.dev](https://stormscript.dev) as well as contribute to [the repository](https://github.com/stormprograms/StormScript).

I am happy to answer any questions you may have, so please feel free to ask.