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

People seem very hurt that the creator of C# didn't pick C# for this very public project from a multi-trillion-dollar corp. I find it very refreshing, they defined logical requirements for what they wanted to do and chose Golang because it ticked more boxes than C#. This doesn't mean that C# sucks or that every C# project should switch to Golang, but there seems to be a very vocal minority affected by this logical decision.


My favorite benefit of Go over C# is that I don’t have to carry around a dotnet runtime to every service that touches my Typescript code.


Can't the CLR tools just output native binaries now?


Can it? That’s awesome.

Mostly these days I’m only aware of C# when it inconveniences me.


It even produces smaller binaries than Go and the size scales much better as the codebase grows too. dotnet has come a long way since the olden days of .net framework.

The reasons stated on github doesn't seem to be convincing imo.

- platform support

NativeAOT supports all platforms, the only one missing is Android which is marked experimental, but since they'd be treated as a "1st party" customer since they're both MS projects, this could be easily expedited. Even WASM is supported in NativeAOT using the LLVM toolchain and is often compared to perform better than Go's WASM target which doesn't use LLVM

- Usage of functions and structs

C# supports this, and you even have better control on layout and performance in this regard. Functions can easily be ported as static functions on static classes. They could even use F# which is even closer to Typescript if they wanted a more direct port as both languages compile to IL for NativeAOT.

There must be more reasons as to why it didn't choose C# in this regard, likely non-technical related. A missed opportunity imo.


I love their choice of Go because of how simple it is to generate a static executable with no dependencies (ie no dotnet runtime).


With C# you can either bundle dotnet runtime with the executable, or use native AOT, which compiles to a binary without the runtime.

However, in both native AOT and Go you actually have some parts of the runtime bundled in (e.g. garbage collector).




Consider applying for YC's Fall 2025 batch! Applications are open till Aug 4

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

Search: