Currently in Beta 🌸🌸

Published on
Tuesday, January 25, 2022

Ghost 1.0 Beta 1 is Available


Ghost 1.0 Beta 1 is now available, which you can get by visiting releases on Github or installing through Homebrew if you’re on mac.

Beta 1 marks a huge milestone in the development of Ghost. The last version that was posted was 0.16.0, and that was in June of 2021, almost a full year ago. So what’s happened since then?

A lot.

In between, I actually re-wrote Ghost from scratch not only once, but twice. The first time I approached the internals in a slightly different manner as I was never satisified with how the project structure had felt up to that point. I got pretty far with this rebuild and even experimented with different features that I wanted to include in the first stable release, like built in servers.

After some time, things still didn’t feel quite right so I revisited my original approach which was based on the internals of Monkey as taught in the accompanying book. Starting yet again from scratch, its the version I came to really like and push forward to 1.0.

v0.16.0, while “stable” in what it offered, only offered a small subset of what I wanted to be in the language. It was missing a large portion of the standard library, classes, ternary operators, switch statements, etc.

Since rebuilding, all the features I wanted to include have been added:

  • Standard library
  • Built in modules:
    • console
    • ghost
    • http
    • io
    • math
    • os
    • random
    • time
  • Classes
  • switch statements
  • continue statements
  • break statements
  • if/else if/else statements
  • for in statements
  • ? : ternary expressions
  • += -= *= /= compound statements
  • and or logical operators
  • import statements, with short-circuiting cyclic import support
  • .. range operator
  • Built in object methods and properties
  • Better syntax and runtime error reporting with line and column references
  • Full unicode support
  • Dot notation support
  • Linux, Mac, WASM, and Windows support

What’s next?

All the core features I want to ship with are there, but I want to take this time before I tag the stable release to go through the code, clean things up, make sure everything is lovingly commented, work on filling out any missing tests, and lastly - get the website and documentation updated.

Lastly, I’d also like to take this time to really give Ghost a spin on writing some code/applications that are more than just “test” examples. I’m going to reserve the right at this stage to make any breaking changes to the core library/naming convention as I see fit during this period.

Post stable release

Once everything has been said and done, and 1.0 is officially out, things won’t stop there! I’m really excited about exploring classes and testing out some idea’s I’ve had for them. These changes will be incremental and will only either be fixing regressions/bugs, or adding new functionality. Ghost will follow a semantic release cycle, so any breaking changes would warrant a major (2.0) release which I don’t plan on doing anytime soon.

Concepts to explore

There’s a lot to explore within the realms of language design. This project was started out of fulfilling a curiousity in learning how languages work under the hood. I’d like to continue developing Ghost to be a language that’s fun and easy to use. I never started this to “solve” any problems in the current landscape of languages.

Here’s a short list of things I’d like to explore moving forward:

  • 2D game development
  • Terminal UI / applications
  • Web (API / backend) development
  • Package management / ecosystem
  • Machine learning

If you’ve been following Ghost along this whole time, thank you! If you’re just not coming across Ghost, welcome! I look forward to building and fostering a great community with you all.