> I feel physical pain as I say this, but most stuff should probably just be Java.
This has been on my mind a lot lately, causing similar anguish.
I'd note that, from what I hear, C# would also fit the bill, but be as unappealing to me.
I really wish that there was a language with the productivity, ecosystem and ergonomics of Python, with the speed and efficiency of Java and C# and a type system that increases productivity rather than word count.
Go seems... fine, but, I dunno, slightly regressive. I'll probably use it where performance and scaleability matter.
> I really wish that there was a language with the ~productivity~, ecosystem and ~ergonomics~ of Python, with the speed and efficiency of Java
That would be.. Java :D While I’m quite a big Java fan, for the other parts some other JVM language can easily fit the bill and you even get a choice. Scala, Kotlin, or maybe even Clojure if you don’t mind dynamic types.
Yeah maybe, I hear Java has improved markedly since my bad experiences with it (admittedly a long time ago now). I should swallow my distaste and give it a fair trial. From a distance it still looks somewhat verbose and unergonomic.
The others look like really really nice languages and I'd love to use Scala for a solo project.
However I guess I need something that's a) truly general purpose b) not going to scare away collaborators or potential hires c) going to be around for a long time d) not going to require evangilization at, say, a start-up.
Kotlin... I guess I'm wary of it being the new Coffescript - i.e. that it spurs Java into improving to such a degree that it removes the need for Kotlin in the first place.
And yes, having just spent a long time transitioning a project from JS to TS, I'm not sure I want to start anything serious without at least half-decent static typing - a major reason I'm looking for an alternative to Python, which is just not quite there.
For what it worths, Scala 3 is a really great language, it now even has a compiler option to exclude nulls, making you use something like `String | Null` to denote nullable values.
Yeah, from a purely personal point of view Scala 3, F# and, maybe, Elixir seem to offer the greatest promise of productivity, safety and expressiveness.
> Kotlin... I guess I'm wary of it being the new Coffescript - i.e. that it spurs Java into improving to such a degree that it removes the need for Kotlin in the first place.
I think that's unlikely. The key difference being that Coffeescript was always dependent on JavaScript because it compiled to JavaScript! Whereas Kotlin doesn't compile to Java, it compiles to JVM bytecode the same as Java does.
Java's gotten a lot better and maybe some day in the future I'll go back to general purpose java for server-side development, but there's enough velocity increase in Kotlin that I feel more and more productive. The real victory of the language IMHO is absolute null awareness (at least for largely Kotlin codebases). This makes any sort of nullability issue perfectly clear as long as you're not '!!' (null-safe opt out) everywhere like a lunatic (or as a newb when I started). Being able to seamlessly weave java and Kotlin in the same projects has made the slow iterative migration a lot simpler as well. All the same dev toolchains/ecosystems, just a different compiler plugin.
> I really wish that there was a language with the productivity, ecosystem and ergonomics of Python, with the speed and efficiency of Java and C# and a type system that increases productivity rather than word count.
>I really wish that there was a language with the productivity, ecosystem and ergonomics of Python, with the speed and efficiency of Java and C# and a type system that increases productivity rather than word count.
Nim has that except for the ecosystem. And it's also kind of janky, enough that I got so frustrated I stopped trying to use it. But you might have better luck than I did; check it out if you haven't.
Yeah I know lol, just trying to be honest. It's a genuinely fun language to work with; if it wasn't I wouldn't have put in so much time trying to make it work with the way I like to program. I still recommend you check it out, because people like to code in different ways, and it might fit your style of programming more than mine.
Iterators claim to be first-class but aren't. And "zero-cost" iterators that are only zero-cost if you don't value your own time spent debugging them. I've been able to crash the compiler when trying to write what in Python is idiomatic "itertools-y" code. And whenever I complain about this, someone pops up to recommend some third party iteration library. Which is part of the problem; I shouldn't need a third party library full of terrifying-looking macros just to write lazy iterators. They don't live up to what the docs promise, which is a real shame.
If they made iterators work how they seem they should work, I would come right back to Nim. It does so many things right but this one thing is a dealbreaker for me. The UFCS is practically begging me to chain lazy iterators together but actually trying it is like stepping on a rake.
What have you switched to from Nim? Have you gone back to Python and put up with the speed penalty or chosen something else?
Lazy iterators and generators are something I've missed in Rust. Haskell has them just by nature of everything being lazy and I love that. But I've become too familiar with Python, and unless runtime performance is a bottleneck, Haskell hasn't been the path of least resistance for most of my practical problems.
> What have you switched to from Nim? Have you gone back to Python and put up with the speed penalty or chosen something else?
Just Python and shell scripting. All this stuff is for hobbyist programming not my day job, so I just shelved the stuff that need performance and dusted off some projects that don't. I'm learning Rust at the minute but it's slower going, I'm not at the level where I can make the stuff I want.
I've been really enjoying Dart, I can write code slightly faster than in Python because of the type system and deep IDE support.
Unfortunately, when I use Dart, it's on Android, where the SAF exists, which kills my enjoyment, despite Android/Flutter otherwise being probably my favorite platform.
I really like Kotlin on the backend, it integrates nicely with Spring Boot, etc., but as soon as I say I have Kotlin experience, people say "Oh, so you're an android developer?"
I've never touched android development in my entire life.
Kotlin has its future assured thanks to godfather Google, stagnating Android Java on purpose (only recently they decided to finally move to Java 11 LTS subset), while promoting Koltin as its replacement for everything besides core platform.
This has been on my mind a lot lately, causing similar anguish.
I'd note that, from what I hear, C# would also fit the bill, but be as unappealing to me.
I really wish that there was a language with the productivity, ecosystem and ergonomics of Python, with the speed and efficiency of Java and C# and a type system that increases productivity rather than word count.
Go seems... fine, but, I dunno, slightly regressive. I'll probably use it where performance and scaleability matter.