Hello everyone,
I’m excited to introduce the alpha release of kcats, a fresh take on stack-based programming languages, inspired by the language Joy, designed with simplicity, learnability, and functionality in mind.
Our aim with kcats is to make it easier for anyone to write short programs for personal automation tasks. We believe that existing languages require learning too many specialized functions and concepts. Kcats addresses these issues by offering a streamlined alternative. Originally conceived as a scripting language for a forthcoming messaging protocol, it’s useful for general programming as well.
Key features of kcats:
Simplicity: kcats emphasizes fewer, general-purpose tools instead of a complex array of specialized ones. Its syntax uses words and bracket quotation marks [ and ], and no other symbols. It uses a few simple programming concepts including stacks, lists, functions, and pipes.
Introspective: The documentation, examples, and even the entire state of a running program, are data that can be queried and processed with the language itself. Kcats is its own debugger.
Powerful and Versatile: Despite its simplicity, kcats is designed to be a powerful tool capable of handling a wide range of programming tasks. The tools programmers use in other languages are there, and built from simple primitives - closures, error handling, metaprogramming, multithreading, channels, generators, i/o, and serialization.
A Focus on Tooling: kcats intends to make tool development, including IDEs and debuggers, as easy as possible.
As this is the alpha release, we eagerly welcome all feedback, contributions, and constructive criticisms from the community. We’re especially interested in improving the documentation and learning experience.
Join us in exploring this new language and contribute to making programming more accessible to everyone. Your feedback is essential to making it intuitive and easy to use!
Please check out our docs and alpha release here: https://github.com/skyrod-vactai/kcats
Happy coding!
Best, Skyrod
Was intrigued by “no other symbols” than open and close bracket. Was curious how that would work while still being intuitive, so I looked at the examples. I’m now confused what you could have meant by that.
Just glancing through the example code I saw +,-,>,<,=, and ;. Like, at that point you’ve pretty much covered all the standard symbols. What “no other symbols” are there? Curly braces and pound signs?
And I’m not sure how beginner friendly this actually is, looking over the examples. Like, I feel like python is currently the “low bar beginner language” that you’re competing in that space with, and I don’t see what this is offering over that in terms of easiness.
Sure, python has more “functions you need to learn” I suppose, but if the answer to that is, “you don’t have to learn them in kcats because they don’t exist and you have to implement them yourself,” it seems like a detriment rather than a boon…
Maybe they meant core syntax? The other symbols are mostly operators that defined at a separate layer I’d guess. Definitely agree with you that it’s a strange claim to make given those are mandatory for any newcomer. I think they might be thinking in contrast to clojure or a similar lisp language given the syntax structure. Compared to the cluster fuck that is clojure this is symbol free and approachable.
Yes, exactly this - the language itself does not care about any symbols other than quotation marks. I admit I should have included the string delimiter ", I’ll update that.
It’s true that there are some standard library function names that have symbols in them, but the names are not part of the core language, you could easily alias them to something else and it would work just fine. In fact you could alias every function name to emoji if you want, the language doesn’t care. That was my point about lack of symbols.
Here are the symbols that have meaning in say, Java:
{ } - Denote code blocks (for classes, methods, loops, etc.). [ ] - Array indexing and declarations. " - Delimits strings. @ - Annotation indicator (e.g., @Override). ^ - Bitwise XOR operator. & - Bitwise AND, and logical AND (&&). ( ) - Surround method parameters and denote precedence. ! - Logical NOT. | - Bitwise OR, and logical OR (||). < > - Less than, greater than, and generics.
In kcats, it’s just [, ], and ". So 3 vs 14. It’s a real effect.
I get what you are saying about python but I respectfully disagree. There’s way less a beginner needs to learn to use kcats vs python. There’s way more for YOU to learn because kcats is very unfamiliar to most programmers so they are to a large degree starting over, vs a language that’s similar to one they already know. But put yourself in the shoes of a beginner and it’s a different story.
I am not talking about “functions you need to learn” - kcats’ tiny stdlib is not a “feature”, I’d rather it be extensive, I just don’t have the resources to make it that way, yet. I am talking about the core language.