Developer Update - 27 February 2025

Thanks for the heads up! This is correct, and we will make sure static constructor semantics work properly. As a side-note, Soba will have a proper versioning system - but we’ll have more on that later.

Field initializers that are not constant will not run at compile-time, but at a specific place during runtime. As an example, a class-field like string data = "test".ToUpper(); would behave differently: In U#, this would run "test".ToUpper() at compile time, and directly store “TEST” in the constructed program. In Soba, this will keep the full expression of "test".ToUpper() in the assembled program, and run the case-conversion in the loaded world in VRChat.

3 Likes