Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I'm most excited for records and `with`. This is a feature in C# I've been wanting for years and will really help make the use of immutable data throughout a system easier with a ton, and I mean a ton, less boilerplate.


Records are good, although in typical Microsoft style they've elected to call the new constructor syntax "positional" instead of "primary", and then subsequently failed to generalize the feature to normal classes.

With is just building on the anti-pattern where .NET programmers are too lazy to implement constructors.


> "With is just building on the anti-pattern where .NET programmers are too lazy to implement constructors."

What? And aren't records just a lazy way to make classes then?


The new with-expressions are a concession to the existence of initializers, which are themselves literally "stuff that should have been in the constructor" and are incompatible with immutability (hence the new init property hack).

The correct path would have been to require primary constructors for records as the only point of entry for data, declare initializers incompatible with primary constructors, and then just synthesize a method for creating copies - but hey, then you might as well just use Scala.


You seem to not appreciate the prqcticality of immutability in a large system.


Quite the opposite. My language of choice is Scala, which probably explains my frustration at Microsoft's consistent inability to do the right thing.


Speaking about the new records, it bothers me that the keyword in the class declaration is "data" but they call it "record". Why not just name it record? Or "value-data" or something more descriptive? Considering it's one of the biggest languages today, I'm assuming they have ton of people working on it, so I'm clearly missing something here. And why still call it a "class" in the code? Could just have been have keyword instead... So many questions


> it bothers me that the keyword in the class declaration is "data"

The keyword is the declaration is `record`. So you would write your record:

   record Person(string FirstName, string LastName);
Source: I am one of the language designers on C# :)


Huh, reading from https://devblogs.microsoft.com/dotnet/welcome-to-c-9-0/ which was the first hit on Google shows the following example:

    public data class Person(string FirstName, string LastName);
It seems https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csh... is saying what you wrote above though.

Seems my previous comment was based on outdated/wrong information, I'm sorry and thanks for clarifying :)

Edit: Seems the post I wrote was published 20th May (probably written before) and that was the same date someone said the same thing as my comment here in the discussion about the "records" feature https://github.com/dotnet/csharplang/issues/39#issuecomment-...


Here is a more recent update on records with the new syntax.

https://devblogs.microsoft.com/dotnet/announcing-net-5-0-rc-...


Ha, I don't know if you worked on this but I had hopes when I saw you'd gone back that maybe we'd finally see records. I'd been seeing your name on record proposals forever.


Is it data? It bothers me as well, but was not the latest blog post with the terminology record?


Shame 'with' will not apply to structs - all the ingredients are already there. Through it might be in the plan for some future release.


As I understand it, making structs implement the record stuff would potentially be...weird. But you're right, it'd be nice.




Consider applying for YC's Fall 2026 batch! Applications are open till July 27.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: