Our great sponsors
-
zerosharp
Demo of the potential of C# for systems programming with the .NET native ahead-of-time compilation technology.
-
InfluxDB
Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
-
WorkOS
The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.
Background: I touched C# a little over 5 years ago writing ASP.NET MVC + jQuery apps and decided I hated it then.
About 6 months ago I had a side project where I took a C++ library and decided I'd try to translate it into every language that supports C/C++ Interop, to have a canonical "C Interop reference + comparison" repo for anyone interested
I found out that C# could do this, and started looking into how.
Long story short, it's now possible to use C# and .NET to directly interop with C/C++. Function Pointers, structs and all. You can publish a binary or static/dynamic library for any platform that's natively compiled -- zero dependencies.
It allows you to manually allocate memory and provide allocation strategies. Shit, you can even turn the GC off entirely (at this point the language is very barebones).
See ZeroSharp by same author:
https://github.com/MichalStrehovsky/zerosharp
So on top of this surprising viability for fairly low-level or native programming, it's also:
- Just generally good at everything/bad at nothing
- Blazingly performant, and getting faster consistently. Both at a language/computation level, and for things like web servers. ASP .NET Core Kestrel webserver has throughput only topped by a handful of Rust/C++ libs, and most recent preview included a new functional router API that increased throughout by +100,000rps.
- C# as a language is evolving rapidly and has already become a solid multi paradigm lang. Adopting features like pattern matching and lambdas. It has LINQ. It's actually pleasant to write now and doesn't always feel like verbose enterprise garbage.
- The tooling and ecosystem and C# and .NET are rivaled only by the JVM
There's more but that's off the top of my head.
Needless to say the last few months visiting C# and .NET land have changed my former opinion.
The author’s ZeroSharp project is also interesting. It shows how you can compile C# without any runtime. No garbage collection, no exceptions. You can perform stunts like make a 5KB Hello World or a EFI application that runs with no operating system:
https://github.com/MichalStrehovsky/zerosharp
I did a survey recently of binary sizes for .NET apps and comparisons to other languages. Things like NativeAOT (on which Bflat is built) and Graal Native Image let these languages get down to a binary size , startup speed, and deployment model similar that enjoyed by Go and Rust developers.
https://github.com/AustinWise/SmallestDotnetHelloWorlds
Also jellyfin, and I guess Emby which it was forked from
https://github.com/jellyfin/jellyfin
I believe license for the VScode C# plug-in prohibits using it with VScodium.
I didn’t know this until recently when someone pointed it out.
https://github.com/dotnet/core/issues/505
Of all the possible ways to handle toolchains on Linux, I'm quite happy with asdf[1]. I've successfully built stand-alone fsharp/csharp "Hello worlds" off of dotnet via asdf - but I've not used dot.net in anger.
I chiefly like asdf because I typically need at least two toolchains (with various versions for various projects) - eg ruby and nodejs, or python and nodejs.
https://asdf-vm.com/
https://github.com/emersonsoares/asdf-dotnet-core
Of all the possible ways to handle toolchains on Linux, I'm quite happy with asdf[1]. I've successfully built stand-alone fsharp/csharp "Hello worlds" off of dotnet via asdf - but I've not used dot.net in anger.
I chiefly like asdf because I typically need at least two toolchains (with various versions for various projects) - eg ruby and nodejs, or python and nodejs.
https://asdf-vm.com/
https://github.com/emersonsoares/asdf-dotnet-core