https://t.co/cVpdxbAB6X
Getting agents to understand WinUI is important, we recognize that they are trained so much better for other libraries out of the box. With this new set of skills we are optimizing for creating the best UX as efficiently as possible with a coding agent!
Fun stuff, working on C# & Rust programming model for WinUI... very experimental, trying to do the development in the open. Would love feedback.
C#: https://t.co/vMjb3soqQm
Rust: https://t.co/Vdb9XW1gXg
@nkanauzu starting to work with the C# team on lang design issues, have 1 proposal live (factory initializers). I haven't hit any runtime issues (yet).
With Microsoft.UI.Reactor we ended up doing a diffing approach, for one primary reason - we wanted to start with the assumption of an unchanging language (C#) and desire for ergonomic programming. If you either compromise on these fine grained tracking may be better.
I fully expect we will change 100% of the API surface area in Reactor, moving from fluent to record creation, or even moving from diffing to dependency tracking.
https://t.co/vMjb3soqQm
For our experiment, we wanted to achieve two things; a ergonomic modern API that worked for humans and agents, and to authentically target WinUI (no new framework!).
SwiftUI exposes a fine grained programming model, React exposes a diffing solution. You can find a lots of examples on both sides of the fence. Each has pros and cons, typical workloads where one "wins" over the other (and different definition of win, of course).
Coarse grained diffing is where you generally let ignorant code run and then you compare the output of what it last produced and just produced, and then you make updates to some output (typically stateful DOM).
Fine grained is where you track dependencies and (ideally) they result. The system can deterministically say that if input I1 changes then we need to re-run functions F1, F3, and F8, which will change results R4.
@ySebp I tried field initializers, factory methods, record construction, etc... I've been talking with the C# team about what is the best pattern we can optimize in the language, syntactically and runtime. I'd be happy to try a few different ones, i'm not sold on the fluent design.
@ySebp Solid.js looks like it has the equivalent (const [count, setCount] = createSignal(0);, instead of useState)... and it looks like it ends up creating the DOM?
WinRT elements are relatively slow (compared to POCO), so optimizing there is very helpful.
@mountain_coding@dotMorten@wimbokkers We support AOT for the Reactor bits, there are some features (dynamic property grid, auto columns in datagrid) which don't work in AOT, but otherwise the system is functional (something like 90% of tests pass in AOT).
This doesn't make AOT better or worse