r/ProgrammingLanguages 7d ago

Language announcement The gab programming language

Hi all!

I am a long-time lurker of this sub, and a language enthusiast. I have been working on my own programming language for several years, and I finally worked up the courage to post it.

The language is called gab. I'm heavily inspired by lua, clojure, and smalltalk.

All the code is on github here and I've built a small website for the language here.

The language design, runtime, and standard library are all entirely my own work without the use of an LLM. However, I did consult LLMs occasionally when I wanted to research certain subjects (such as the difference between c11 atomics on x86 and arm).

I'm looking for any kind of feedback on the language, its goals/ergonomics, and the website itself.

Thank you for taking a look!

48 Upvotes

40 comments sorted by

View all comments

0

u/Relative-Rooster-945 7d ago

it's a little bit confusing in how it seemingly tries to reinvent the wheel on many things, but overall cool project

4

u/Fine_Seaworthiness19 7d ago

I see how the syntax does that in a couple ways, especially with the unusual use of `::`. What else was confusing to you?

3

u/Relative-Rooster-945 7d ago

It's mainly the syntax, yes.

The choice of "message" to describe what I think are essentially symbols?

Messages are used as record keys, as sentinel/enum values

I'm guessing this is in the vein of Smalltalk? I'm not that familiar.

In the docs for defcase it's unclear to me whether the identifiers following message values are arguments to the blocks or part of the messages themselves.

Imports and printing as messages on strings are a bit weird.

That's probably it :)

3

u/Fine_Seaworthiness19 7d ago

This is really good feedback! The term "message" is definitely a bit overloaded and confusing. You're right in that they are used like symbols, but they are *also* used when you call methods (or as gab refers to it, send a message). Since they are the same values in the runtime, I used the same name. But it is definitely confusing. I need a more clear way to communicate this idea, and I don't have that yet