News for hackers. Stuff that matters.
Re:Removing Garbage Collection from the Rust Language (2013) by tazjin on Monday September 11, 2023 @07:29AM (#37465687)
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.

Re:Removing Garbage Collection from the Rust Language (2013) by seabrookmx on Monday September 11, 2023 @03:23PM (#37472409)
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.

Re:Removing Garbage Collection from the Rust Language (2013) by tazjin on Monday September 11, 2023 @05:57PM (#37474262)
How does this interact with third-party dependencies you use? In my experience, most gradual typing things break down at that boundary.
Re:Removing Garbage Collection from the Rust Language (2013) by seabrookmx on Tuesday September 12, 2023 @12:14PM (#37483511)
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.