15 ms·
> At the same time, neither QUIC nor HTTP/3 are included in the standard libraries of any major languages including Node.js, Go, Rust, Python or Ruby. .NET ac
by CharlieDigital 2y ago
> At the same time, neither QUIC nor HTTP/3 are included in the standard libraries of any major languages including Node.js, Go, Rust, Python or Ruby.
.NET actually looking like it has decent support for any teams that are interested[0] (side note: sad that .NET and C# are not considered "major"...). There is an open source C library that they've published that seems rather far along[1]
Support for Windows, Linux[2], and Mac[3] (the latter two with some caveats).
Overall, I think for most dev teams that are not building networking focused products/platforms, HTTP/3 is probably way down the stack of optimizations and things that they want to think about, especially if the libraries available have edge cases and are too early for production. Who wants to debug issues with low-level protocol implementations when there are features to ship, releases to stabilize, and defects to fix?
[0] https://learn.microsoft.com/en-us/dotnet/fundamentals/networking/quic/quic-overview https://learn.microsoft.com/en-us/dotnet/fundamentals/networ...
[1] https://github.com/microsoft/msquic https://github.com/microsoft/msquic
[2] https://learn.microsoft.com/en-us/dotnet/fundamentals/networking/quic/quic-overview#macos https://learn.microsoft.com/en-us/dotnet/fundamentals/networ...
[3] https://learn.microsoft.com/en-us/dotnet/fundamentals/networking/quic/quic-overview#macos https://learn.microsoft.com/en-us/dotnet/fundamentals/networ...
- hypeatei 2y ago> side note: sad that .NET and C# are not considered "major I've said it before on here, but the tech community severely underrates .NET today. It's not Windows only (and hasn't been for ~8 years) plus C# is a very nice language. F# is also an option for people who like functional languages. I'd highly recommend giving it a try if you haven't already.
- victor106 2y agoCan .net produce cross platform libraries/executables like Go does? With Go I can develop on Mac and create executables for windows and Linux
- CharlieDigital 2y agoYes, it can. I work on .NET and work on Mac (hate the OS, but the hardware and battery life are way better). Last startup, we shipped AWS t4g Arm64 and GCP x64 Linux containers. A few devs started on Windows (because of their preferred platform), but we all ended up on M1 MacBook Pros using a mix of Rider and VS Code. Common misconception between old .NET Framework and new .NET # (e.g. .NET 9) (MS terrible naming). C#/.NET has been capable of cross platform binaries for close to a decade? I have a bit more info here: https://typescript-is-like-csharp.chrlschn.dev/pages/intro-and-motivation.html#common-myths https://typescript-is-like-csharp.chrlschn.dev/pages/intro-a...
- pjc50 2y agoAre you sure? https://learn.microsoft.com/en-us/dotnet/core/deploying/native-aot/cross-compile https://learn.microsoft.com/en-us/dotnet/core/deploying/nati... "Since there's no standardized way to obtain native macOS SDK for use on Windows/Linux, or Windows SDK for use on Linux/macOS, or a Linux SDK for use on Windows/macOS, Native AOT does not support cross-OS compilation. Cross-OS compilation with Native AOT requires some form of emulation, like a virtual machine or Windows WSL." Now, you don't have to actually use AOT, the other deployment options are actually much easier to cross-build, but true cross build AOT is still not supported. (this comment is correct: https://news.ycombinator.com/item?id=43388962 https://news.ycombinator.com/item?id=43388962 ; runtime-dependent and self-contained are fine)
- CharlieDigital 2y ago> Native AOT does not support cross-OS compilation > ...runtime-dependent and self-contained are fine This certainly reads like you moved the goal posts and recognized it.
- bheadmaster 2y agoNative AOT compilation is definitely not the same as self-contained package. With that logic, every Docker container could be considered AOT compiled static executable.
- parineum 2y agoThey also severely underrate it's actual usage. For a non "major" language, there sure are a lot of jobs out there. .NET ain't hip.
- deleted 2y ago[deleted]
- briandear 2y ago.NET ain’t hip because many of the shops that use it are dinosaurs in processes and culture.
- mlhpdx 2y agoAnd many are not. How many Python shops are living in the past? It’s the same problem everywhere.
- realusername 2y agoI'd like this to be a lie but it's true, different languages have different cultures associated to them.
- shermantanktop 2y ago.NET suffers from the long lasting reputational taint of Microsoft. It was seen as the sworn enemy of open source and Linux, and for good reason. Today’s MS is not what it was back then. But long memories are not a bad thing, really. If .NET suffers a bit from some unfair perception, perhaps that can remind MS and others what happens when you take an aggressively adversarial approach.
- mixmastamyk 2y agoThey may be much less Linux-hostile today, but are still plenty user-hostile. Not to mention their lackadaisical security record.
- cebert 2y agoCan you please highlight some examples of .NET’s lackadaisical security record? I’m curious for my own awareness.
- mixmastamyk 2y agoMicrosoft's. Consult your favorite search engine.
- CharlieDigital 2y agoYou might be interested in GitHub's State of the Octoverse report from 2020 that had a section dedicated to security of popular languages, active open source projects on GH with those languages, and the package managers for those platforms. https://octoverse.github.com/2020/ https://octoverse.github.com/2020/
- mixmastamyk 2y agoMicrosoft's security record. Not one package manager. https://arstechnica.com/security/2024/01/microsoft-network-breached-through-password-spraying-by-russian-state-hackers/ https://arstechnica.com/security/2024/01/microsoft-network-b...
- arccy 2y agoIt wasn't good enough for the typescript rewrite...
- bjoli 2y agoMostly because they didnt consider the AOT compilation mature enough.
- int_19h 2y agoActually, the reason why they went with Go rather than C# is because they wanted to port the existing code as much as possible rather than rewriting from scratch. And it turns out that TS is syntactically and semantically much closer to Go, so you can often convert the former to the latter mechanically.
- CharlieDigital 2y ago> And it turns out that TS is syntactically and semantically much closer to Go, so you can often convert the former to the latter mechanically. Are there examples of this? I ask because I've been working on a Nest.js backend in TS and it's remarkably similar to C# .NET Web APIs (controllers, classes, DI). Really curious to see the translation from TS to Go.
- neonsunset 2y agoTSC codebase is quite unlike regular TypeScript code you will see out there. So it is about specific way TSC is written in being the easiest to port to Go rather than the TS language as a whole. There's a screenshot comparing the two side-by-side, IIRC it was showcased on the video of the talk (if someone has a timestamp - please post).
- CharlieDigital 2y agoGot it; thanks for the tip!
- shepherdjerred 2y agoWhy would I use C# over any other language though?
- CharlieDigital 2y agoIt's very productive and kinda nice. Especially for big backend APIs: https://typescript-is-like-csharp.chrlschn.dev/ https://typescript-is-like-csharp.chrlschn.dev/
- jayd16 2y agoC# has a strong high level feature set and lower level tools to keep performance up. The language itself is well designed and consistent. Its able to mix functional and OO features without being dogmatic, leading to better dev-x over all. ASP is actually very good these days and feels cleaner than Spring Boot. There's less choice but the available choices are good. It has arguably the best gRPC implementation. It's just a nice experience over all.
- deleted 2y ago[deleted]
- hu3 2y agoLINQ alone is unmatched.
- CharlieDigital 2y agoAddendum: having `Expression`[0] type representing the expression tree is a really killer feature. I've been doing a writeup comparing how ORMs work in TypeScript vs ORMs in .NET and one thing that is magical is that having the `Expression` type enables a much more functional and fluent experience with ORMs. [0] https://learn.microsoft.com/en-us/dotnet/csharp/advanced-topics/expression-trees/ https://learn.microsoft.com/en-us/dotnet/csharp/advanced-top...
- fireant 2y ago
- OkGoDoIt 2y agoI’ve been a .Net developer since it launched, but recently I find myself using it less and less. I’m so much more productive with LLM assistance and they aren’t very good at C#. (Seriously, I thought AI coding was all exaggeration until I switched to Python and realized what the hype was all about, these language models are just so much more optimized for python) Plus now Microsoft is being a bully when it comes to Cursor and the other VS Code forks, and won’t let the .net extensions work. I jumped through a lot of hoops but they keep finding ways to break it. I don’t want an adversarial relationship with my development stack. I miss C# and I really don’t like Python as a language, but I don’t see myself doing a lot more C# in the future if these trends continue.
- epolanski 2y agoHave you given C# a new try with Cursor and newer models? There's a huge difference from Copilot in 2023, if that was your example. Also, interesting you feel more productive on a language you don't even like than your "main" one.
- seunosewa 2y agoYou can use VS Code and cursor at the same time. One to code and the other to compile the code. That's how I build for Android. I generate code in Cursor/Windsurf then I compile and deploy using Android Studio.
- lmm 2y agoIt's not Windows only but it is Windows-first. Every few years I take a look but it still doesn't feel like a serious ecosystem for Linux development (in the same way that e.g. Perl might have a Windows release, but it doesn't feel really first-class). I can't think of a single .NET/C# program that people would typically run on Linux to even have the runtime installed, so no wonder people don't bother investigating the languages.
- CharlieDigital 2y agoDefinitely not Windows-first. Last startup we built our entire backend in .NET and C#. Every dev ended up using MacBooks. We shipped to AWS t4g Arm64 Linux targets. This mis-perception is so irrational and not based on any facts.
- LtWorf 2y agoJust because .NET is what you know best, doesn't necessarily mean it's the best in all use cases. You're seeming like the node developers trying to push js everywhere because it's all they know. It's not a very rational approach I think.
- CharlieDigital 2y agoI don't think I've ever said it was good for all use cases and probably said to the contrary. I write it very explicitly here[0]: > Should you use C# for web front-ends? > > We're only considering backends here; I do not think that .NET-based front-ends (e.g. Blazor) are competitive in all use cases. We are in a thread about...backend application servers. Most of my side projects are TS/JS and run serverless Node.js functions on the BE[1]. I don't choose favorites; I choose the right one for the job. [0] https://typescript-is-like-csharp.chrlschn.dev/pages/intro-and-motivation.html#a-bit-of-background https://typescript-is-like-csharp.chrlschn.dev/pages/intro-a... [1] https://github.com/CharlieDigital/coderev https://github.com/CharlieDigital/coderev
- LtWorf 2y ago
- inejge 2y ago> At the same time, neither QUIC nor HTTP/3 are included in the standard libraries of any major languages including Node.js, Go, Rust, Python or Ruby. .NET omission notwithstanding, one of the languages in the list is not like the others: Rust has a deliberately minimal standard library and doesn't include HTTP at all. I don't follow Rust HTTP/3 efforts closely, but there are at least two actively developed libraries: quiche and quinn.
- Macha 2y agoThe official Python stance on using the standard library HTTP client is also "are you sure?" and their stance on using the standard library HTTP server is "don't". https://docs.python.org/3/library/http.client.html#module-http.client https://docs.python.org/3/library/http.client.html#module-ht... https://docs.python.org/3/library/http.server.html#module-http.server https://docs.python.org/3/library/http.server.html#module-ht...
- xpressvideoz 2y ago> side note: sad that .NET and C# are not considered "major"... Even Microsoft does not use C# for their new projects. See the new TypeScript compiler that is being rewritten in Go. So I think it is safe to say C# is indeed a minor language.
- CharlieDigital 2y ago> So I think it is safe to say C# is indeed a minor language That's not really the case; StackOverflow survey[0] shows C# (27.1%) right behind Java (30.3%) and well ahead of Go (13.5%), Rust (12.6%), Kotlin (9.4%), Ruby (5.2%), and Scala (2.6%). If we exclude HTML/CSS, Bash/Shell, and SQL, C# would be #5 in actual languages used over the past year by devs in this survey. You get the same result from scraping job postings: https://www.devjobsscanner.com/blog/top-8-most-demanded-programming-languages/ https://www.devjobsscanner.com/blog/top-8-most-demanded-prog... 1. JS/TS (note these two are collapsed) 2. Python 3. Java 4. C# Two completely separate sources with the same output... > See the new TypeScript compiler that is being rewritten in Go If they had started from scratch, Anders mentioned the considerations would be different. But because they had an existing body of code that was not class based, it would be more of a re-write (C#) versus a refactor (Go). A lot of folks read the headline without actually reading Anders' comments and reasoning. C# is good for many things -- in particular application backends, game engines (both Godot and Unity) -- and not optimal for other things -- like serverless functions. Each language has a place and Go and Python are certainly better for CLI tools, for example. [0] https://survey.stackoverflow.co/2024/technology https://survey.stackoverflow.co/2024/technology
- 0x457 2y agoI never understood SO as a measurement tool for anything, but people that can't read docs.
- CharlieDigital 2y agoYou have to have some metrics from somewhere to be able to understand which languages are being used. SO is one data point, but there are certainly others.
- qingcharles 2y agoIndeed. And I would think you can use Microsoft's free reverse proxy, YARP, in front of an app (on any platform) that doesn't natively support HTTP/3? https://learn.microsoft.com/en-us/aspnet/core/fundamentals/servers/yarp/http3?view=aspnetcore-9.0 https://learn.microsoft.com/en-us/aspnet/core/fundamentals/s...
- o11c 2y agoUntil the dotnet packages are shipped in every major Linux distro's default repositories (it's okay if it's a 5-year-old version), we can't call C# a major language. But apparently there aren't enough people willing to actually do the work.
- ycombinatrix 2y agoKind of misleading - Rust stdlib doesn't include HTTP 1 or 2 either
- throwaway2037 2y ago> sad that .NET and C# are not considered "major"... No need to be sad about that list. Java is also missing. There must be millions of enterprise programmers in the world using Java. I just checked the Java class HttpClient (a common JDK11+ HTTP client). It currently does not support HTTP/3, so add one more to the list! Ref: https://docs.oracle.com/en/java/javase/24/docs/api/java.net.http/java/net/http/HttpClient.Version.html https://docs.oracle.com/en/java/javase/24/docs/api/java.net.... Also, most of the very best network clients are now built on top of NettyIO. I can see an "incubator codec" here: https://github.com/netty/netty-incubator-codec-http3 https://github.com/netty/netty-incubator-codec-http3 Holy hell, this code is ridiculously complex: https://github.com/netty/netty-incubator-codec-http3/tree/main/src/main/java/io/netty/incubator/codec/http3 https://github.com/netty/netty-incubator-codec-http3/tree/ma... I'm not hating on NettyIO here, but the protocol looks complex. Yet another reason why it is so slow to be deployed to more application frameworks.
- lmm 2y agoI don't think many people use the builtin HttpClient these days. Apache httpclient would be the conservative standard, apparentyl it has some support for 2 but not 3: https://hc.apache.org/httpcomponents-client-5.4.x/index.html https://hc.apache.org/httpcomponents-client-5.4.x/index.html .
- oaiey 2y agoThere is a very simple reason for not being on the list: It support HTTP/3 and the purpose of the post was to show the lack of support in common languages. .NET does not fit that list well. And it is obviously only popular in the dark matter of Enterprise Software Development.