Admittedly I only scanned the article, but I didn't see any mention of C# or Blazor. I've only fiddled with it, but it seems that (when targeting WASM) Blazor loads a (partial) .NET runtime in WASM and then happily lets your execute C# code - which seems in stark contrast to the article's claims about GC.
That's so far the strategy. There are all sorts of garbage collected and interpreted things that run fine in wasm. But at the price of having to include a heavy runtime; which bloats the binaries. Not a showstopper for some things; like enterprise applications running in a fast network. But a bit of a blocker for normal websites.
Firefox and Chrome actually have support for the new GC and threading support in wasm. That's behind a few feature flags. But e.g. Kotlin's new wasm compiler depends on that and manages to ship binaries that are quite small. That compiler is also being used for a new experimental target for compose multiplatform, which is based on Google's Android Jetpack Compose and extends it to other platforms (IOS, Desktop, and Web). Web now comes in two variants: html & kotlin/js and canvas + wasm. The latter renders using the same graphics libraries used on Android and IOS but compiled to wasm. None of this stuff is ready yet because the tooling and frameworks are pre-alpha quality and it requires feature flags to be set by the user. But, this is starting to look like a nice alternative stack to things like flutter and react native for cross mobile, desktop, and web development.
The feature flags are likely coming off fairly soon. Safari is a bit behind. 2024 is going to be interesting. I'm guessing there will be a whole lot of activity around this in most commonly used languages and stacks.
> But at the price of having to include a heavy runtime; which bloats the binaries.
The other problem is that the "bring your own GC" model means if you use WASM in the browser, you end up having 2 garbage collectors for your program. And that makes sharing objects between javascript and the wasm bundle much more difficult & uglier. You essentially need to do manual memory management for any object thats shared across the wasm boundary to make sure its freed at the right time.
Having a unified GC means object references can be passed naturally from javascript to C# and back without any special code at the boundary.
> The latter renders using the same graphics libraries used on Android and IOS
That's annoying. I was hoping WASM would be a way to break out of the js/java/swift/ObjC stranglehold, not another baton to enforce such tyranny. It would be cool if they were targeting toolkits like QT instead.
What does one have to do with the other though? You can use any programming language where the compiler supports WASM output, and any cross-platform graphics library that also has a (Web)GL or WebGPU backend.
In the end, WASM running in browsers can only use browser features that are also available to Javascript, e.g. for rendering that would be canvas-2d, WebGL, WebGPU or the DOM). But at least WebGL and WebGPU are close enough to similar native 3D APIs that you can share some code between native ports and WASM running in browsers - but it still makes sense to use a higher level graphics libraries which abstracts over the 3D-API differences, or alternatively use wgpu.rs or libdawn in the native versions (which are the standalone native WebGPU libraries used by Firefox and Chrome).
QT makes more sense with languages like C++ or languages that don't have their own UI frameworks. The whole point of running something like C# and Kotlin is using the frameworks common for those languages.
The article first talks about difficulties a ship-your-own-GC faces, and enumerates workarounds for them (slide "GC and WebAssembly 1.0 (3)" and coupe of next ones).
Then it starts talking about the planned GC support extension in WebAssembly and decides to go with that.
Blazor isn't unique in that. At least some of the "non-mainstream" languages that the article mentions have WASM solutions. But, because they have to ship a non-trivial runtime as part of each app, they tend to suffer from the same kind of problems Blazor has, which is what the article was addressing.
The article addressed that in some detail. There's a number of downsides to implementing your own GC atop the linear memory, due to limitations in threading model, modular security requirements, etc. Meanwhile the browser has a very high performance GC sitting right there we could expose to WASM fairly easily. That's the basic idea of current efforts and what the article/talk is about.
Before WASM's GC feature was ready, it was basically "bring your own GC" which had to run entirely within the WASM context. With the new GC support in WASM, it's now possible to delegate garbage collection to the WASM runtime by exposing garbage-collected-references to the outside world (for instance in browsers that would be the JS engine garbage collector).
Maybe we read different articles? I thought the context was how it was hard to do GC in WASM currently, which is why we don't have many language choices. With that context, C# running on top of WASM seems pretty relevant?
Garbage collected languages have been running in WASM for a long time already, but they had to "bring their own garbage collector" to run in WASM, which increases the size of the WASM blob.
There are non-subscription alternatives, though they differ from lightroom. I quite like Exposure[0] and although I haven't used the desktop version of RAW Power[1] its ipad app is quite good.
Because photographs are most powerful as a store of/trigger for memories, and my photographs are better at that than someone else's, for the most part.
That's not my experience, and I've been writing C# since .NET 1.1. Obviously though it depends on the scale of the app. If you have 1m+ LoC, you really need to have some sort of structure, regardless of the language.
> Just for comparison, $180k would be out of range for anyone outside the US
I don't think it's too far off the mark for Australia. Mind you, that's gross. US$180 is about AU$280k. Of that, you'd pay around AU$100k in income tax (and then there's a 10% sales tax).
This is a good point. In practice, you need to acknowledge effort, ability and outcome. If you're thinking about areas of study or work, you really want to pick something you enjoy where you can produce quality outcomes and that almost always means ability + effort.
One of my kids basically sailed through his first 12 years of schooling on pure ability and zero effort. He's now learning the hard way that innate talent only gets you so far. His brother doesn't have the same innate academic ability, but is a natural grinder. He's finding the later years of schooling are easy to adapt to because he can pick things he's good at and knows how to put in the effort.
In terms of praise, we over-index on effort because it's a cross-cutting concern. This is especially true at younger ages where kids can't choose what they're studying. So if they get a C in French but maxed out all the effort criteria, I'm more than happy with that - and it's something for them to keep in mind when they're picking subjects later down the line.
Installing tiles requires more skill than asphalt.
In California, because of clumsy rules around workers compensation insurance, low-skilled high-risk labor is much cheaper than high-skilled labor. As a homebuilder explained it to me: if you hire actual roofers you have to pay very high insurance rates (roofing is quite dangerous). But if you hire day laborers and tell them to install the roof, you don't. So they prefer roof designs that day laborers can install.
Installing concrete tiles requires pretty much no skill. Anyone could do it after watching a 20 min youtube video. They literally just interlock and hold each other in place. You only need to nail down edge ones. A whole roof can be done in a day by 2 people - and most of the time is spend hauling the tiles to the roof - they're heavy!!
Florida has a lot of houses with tile roofs. I think Arizona, New Mexico, and Texas also have lots of places with tile roofs due to the Southwest aesthetic.
As an Australian who has moved to the USA, I don't know why it's done. I don't know a single person in Australia who has ever replaced their roof. My dad lives in the same house I was born in 40 years ago, same roof. I've been in Colorado for 4 years. We had a new roof put on 2 years ago, then another 6 weeks ago due to a bad hail storm.
A quick search suggests that it's because historically clay tile roofs didn't do well in environments that regularly drop below freezing (like Colorado). It sounds like newer materials can handle freezing weather fine, so our usage of asphalt probably is just a cultural habit at this point.
I did find it super weird the first time I heard of Americans using asphalt shingles. Everything over here is either corrugated steel (often powdercoated) or tiles, apart from some fancy upmarket properties with zinc roofs.
As child poster notes, the weight is a factor, and US houses uses wood frames for construction, where warmer parts may use brick construction. Can carry heavier roofs.
My house is wood frame, brick veneer. It was relatively cheaply built government housing back in the 40s/50s. It seems to have held up just fine with the weight of concrete tiles.
I had a neurologist tell me that the scans he'd performed proved that there was nothing wrong with my wife, and he didn't know why she was choosing to act as though she had a neurological issue.
In neurology at least, I think a lot of the problem is that everyone is hyper-specialized. Luckily for us, my wife's insurance company convinced a generalist neurologist to come out of retirement and examine her, which put us on the path to effective treatment. But yes, that whole experience completely soured me on blind trust in the medical profession
It's particularly bad when it comes to treating women.
Doctors tend to believe that female patients exaggerate pain in comparison to male patients, in accordance with stereotypes that portray men as "stoic" and women as "emotional". The bias is systemic, with female doctors often assuming the stereotype too[1].
You can trace this bias back through medical literature which (often subconsciously) reiterates these stereotypes[2]. It shows up in many statistics, such as the difference in wait times for analgesics: women reporting pain had to wait an average of 30% longer than men.[3]
But a key cause of the problem is worse than just assumption of stereotypes: it's that modern medicine still knows far more about men than it does women. For centuries, the primary medical research and literature was done by men, about men, for the treatment of men. Most of the clinical trials performed in the 20th century enrolled far fewer women than men, and often _none at all_.[4]
Of course, gender is not the only bias that shows up in medicine. Age, race, (dis)ability, body shape, and economic/social status are all useful factors to keep in mind when considering why certain people, even entire sectors of society, aren't getting the treatment they should.
I've added some custom instructions that have helped make chatgpt far more tolerable:
- When generating code, do not provide an explanation unless I ask you to.
- When generating code, prioritize brevity and performance.
- Do not apologize.
I find the responses much less sycophantic, even when not relating to code. I asked chatgpt about this:
> In general, your instructions guide me to provide responses that are succinct and focused on performance. They also signal your preference for direct communication without additional context or explanations unless specifically requested.