Earlier quoted context omitted.
It‘s a source of problems with mismatched tabs/spaces being used for indentation between team members for fairly little upside. Imo it also makes moving blocks of code more cumbersome.
That's why you use an autoformatter. IMO the biggest downside is that it gets awkward to do closures and inline expressions and things like that. For example Python's `lambda` and if-else expression which are super weird and special snowflakey compared to the equivalents in e.g. Rust or OCaml or even Tcl. Maybe there's a way to do it nicely; I haven't thought about it too much.
Rhombus Language 1.0
71–80 of 115 posts
Re: Rhombus Language 1.0
#72"Modern programming languages reflect a consensus on the most important programming concepts, including lexically scoped variables, closures, objects, pattern matching, and type parametricity. Why, then, yet another programming language?"
I love this as a start. More programming languages need to start the conversation this way.
However, it whiffs after this when it fails to answer the question. Or at least fails to answer it in a way I understand. The next paragraph should not start with "Beyond the basics, there are still more good ideas for programming constructs than can fit in any one language specification." - cut straight to what the "programming constructs" are.
This section ends with "approachable" and "extensible". These are nothing. When considering the reasons for a language, look at the negation. Nobody writes a language to be "unapproachable"... well, unless you're on the esolang wiki, but that's not really what we're talking about here. Nobody really wants to stick "non-extensible" on their language either... where we all disagree is in the how one extends things. As someone reading this screen to decide if I'm interested these attributes mean nothing to me.
The page does get around to making it clear that there is a huge focus on macros, which is something, but it takes a while to get there.
That's a legitimate selling point. It's especially a selling point if you can explain clearly how this is different from just using Scheme directly. I have no idea if your language does this but I've long thought that it would be interesting to have a macro-focused language that went all-in on making them debuggable. Have the language compiler and runtime support dynamically exploring them, expanding them in your editor, re-contracting them, full debugging support, just go all-in on supporting that work flow. That would be an example of that sort of thing.
Re: Rhombus Language 1.0
#73Feedback: "Modern programming languages reflect a consensus on the most important programming concepts, including lexically scoped variables, closures, objects, pattern matching, and type parametricity. Why, then, yet another programming language?" I love this as a start. More programming languages need to start the conversation this way. However, it whiffs after this when it fails to answer the question. Or at least…
...and the Racket syntax-parse macro system: https://docs.racket-lang.org/syntax/stxparse.html
Re: Rhombus Language 1.0
#74I'd love to get a talk on this at the 2027 Carolina Code Conference (polyglot and cybersecurity). Call for Speakers will open in January. https://carolina.codes
Looks like a real conference - but the first thing you see is a large image of Rick Astley ?!
2023 - Don't Stop Believing
https://github.com/brightball/carolina-code-conf-lyrical-cha...
2024 - Bohemian Rhapsody
https://github.com/brightball/carolina-code-conf-lyrical-cha...
2025 - All Star
https://github.com/brightball/carolina-code-conf-lyrical-cha...
You can see the final version of the shirt here.
https://blog.carolina.codes/i/148154944/youre-an-all-star
We're a little low on PR's this year unfortunately though. I don't know if it's all the AI or something else but we usually have about a dozen entries by now and we've only got 2 for some reason this year.
Re: Rhombus Language 1.0
#75Feedback: "Modern programming languages reflect a consensus on the most important programming concepts, including lexically scoped variables, closures, objects, pattern matching, and type parametricity. Why, then, yet another programming language?" I love this as a start. More programming languages need to start the conversation this way. However, it whiffs after this when it fails to answer the question. Or at least…
And yet, unapproachable languages and non-extensible languages exist. More specifically, there are languages where approachability and extensibility formed no part of the design goals and it shows.
Re: Rhombus Language 1.0
#76How do I distribute my Rhombus programs? Can I cross compile to other architectures/OSs, ideally with a static binary?
What about libraries? Is there a good package manager? I presume from the post that the library ecosystem is pretty immature (maybe the Racket ecosystem is larger). Can I easily build a CRUD web app?
Is concurrency easy to make correct? Are tests easy to write? Tests involving concurrency? Race detection?
Dev experience: is it statically typed? I couldn't really tell from a quick search. Will the build system make a fast feedback loop for me and LLMs? Is it IDE friendly (auto complete, find all references, etc)? Is there language server support so I can bring my own editor? Will the macros mean I have to learn a bunch of DSLs to use anyone's library? Do the DSLs have IDE support?
Wow that's a lot of questions ;) It looks like a fun language in any case. And the fact that its even possible to make a Pythonic language on top of a LISP is its own showcase for Racket's power
Re: Rhombus Language 1.0
#77I was not very involved in this. I still prefer s-expressions. Anyway, my main initial concern was how to make good macros without s-expressions. There is a nice video by Matthew Flatt in RacketCon 2023. The first 6 minutes and 20 seconds are internal stuff, so skip to the 380s that I added in this link: https://www.youtube.com/watch?v=OLgEL4esYU0&t=380s He takes like another 6 minutes to explain the general idea and…
Then there is nothing special about having the brackets around. To start with, text can be just as readable:
( + 1 2 )
do plus 1 2 go
And one can use stack base syntax, or define a static default arity to infix notation, example two, so `times plus 1 2 3` is not ambiguous and is really clearly like (1+2)*3 with such a convention. Then you can shift arity with reserved word so `unary plus 1` is like `+1` or `arity 5 action one two three four`, or going back to explicit marker like `(` and `)` or `do` and `go` to group stuffs without explicitly quantified numbering.Re: Rhombus Language 1.0
#78I'm coming from Go, so apologies in advance if these questions seem a little weird: How do I distribute my Rhombus programs? Can I cross compile to other architectures/OSs, ideally with a static binary? What about libraries? Is there a good package manager? I presume from the post that the library ecosystem is pretty immature (maybe the Racket ecosystem is larger). Can I easily build a CRUD web app? Is concurrency ea…
You can compile them inside DrRacket and distribute the .exe or equivalent. I used that a few times to send programs written in Racket to coworkers that are not programmers (remember to add an icon so it looks professional).
You can use the command line too, and it support cross compiling, but I never used it https://docs.racket-lang.org/raco-cross/index.html
> What about libraries? Is there a good package manager? I presume from the post that the library ecosystem is pretty immature (maybe the Racket ecosystem is larger).
Some libraries have been ported to make them more idiomatic, in particular changing the name of the functions and fixing the different meaning of "list". Anyway, you can import any library of Racket from Rhombus and vice versa https://docs.racket-lang.org/rhombus-guide/Modules.html
> Can I easily build a CRUD web app?
Sorry, I never tried.
> Dev experience: is it statically typed? I couldn't really tell from a quick search.
It's optional. You can add statically types when you want and the code will be more efficient and get compile time errors. Or avoid them and get run time error.
> Will the build system make a fast feedback loop for me and LLMs?
Sorry, I never tried.
> Is it IDE friendly (auto complete, find all references, etc)? Is there language server support so I can bring my own editor?
auto complete: no (I think)
find all references: yes
> Will the macros mean I have to learn a bunch of DSLs to use anyone's library? Do the DSLs have IDE support?
Most macros try to blend with the language and be invisible, but it's possible to write weird and bad macros too. Most libraries should not define weird macros.
Anyway, some internal parts of Racket like `for` or `match` are implemented in Racket and are like two complete DSLs on their own.
Re: Rhombus Language 1.0
#79Earlier quoted context omitted.
> A lot of people hate sexprs In all my time I have never come across a single Lisper, neither in person nor online, and I know far more than a few dozens, who once grokked the REPL-driven workflow and the structural editing idioms only to later, for whatever reason, suddenly start disliking or even hating s-expressions. All that so-called "hatred" stems from unfamiliarity. People fuss about Lisps lacking static type…
I think if you believe that the aids types give for refactoring are equivalent to structural editing, then you are the one who might not get the value of typing information (I say this as a Python person, and am totally willing to accept lack of typing info in plenty of situations) REPLs are nice and good, but when you're working on large enough systems it's nice to have some static foundations for your facts.
I don't lack experience working with type systems, I have used over a dozen different PLs, some of them were weirdly unusual - I once even had to program in a language with all operators in Russian.
> when you're working on large enough system
I have built and supported sufficiently large systems in various languages, and have seen firsthand the trade-offs Lisp systems can bring. The holistic experience of using Clojure often can beat systems with advanced static types, but you probably won't ever notice it, because you'd first demand something to "believe" in.
You guys (replying to the comment) seem to be convinced of my one-sided bias for defending s-expression syntax and dying for it. I'm defending it only because it gets bad rap from people unfamiliar with the merits. REPL-driven workflow, live image, structural editing, homoiconicity, code-as-data - none of these require the surface syntax to be parens and Rhombus is the living proof. Structural editing operates on any AST. The actual jewel is homoiconicity, and sadly it gets largely ignored by the majority of programmers today. S-expressions probably are the simplest form of syntax to operate homoiconic entities - the simplest notation that is at once a fully explicit tree and directly the language's own data structure. "I love homoiconicity" does not uniquely entail "I love parentheses", alas, programmers off the bat hate parentheses, often without even attempting to understand their significance - they think it's "aesthetic choice". They don't even for a second look around and get curious for why people keep making new Lisp dialects, 70 years on.
Re: Rhombus Language 1.0
#80Earlier quoted context omitted.
> A lot of people hate sexprs In all my time I have never come across a single Lisper, neither in person nor online, and I know far more than a few dozens, who once grokked the REPL-driven workflow and the structural editing idioms only to later, for whatever reason, suddenly start disliking or even hating s-expressions. All that so-called "hatred" stems from unfamiliarity. People fuss about Lisps lacking static type…
> In all my time I have never come across a single Lisper, neither in person nor online, and I know far more than a few dozens, who once grokked the REPL-driven workflow and the structural editing idioms only to later, for whatever reason, suddenly start disliking or even hating s-expressions. And we've never seen bullet holes in these parts of the plane, so there's no point putting armour there.