"Every active component in Rye is a function (if, loop, for, fn, return, extends, context). No keywords, no special forms."
It should make the language much simpler than other languages.
The challenge of programming is dealing with copmplexity in code, and if the language takes away much of that complexity it should be a good thing.
Thanks, that comes from it's REBOL base ideas, but maybe it's even more pronounced in Rye where also operators are just "op-word" functions, and any function can be op-word/pipe-word (also the ones above if loop for ...).
That's a reasonably common feature in hobby languages, at least for basic flow control. I've seen it a few times before. You could say TCL works like this too in the most horrible way possible.
Rye as Rebol (that it derives from) doesn't use parenthesis in general. In Rebol you can use them optionally for explicitly defining evaluation priority. But not in the same form as in Algol based languages:
print(inc(x))
But like Lisps. I've used them when I wanted to be very certain about evaluation, but not in general.
(print(inc x))
In Rebol (or Rye) this is usually just:
print inc x
That's why all function in Rebol/Rye have fixed arity and yes, you generally have to know it or deduce it from the code, which is a minus.
Rye currently doesn't have parenthesis option, but it might get it at the end. It does have op and pipe words, an optional left to right flow, which can also better hint about the structure than pure polish notation of Rebol I think. For better of worse, these Rye expressions all do the same :) --
print inc x
print x .inc
x .inc .print
inc x |print
Ha, I'm the opposite. Every time I'm writing python I have to stop and think "is it response.json or response.json()?" And then I think about how Ruby (I think nicely) solved the attribute/method decision problem.
Q for Rye's author: Since Rye is heavily inspired by Rebol, I wonder if you had a chance to take a look at Red [1] and what are your thoughts about it. Red looks really cool and capable, but it feels so niche/obscure and has such a small community that feels unpractical to use.
I was/am a Rebol developer, and all Rebol developers know about Red as it was/is the next of Re(d|bol) languages, after we came to terms that the Rebol 3 which was about to concretely improve on Rebol 2, and be open source just won't happen.
Red also improved on Rebol 2 a lot and is a proper Rebol successor. It was started by a very productive and prominent Rebol developer, that I greatly appreciate. The only problem I see with it is that maybe they were too ambitious. They started with their own low level language (compiler) Red/system, and out of that built Red interpreter. They are really doing things as they should be done I think, but it's taking quite a lot of time.
Red, like in a way Rebol has a lot of focus on GUI and I needed a language for backend development. I was waiting for their "IO branch" for years, it was hard for me to contribute in a concrete way, since their approach was quite low level and at around 2018 started making a simple Rebol like interpreter in Go, because Go is great on the backend and I just wanted something that works, hence the higher level language than C/C++, that's now Rye.
Red is still moving forward, their community is mostly on gitter I think. It is small, but so was Rebol's and it's much bigger than Rye's, which doesn't really have a community yet :).
Cool because I'd like to think if someone made a Netflix tech drama loosely based around Bell Labs in the early 80's, this would language would appear in that series. A language created by some Nordic computer scientist who angrily shakes his fist at the world because it doesn't get adopted due to it's weird syntax. Of course instead we get Awk.
A similar language is Joker (https://github.com/candid82/joker), Go based, Clojure syntax. I've been using it for years as a general purpose scripting language and Clojure code linter and formatter - it's exceptional.
It doesn't integrate non-Joker Go code as far as I know.
I don't often get excited when I see a new language, but this is really neat! It's not just another lisp or forth variant, but seems to be in a class of its own (if anything it reminds me of smalltalk, but claims to not be object oriented). I'm quite interested to see where this project goes!
There are few conventions with Rye language. Variations of functions use \ character. Like. print , print\csv or read , read\lines ... these are separate functions, with similar goal, but most of the time different arguments.
There is a sub-convention that word\ just means like word(more), which usually means one (most obvious) additional argument. function `ls` lists current context and `ls\` accepts string, in this case "prin" and list all arguments that match it.
Rye (similar to Rebol) relies on multiple types of words to replace syntax (if that makes sense) and these types of words are denoted by specific characters at the start or the end usually.
.word is and op-word and takes first argument from the left
|word is a pipe-word and is similar to op-word, but with different priority (more on that you can see on the website)
'word is lit-word (literal-word) ... quoted word in lisp terms (I suspect)
? at the end is a convention for "get" ... so noun? would mean get-noun ... so height? is convention for get-height. This is temporary "in testing" convention but so far it seems to function OK.
Hint: the "interactive" demos are scrollable by dragging the bottom. (Sadly, you don't have any access to the terminal window's scrollbar, so you can't just scroll to the end of the "video.")
I still think a non-animated transcript of a terminal session is better.
Maybe that my wording is off. This are not interactive demos, but more like demos of interactive use in console ... "animated interaction demos". These use asciinema, which is a nice tool and I think it's good to display interesting interactions compactly. But yes, for deeper look it moves too fast for one, so something what you describe could be better. I could have these animations for getting attention and then linking to transcripted, detailed document. Do you have any example of a good way of displaying such console session statically?
Rye is Go based, and Go has a great number of well done libraries. Integrating Go libraries into Rye by hand is very simple and I was able to add plenty of them, at least at proof of concept level just on my own.
Rye-front is also an experiment of how you can externally extend Rye, by adding Rye to your code/library. In this case the main focus is Go GUI library Fyne.
Now a colleague is writing a tool that auto-generates Fyne bindings and has already made great progress (Fyne has couple of 1000 functions/structs/... If we will be able to generalize this to any Go library, this will be really exciting.
I know about Rye package manager since last year. I've made a rye(lang) blogspot and github repository in 2020. I try to use term ryelang in general so there is a distinction. Otherwise, what can I do. I have no spare name and reason to rename right now, at the end, a name is just a name ...
[+] [-] xyst|1 year ago|reply
Can’t wait for the “10 yeass of experience in Rye Lang [in 2026]” job posts from clueless recruiters
[+] [-] middayc|1 year ago|reply
[+] [-] galaxyLogic|1 year ago|reply
"Every active component in Rye is a function (if, loop, for, fn, return, extends, context). No keywords, no special forms."
It should make the language much simpler than other languages. The challenge of programming is dealing with copmplexity in code, and if the language takes away much of that complexity it should be a good thing.
[+] [-] middayc|1 year ago|reply
[+] [-] IshKebab|1 year ago|reply
[+] [-] cout|1 year ago|reply
[+] [-] bsder|1 year ago|reply
So, explain to me how that is a function and not a special form?
[+] [-] viraptor|1 year ago|reply
[+] [-] BiteCode_dev|1 year ago|reply
Every time I try to read a Ruby line with no (), I have to stop and think.
Not being able to scan code is an anti feature.
[+] [-] middayc|1 year ago|reply
Rye currently doesn't have parenthesis option, but it might get it at the end. It does have op and pipe words, an optional left to right flow, which can also better hint about the structure than pure polish notation of Rebol I think. For better of worse, these Rye expressions all do the same :) --
[+] [-] hahajk|1 year ago|reply
[+] [-] __MatrixMan__|1 year ago|reply
[+] [-] emmanueloga_|1 year ago|reply
--
1: https://www.red-lang.org/
[+] [-] middayc|1 year ago|reply
Red also improved on Rebol 2 a lot and is a proper Rebol successor. It was started by a very productive and prominent Rebol developer, that I greatly appreciate. The only problem I see with it is that maybe they were too ambitious. They started with their own low level language (compiler) Red/system, and out of that built Red interpreter. They are really doing things as they should be done I think, but it's taking quite a lot of time.
Red, like in a way Rebol has a lot of focus on GUI and I needed a language for backend development. I was waiting for their "IO branch" for years, it was hard for me to contribute in a concrete way, since their approach was quite low level and at around 2018 started making a simple Rebol like interpreter in Go, because Go is great on the backend and I just wanted something that works, hence the higher level language than C/C++, that's now Rye.
Red is still moving forward, their community is mostly on gitter I think. It is small, but so was Rebol's and it's much bigger than Rye's, which doesn't really have a community yet :).
[+] [-] pipeline_peak|1 year ago|reply
Cool because I'd like to think if someone made a Netflix tech drama loosely based around Bell Labs in the early 80's, this would language would appear in that series. A language created by some Nordic computer scientist who angrily shakes his fist at the world because it doesn't get adopted due to it's weird syntax. Of course instead we get Awk.
[+] [-] middayc|1 year ago|reply
Weird syntax might be just awesome syntax you don't yet know :)
[+] [-] lsh0|1 year ago|reply
It doesn't integrate non-Joker Go code as far as I know.
[+] [-] cout|1 year ago|reply
[+] [-] zX41ZdbW|1 year ago|reply
Subsequent examples are also not good:
- overloaded syntax of '.' and '?' characters; - unbalanced quotes; - unbalanced whitespace around the '|' characters.[+] [-] middayc|1 year ago|reply
There is a sub-convention that word\ just means like word(more), which usually means one (most obvious) additional argument. function `ls` lists current context and `ls\` accepts string, in this case "prin" and list all arguments that match it.
Rye (similar to Rebol) relies on multiple types of words to replace syntax (if that makes sense) and these types of words are denoted by specific characters at the start or the end usually.
.word is and op-word and takes first argument from the left |word is a pipe-word and is similar to op-word, but with different priority (more on that you can see on the website) 'word is lit-word (literal-word) ... quoted word in lisp terms (I suspect)
? at the end is a convention for "get" ... so noun? would mean get-noun ... so height? is convention for get-height. This is temporary "in testing" convention but so far it seems to function OK.
Thanks for your feedback.
[+] [-] skybrian|1 year ago|reply
I still think a non-animated transcript of a terminal session is better.
[+] [-] middayc|1 year ago|reply
[+] [-] ejstembler|1 year ago|reply
[+] [-] middayc|1 year ago|reply
Rye-front is also an experiment of how you can externally extend Rye, by adding Rye to your code/library. In this case the main focus is Go GUI library Fyne.
Now a colleague is writing a tool that auto-generates Fyne bindings and has already made great progress (Fyne has couple of 1000 functions/structs/... If we will be able to generalize this to any Go library, this will be really exciting.
[+] [-] lenkite|1 year ago|reply
[+] [-] middayc|1 year ago|reply
[+] [-] ConanRus|1 year ago|reply
[deleted]
[+] [-] ilyagr|1 year ago|reply
[+] [-] middayc|1 year ago|reply
[+] [-] alextremblay|1 year ago|reply
[+] [-] unknown|1 year ago|reply
[deleted]
[+] [-] mofoteam|1 year ago|reply
[deleted]
[+] [-] middayc|1 year ago|reply
[+] [-] xpe|1 year ago|reply