Hacker News new | ask | show | jobs
by bazoom42 635 days ago
IMHO C# is a very good, pragmatic language. It is not unique and groundbreaking like say Lisp, but it has a very well balanced set of features which makes is both productive and maintainable. It doesn’t have the level of boilerplate which make Java tedious, but its strong static type system makes it (IMHO) more maintainable than say Python for larger projects.
1 comments

I think C# is a perfectly fine language, but as you say it's not really groundbreaking or unique. It's probably not even my top-five choice for general purpose language in 2024 but it's obviously gotten (is still getting) "the job done". If we're to praise Anders Hejlsberg's work I would personally pick Typescript above C#. Just look at how influential Typescript has been for global development in the previous decade.
I disagree with C# not being groundbreaking or unique, at least to some extent. Yes, a big part of the language could be considered "vanilla object oriented", but that's not really a bad thing. These are some things that C# pioneered:

* 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 :-).

- Stuff like LINQ and Expression Trees are to be found in Lisps, Smalltalk and ML derived languages

- 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.

Currently posted .NET 9 articles talk mostly about platform-wide features and improvements, pretty much all of which equally benefit F#. Probably even more so when it comes to performance - I expect devirtualization and escape analysis improvements to impact F# to a greater extent than C#.

Language-specific articles are usually posted closer to the release date. Example: https://devblogs.microsoft.com/dotnet/announcing-fsharp-8/

Except that they haven't been shy about C# 13.

https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/cs...

The efforts on F# are a tragedy, instead of providing proper content, forward to blog posts that we all know eventually disappear from Microsoft blog history.

https://learn.microsoft.com/en-us/dotnet/fsharp/whats-new/fs...

That's just how F# team does things. There's no "single direction and decision" behind this - much less people work on F#, it's a much more community-driven language.

Personally, I see nothing wrong with it, because what matters most is how practical the language is when applied to solving a particular task, how well it integrates with the rest of the ecosystem, etc. On this front, I think F# does better than Scala or Clojure, or even Kotlin.

What it does need, I think, is better marketing around data science and machine learning domains - F# is a language which very well fits into this use case, and already has small but nice set of libraries like Diffsharp, and is being used by research labs in pharma sector (albeit on top of Fable, which I'm not a fan of).

You also need to remember that many C# features stabilize very late into release cycle. On one hand, posting about development early and actively brings more feedback, which is good, but it also may give a wrong impression, especially if a casual reader misses "this is early/experimental" disclaimers.

I don’t think C# has introduced any never-seen-before features. Usually they have been tried out in an experimental language before.

I belive Linq was prototyped in Haskell or at least based on experiments in Haskell.

What is your top 5?
I’d say the most important languages are Fortran, Algol, Lisp, and ML. All other general-purpose languages are just different combinations of features from these.

But best depend on the task at hand.

Didn't know I was in a museum ;D
Smalltalk or Simula
General purpose languages in 2024? Something on the JVM (I prefer Clojure), Rust, JavaScript (typically through Typescript), Erlang and Go.

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.

https://github.com/clasp-developers/clasp

> Common Lisp doesn't come with the ability to tap into the JVM

ABCL -> https://abcl.org

The Java interface for LispWorks : https://www.lispworks.com/documentation/lw80/lw/lw-java-ug.h...

I never understood HNs fascination with BEAM family. I feel like very few people people here actively use it for anything even remotely intensive - it simply has too much of a runtime bloat, as slow as Ruby in low concurrency tasks, and Erlang is often too unwieldy.

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.