Hi Caleb, If I may add my humble opinion, it also looks a lot like the 'xtend programming language', which is less used than Groovy.
Best Sam Moulem On Sun, 24 Mar 2024 at 22:09, Paul King <pa...@asert.com.au> wrote: > Hi Caleb, what you are describing as your desired goal sounds alot > like Groovy to me. Can you elaborate on anything that you desire that > Groovy doesn't already give you? > > Thanks, Paul. > > On Mon, Mar 25, 2024 at 1:58 AM Caleb Brandt <calebbrand...@gmail.com> > wrote: > > > > I..... forgot to subscribe to this list first. :/ Please prune the > duplicate that's under moderation. > > > > Also, if this isn't the right place for this, please tell me where I > should send it. I don't want to come barging in ignoring the way you guys > do things. I'm just really excited to possibly work with you guys. > > > > > > On Sun, Mar 24, 2024, 10:38 AM Caleb Brandt <calebbrand...@gmail.com> > wrote: > >> > >> Hi all, > >> > >> I wanted to submit a new idea for this summer's GSoC. You should stick > around, because I trust you'll find this as interesting as I do. > >> > >> > >> Motivation: > >> > >> I know you made Groovy, but if you're anything like me, you love Java. > >> > >> I mean, how could you not: Java is unparalleled when it comes to > readability and structure while still being powerful. You can track data > flow through a program at a glance, there are a thousand easy-to-use and > intuitive libraries, and - as much as I love C++ - there aren't any > ambiguous operators, syntax that's only valid in one specific place, or > random macro usage in the main library functions. You know exactly what > something does just by looking at it, and that's still such a breath of > fresh air even in the modern programming space. These new languages try to > be as concise as possible for writing, but they sometimes forget that > people have to read the dang thing too, am I right? > >> > >> But... Java can also be a bit too verbose at times, can't it? We only > recently got a concise syntax for POJOs in the form of Records, and they > come with their own set of stipulations that make using them somewhat > niche. And that's not to mention the continued waiting for destructuring > declarations, the getters and setters left floating around in the class, > the endless if-elseif trees checking the same value against different > things that make it so hard to track... There are a few areas of > improvement; let's say that. > >> > >> Languages like Scala and Kotlin try to remedy this, but they end up > with their own problems like enforced programming models, completely > overhauled libraries that lose the intuitiveness of Java's, and just the > overall learning curve of being a completely different language. Same thing > with Groovy to a lesser extent: these languages are powerful, but they lose > the familiarity that comes with Java. > >> > >> What we need is the ability to just... add some stuff to Java, without > making people learn a whole new language to use it. > >> > >> > >> > >> So what if we did? > >> > >> Proposal: Add Some Stuff To Java > >> > >> Essentially, the plan is to make a set of > syntactically-sugary-delicious constructs that transpile to plain ol' Java > 8 source code, similar to how TypeScript's advanced features still compile > to ECMA2016. > >> > >> The core principles are zero overhead and improved readability; this > isn't remaking the wheel and constructing new libraries, this is just > adding shorthand for ubiquitous and consistent features that we wish we > could have saved time doing by hand. It's gotta feel like you're just > using a version of Java from the near future: no syntax weirdness, just > some extra intuitive constructs so it's easier both to write and to read. > >> > >> Things like: > >> > >> Getters and setters being part of the variable declaration, and being > called via the property name itself; > >> If/else-if trees that check the same variable against different things > being allowed to be in the form of a `switchif` statement, similar to > Kotlin's sequential switch statements; > >> Python-style "group imports" to save space and local renaming for > imported functions and classes, so people can still give their items > descriptive names without being forced to type the whole thing out every > single time they want to use it; > >> Kotlin-style `with` blocks for the convenience and readability of > "chaining" when chaining isn't an option; > >> The `as` keyword so you aren't forced to relearn lisp every time you > need to cast something multiple times; > >> Destructuring declarations using annotations instead of waiting for > pattern matching to come through > >> Operator overloading so we can do things like "accessing lists through > brackets" and "doing boolean algebra in a readable manner", again declared > using annotations so method names remain informative instead of letting > developers hide actual behavior inside a non-descriptive function name; > >> Extension functions for grouping utility methods with the classes that > use them; and > >> All syntactic sugar added since Java 8, now available for those of us > living in the past (and also a lot of the world, because they don't even > make a JRE for the latest version anymore) to use freely too. > >> > >> > >> This would be accomplished using a Gradle plugin as a preprocessor, > converting any J+ constructs to their Java 8 counterparts and then sending > the new source off to javac to be compiled, eliminating the need for > brittle ASM invocations to hook into the compiler directly, while still > having relatively-low added runtime. For the most part it would be simple > regex find-and-replace, avoiding any bytecode generation on purpose so the > end user can see exactly what their code is ending up as. > >> > >> If possible, I'd like to also add the ability to apply the > annotation-based parts - operators and destructuring - to preexisting > libraries too, using what's essentially a ".d.ts" file but for Java. This > would allow the convenience factor for advanced users without requiring it > of newer ones, but it's likely out of scope for this project. > >> > >> > >> To be honest, I'm just tired of having to keep track of my getters and > setters. If I can replace this: > >>> > >>> private String foo = "bar; > >>> > >>> public String getFoo() { > >>> > >>> return this.foo; > >>> > >>> } > >>> > >>> public void setFoo(String newVal) { > >>> > >>> this.foo = newVal; > >>> > >>> doOtherThing(); > >>> > >>> } > >> > >> > >> with this: > >>> > >>> String foo = "bar"; > >>> > >>> get() { > >>> return foo; > >>> } > >>> > >>> set(newVal) { > >>> foo = newVal; > >>> doOtherThing(); > >>> } > >> > >> while still being able to use my precious Java syntax? And all it > takes is banging my head against some regex for a couple hundred hours? > That sounds like a fair trade to me. > >> > >> I have a full plan formulated with a finalized process for every step, > but this is a "brief" overview of it. For the most part, I just > desperately need the input of people who are experienced with this area. > Even if you don't like this for GSoC, I would still love to chat about it > in the future, because I think it will make Java just a little bit better > for everyone. > >> > >> > >> > >> So, what do you think? Does this sound like a good proposal idea? Let > me know your thoughts in the replies; I look forward to your feedback, and > I happily await this being torn apart by people more knowledgeable in the > field than I. > >> > >> > >> Thank you so much for your time, > >> > >> Caleb Brandt > >> > >> > >> > >> > >> About Me: > >> I'm a hobbyist programmer and Fixer of Things: if I see something wrong > that I can fix, I might as well help out. The power of programming is that > if you solve a problem for yourself, you also solve it for every single > person who will ever live, which is why I admire open-source consortiums > such as you guys so greatly. You're everything I wanted to be when I grew > up, and I'm applying because you still represent the hallmark of what good > coding is to me: helping people do stuff better, just because you can. > >> > >> I'm finishing up my Bachelor's degree in Computer Science at the > University of Central Florida, and in my off-time I make compatibility mods > for Minecraft: optimizing interactions between other mods using Mixin (a > framework for ASM), reflectively exposing new APIs in mods for other > developers to use, bytecode-patching bugs in abandoned libraries, and > anything else I can do to make the ecosystem a bit better than how I found > it. I also attempt to fix any issues I encounter in open-source software; > I already spent the time tracking it down, I might as well take one more > step and fix it for everyone too. I just like to make helpful things, and I > >> >