I want to say Rust, but for some stuff it’s probably very overkill. I love it, but there’s a reason we don’t use CPP for everything. (WASM may change things here but IDK)
Swift would be an excellent candidate for the title of “simpler Rust,” but unfortunately it’s doomed to rot in Apple’s walled garden for all eternity.
Honestly, I would say TS (which I hate, but it’s indispensable for many things) or any JVM/NET language (Kotlin, C#, both are good)
Does it matter if it is overkill as long as it doesn’t slow you down too much.
I love it
Is a great reason to learn and use a language
which I hate
Is a great reason to avoid using it.
If you don’t enjoy the tools you use them you are going to be far less motivated to work on things. Which will kill off a lot of projects.
There are something that TS is better at, but there are also a lot of things that rust is better at. Each languages haves different strengths and weaknesses. IMO both rust and TS are both fine general purpose languages to learn. Personally I would pick rust for most things though and would definitely favour it if I could only learn one language.
Typescript. Runs everywhere. Very active community. It’s the modern day Java.
I don’t know I really hate when jumping to definitions in libraries, I often just land in the “typings” file. I also think that the type-system is often incoherent, has some weird side-effects and often leads to overengineering your typings… I just generally avoid Javascript based languages (which unfortunately is not really possible in frontend…)
Typescript has many shortcomings. About every language does. But it’s an undeniable very strong benefit that you can code the front and backend with it easily. It runs everywhere. It’s reasonably fast, for aws lambdas I found it had really good cold start time. I suspect because node is built on V8 which is highly optimized to get code running asap.
That accessibility and versatility makes it in my opinion the best general purpose language right now.
In backend I’m absolutely happy I can avoid it, there are more solid and more performant languages. I just can’t program in the style I want without loosing massive performance in java/typescript, like in a functional composable style, it results in a mass of allocations, I hate it (because it looks cleaner and is a better architecture IMHO). Rust does a much better job here… I’m also not a huge fan of the type-system, it’s super flexible, but has some incoherence, you tend to overengineer your types, no real ergonomic algebraic data types etc. It also has so many weird design decisions (e.g. prototypal inheritance) I don’t understand and don’t like…
I think Rust comes probably from the other direction, I can soon write my frontend in Rust without having much ergonomic loss (lets be honest, UI frameworks are currently more “solid(js)” in typescript than Rust, but I think that may change in the future…)
my opinion is a good language needs these qualities. Portable, Safe, Fast, Easy.
which seems to be similar to the author of the article. the language I have found to match the criteria the most is the D programming Language, its so mediocre in every area.
3 separate compilers, gcc llvm and mars backends. can be as safe as you want it to be, with constructs for purity, GC, and contracts built in. can be as fast as you want it to be it is a systems language and gives you all the necessary tools to go down to C level or below with a good in line assembly, but generally the idiomatic code is fast enough you dont need to go to the C level.
it is also very easy, you have a lot of C libraries and D libraries you can use and with a built in C compiler (currently beta) you can import C libraries easier, it also has a similar syntax to C so its very easy to rewrite C code in D, it has an optional GC so if you are going for max performance you can beta test algorithms quickly using the GC and when you are ready for max performance you can do it all manually, or you can use the feature to test what is using the GC so you can avoid the GC in loops, I did this in a game recently, I used the GC to setup all memory at the beginning and turned off the GC so I would never use it in a loop,
another nice feature is functional features that make the language cleaner to write. I dont think this approach of being perfectly mediocre is necessarily the best but at least on paper its very good, and in practice there have been companies (specifically Weka Digital) that swear by the approach, they can use one language for both testing out ideas and the final product. but again in a lot of cases you dont want a language that is good at everything you want one that is good for your use case.
also the article was very interesting, language design fascinates me and the article was a good read really enjoyed it. currently planning on learning Haskell and Zig soon should be fun to compare these once I am comfortable with them.
I so wish that D would have taken off :/
I used it at the time of the library split (there was a split in the community regarding the standard library, where Tango was the alternative). The compile time features of D were fantastic and they are still unmatched; as an example: For OpenGL (back then OpenGL 2.x) I could define the vertex attributes and had them checked at compile time when I started to fill the data with glMap! D templates and compile time code generation are on a whole new level, although it made tooling more difficult. If you know constexpr in C++, then this is nothing compared to what D has to offer.
yeah it has a really good blend of features, I think that it could have saved quite a few large companies a lot of money, as well, like facebook who keep re programming stuff, with D they could have used the same language and they would have very rarely re programmed anything, and when they did they would have been able to re use some code. so I am quite surprised it didnt catch on, but it did have a few problems, one being it got relatively popular too quick before it could mature. GC problems, and being too experimental, a very good language is hidden behind a lot of features.
Rust is my goto language today. It dips its toes into a bit of everything I like doing (webdev, cli apps, etc) and I feel comfortable with it. I haven’t found a project where Rust would hold me back yet, but I’m assuming I will eventually.
I’m assuming I will eventually.
I somewhat doubt that. To me, it feels like Rust has consistently been getting better and better over the years with no end in sight! That said, I would be interested to hear any differing opinions.
Nothing is going to be the best at everything. Been programming for a long time and it’s a general truism that every cool new thing comes with a real trade off. I just haven’t found Rust’s yet.
Maybe I get lucky and the trade off is just all the weird community drama.
No it’s not the best for everything (e.g. think about mental overhead, or sometimes syntactical overhead when programming in a very generic way, Haskell does a better job here IMHO), but it’s so good in most areas that it’s better IMHO to just stay in this one ecosystem for the entire stack (which I think is one of the main benefits of Rust, since tooling works so well…)
TypeScript has become my go-to general-purpose option. Between Node.js & the web you can build anything (and share code between all these different domains), the JS ecosystem is huge so there’s existing libraries & examples for everything, it gives you a good balance between productivity & performance (much faster to run than Python, much faster to write than Rust), and proper typing solves the rough edges of JavaScript without being so strict that you have to fight it.
I work with Kotlin, Rust, and Bash for various other specific things (e.g. Android apps, very low-level/high-performance code, and widely-compatible scripting) but 9 times out of 10 I’d reach for TypeScript if there isn’t a special reason.