Basedpyright is really good. I've been using it in neovim for a while. I'm currently evaluating ty. It is definitely not as good, but it is also really new.
I appreciate that we have good alternatives to pylance. While it is good, it being closed source is a travesty.
Unity, Godot, and the XNA successors (Monogame, FNA etc) all use it.
It's higher level and more productive for the average programmer than C++, but still has static typing and much more mature libraries than Lua and other dedicated game scripting languages (of which there used to be many).
A lot of game development is Windows centric, and many C++ game devs prefer Visual Studio (the full fat one, not VS Code). I'm guessing MS is seen more favourably in gaming circles than it is in web dev.
Windows and the Xbox are both tier 1 platform targets for game devs as well.
I install tailscale on my laptop. I then install tailscale on a desktop PC I have stashed in a closet at my parents. If they are both logged in to the same tailnet, I can access that desktop PC from my home without any addition network config (no port forwarding on my parents router, UPNP, etc. etc).
I like to think of it as a software defined LAN.
Wireguard is just the transport protocol but all the device management and clever firewall/NAT traversal stuff is the real special sauce.
Its not just idle, it is a bit more aggressive on cleaning up sooner after objects are de-referenced, meaning the OS gets the memory back sooner. Very useful in situation where you have many small containers/vm's running dotnet stuff, or on large applications where memory pressure is an issue and your usage pattern can benefit from memory releasing earlier.
In the old days you could tune IIS + Garbage collector manually to get similar behaviour but was usually not worth it. Time was better spent elsewhere to optimize other things in the pipe and live with the GC freezes. I suspect GC hickups should now be much smaller/shorter too, as the overall load will be lower with new GC.
That aggressive release behavior is exactly what we need more of most runtimes (looking at you legacy Java) just hoard the heap forever because they assume they are the only tenant on the server.
In C#'s dependency injector you basically have to choose from 3 lifetimes for a class/service: scoped, transient or singletons.
Scoped & transient lifetimes along with the new GC will make the runtime much leaner.
Some application are singleton heavy or misuse the MemoryCache (or wrap it as a singleton... facepalm) - these will still mess the GC situation up.
If you build web/api project it pays dividends to educate yourself on the 3 life times, how the GC works, how async/await/cancellation tokens/disposables work, how MemoryCache work (and when to go out-of-process / other machine aka Redis), how the built-in mechanisms in aspnet works to cache html outputs etc. A lot of developers just wing it and then wonder why they have memory issues.
And for for the dinosaurs: yes we can use the dependency injector in Windows Form, WPF, Console Apps and so on - those packages aren't limited to web projects alone.
That new .NET behavior is the goal smart runtimes that yield memory back to the OS so we don't have to play guess the request in YAML.
Unfortunately most legacy Java/Python workloads I see in the wild are doing the exact opposite: hoarding RAM just in case. Until the runtimes get smarter, we're stuck fixing the configs.
1. Generate slop music no _human_ will ever listen to
2. Use a botnet to "play" this music en masse
3. Profit
This is a whole arms race, with companies (such as Beatdapp) specializing in detecting fraudulent plays.
Source: I work for a niche music retailer that struggles with the same issues on a smaller scale.
reply