* Expression Trees and LINQ (still a pretty unique feature)
* async/await/yield syntax, adopted later by many others
* get/set property methods
* null coalescing (??) syntax
* extension methods and partial classes
Even if C# was not the originator of some of these, it definitely played a key role in popularizing them and offered a good reference syntax and semantics that others could draw inspiration from.
C# also has great synergy with the F# language which is so unique and innovative that it might seem 'alien' at times. :-) I think some of the C# features appeared in some form in F# first (citation needed :-).
- Kind of true on this one, although Active Objects, and various flavours of co-routines predate its use in Midori, which eventually lead to async/await design
- Already present in Eiffel and Delphi
- Eiffel among possible others
- Special case of languages that allow for generalised call operators, and Delphi and C++ Builder did partial before
F# currently is so relevant that apparently has zero content to show up on .NET 9 release notes.
Language-specific articles are usually posted closer to the release date. Example: https://devblogs.microsoft.com/dotnet/announcing-fsharp-8/
I belive Linq was prototyped in Haskell or at least based on experiments in Haskell.
But best depend on the task at hand.
If you had asked me a decade ago I would've said C# in place of the JVM, C/C++ in place of Rust and Python in place of Go. I think it would be perfectly reasonable to put C#, Python or even PHP on your top 5. I don't because I think they've been "outpaced" in usefulness by the JVM and Go. I know Go is a controversial opinion as Go is in many ways inferior to both C# and Python. The reason I place it higher is because I really dig some of the philosophies it comes with. I much prefer to work on code with explicit error handling and no cyclical package imports. This along with the focus on simplicity and how much you can do with just the standard library makes it very easy to write understandable (no magic) and maintainable code. It's one of the few languages where I can open a code file and immediately know what's going on almost regardless of who wrote it.
With that said, Clojure is my personal top language and I really hope I'll get time to pick up the "JavaScript" side of it so I can do all my Typescript work within Clojure. Haskell is too rigid for me and both it and Common Lisp doesn't come with the ability to tap into the JVM (which can be both a blessing and a curse). To be fair Lisp has Clasp which is much more powerful for some uses. I don't think you can ever really avoid C/C++ (Rust for safety) or Erlang in certain parts of our industry and I'm not sure they'll get real competition. Maybe if Zig manages to pick up a cult following like Rust has? The reason the JVM and it's languages rank so highly for me is in part because of its popularity. This may not be a good metric but I personally think real world application is a key factor for general purpose languages. Coupled with it's massive leap forward with it's recent updates it is simply a great platform in 2024.
ABCL -> https://abcl.org
The Java interface for LispWorks : https://www.lispworks.com/documentation/lw80/lw/lw-java-ug.h...
Go aside, it's as if everyone hates getting things done in a delightful way, which is why I find this top 5 leaning a bit too much towards the quadrant of PL elitism and historical status quo adherence at the same time. Not to mention the drawbacks of JVM, which is by all means a stagnating ecosystem, despite the work to catch up with the rest, it might be a little too late.