Hacker News new | ask | show | jobs
by tazjin 1019 days ago
I don't know C#, so maybe it has these, but it's unlikely:

- absence of null pointers

- proper sum types which can be statically checked for exhaustiveness

- statically controlled mutability (yes, borrow-checking is still useful if you have a GC!)

Also no exceptions, but that's not a type system feature.

1 comments

C# calls the first one "nullable reference types." When that build option is enabled, all types are non-nullable by default, and you can make them optionally nullable by declaring them like "MyClass? cls = null;"

The compiler will ensure you check for null before de-referencing a nullable type.

How does this interact with third-party dependencies you use? In my experience, most gradual typing things break down at that boundary.
This isn't gradual typing? If libraries are not compiled with the compiler option, then all their reference types will be deemed nullable and I need to check for null before dereferencing. I can't do something like "GetItem().Name" if "GetItem()" returns a reference type like I could in Java, GoLang, JS, etc. If that library did use the flag and was provably non-nullable, then I could.