Soba: Difference between revisions

From VRChat Wiki
Patroll (talk | contribs)
Add name origin trivia
Hackebein (talk | contribs)
c# feature table
 
(One intermediate revision by one other user not shown)
Line 6: Line 6:
==Overview==
==Overview==
Originally planned as ''"Udon 2"'', Soba was announced on November 25th, 2024 as the new title for the future of programming in VRChat worlds. Unlike Udon 2, Soba is planned to be usable alongside Udon rather than directly replacing it<ref>[https://ask.vrchat.com/t/on-udon-2-soba-and-why-we-changed-directions/28484 'On Udon 2, Soba and Why We Changed Directions'; retrieved December 16, 2024]</ref>.
Originally planned as ''"Udon 2"'', Soba was announced on November 25th, 2024 as the new title for the future of programming in VRChat worlds. Unlike Udon 2, Soba is planned to be usable alongside Udon rather than directly replacing it<ref>[https://ask.vrchat.com/t/on-udon-2-soba-and-why-we-changed-directions/28484 'On Udon 2, Soba and Why We Changed Directions'; retrieved December 16, 2024]</ref>.
As of March 2026, Soba is still being prepared for closed beta testing<ref name="roadmap-march-2026">[https://ask.vrchat.com/t/vrchat-creators-roadmap-march-2026/48077 'VRChat Creators Roadmap (March 2026)'] on ''[[ask.vrchat.com]]''. Dated March 19, 2026. Retrieved March 19, 2026.</ref>.
== C# language features ==
The following table compares C# 9.0 language feature support between [[UdonSharp]] and Soba, based on work-in-progress technical documentation shared in the March 2026 Creators Roadmap<ref name="roadmap-march-2026"/>. This list is subject to change.
{| class="wikitable mw-collapsible mw-collapsed"
|+ C# language feature support: UdonSharp vs Soba
! Category !! Feature !! UdonSharp !! Soba
|-
! rowspan="7" | Classes
| Defining behaviors || style="background:#9f9; color:#000" | Yes || style="background:#9f9; color:#000" | Yes
|-
| Defining non-behavior classes || style="background:#f99; color:#000" | No || style="background:#9f9; color:#000" | Yes
|-
| Defining abstract classes || style="background:#f99; color:#000" | No || style="background:#9f9; color:#000" | Yes
|-
| Defining sealed classes || style="background:#9f9; color:#000" | Yes || style="background:#9f9; color:#000" | Yes
|-
| Defining partial classes || style="background:#9f9; color:#000" | Yes || style="background:#9f9; color:#000" | Yes
|-
| Defining nested types || style="background:#f99; color:#000" | No || style="background:#9f9; color:#000" | Yes
|-
| Defining outside a file with the same name || style="background:#f99; color:#000" | No || style="background:#9f9; color:#000" | Yes
|-
! rowspan="1" | Structures
| Defining || style="background:#f99; color:#000" | No || style="background:#9f9; color:#000" | Yes
|-
! rowspan="2" | Interfaces
| Defining || style="background:#f99; color:#000" | No || style="background:#9f9; color:#000" | Yes
|-
| Implementing || style="background:#f99; color:#000" | No || style="background:#9f9; color:#000" | Yes
|-
! rowspan="2" | Type system
| Polymorphism || style="background:#9f9; color:#000" | Yes || style="background:#9f9; color:#000" | Yes
|-
| Value types & reference types || style="background:#9f9; color:#000" | Yes || style="background:#9f9; color:#000" | Yes
|-
! rowspan="3" | Generics
| Calling generic methods || style="background:#9f9; color:#000" | Yes || style="background:#9f9; color:#000" | Yes
|-
| Using generic types || style="background:#f99; color:#000" | No || style="background:#f99; color:#000" | No
|-
| Defining generic types || style="background:#f99; color:#000" | No || style="background:#f99; color:#000" | No
|-
! rowspan="15" | Methods
| Defining instance methods || style="background:#9f9; color:#000" | Yes || style="background:#9f9; color:#000" | Yes
|-
| Recursion || style="background:#ff9; color:#000" | Partial || style="background:#9f9; color:#000" | Yes
|-
| Defining static methods || style="background:#9f9; color:#000" | Yes || style="background:#9f9; color:#000" | Yes
|-
| Defining constructors || style="background:#f99; color:#000" | No || style="background:#9f9; color:#000" | Yes
|-
| Defining static constructors || style="background:#f99; color:#000" | No || style="background:#9f9; color:#000" | Yes
|-
| Defining properties || style="background:#9f9; color:#000" | Yes || style="background:#9f9; color:#000" | Yes
|-
| Defining indexers || style="background:#9f9; color:#000" | Yes || style="background:#9f9; color:#000" | Yes
|-
| <code>event</code> (not Unity/VRChat events) || style="background:#f99; color:#000" | No || style="background:#f99; color:#000" | No
|-
| Delegates || style="background:#f99; color:#000" | No || style="background:#f99; color:#000" | No
|-
| Lambdas || style="background:#f99; color:#000" | No || style="background:#f99; color:#000" | No
|-
| Nested functions || style="background:#f99; color:#000" | No || style="background:#9f9; color:#000" | Yes
|-
| Extension methods || style="background:#9f9; color:#000" | Yes || style="background:#9f9; color:#000" | Yes
|-
| Operator overloading || style="background:#f99; color:#000" | No || style="background:#9f9; color:#000" | Yes
|-
| Named and optional parameters || style="background:#9f9; color:#000" | Yes || style="background:#9f9; color:#000" | Yes
|-
| <code>ref</code> & <code>out</code> parameters || style="background:#9f9; color:#000" | Yes || style="background:#9f9; color:#000" | Yes
|-
! rowspan="6" | Control flow
| <code>if</code>/<code>else</code> || style="background:#9f9; color:#000" | Yes || style="background:#9f9; color:#000" | Yes
|-
| <code>switch</code> statements || style="background:#9f9; color:#000" | Yes || style="background:#9f9; color:#000" | Yes
|-
| <code>switch</code> expressions || style="background:#f99; color:#000" | No || style="background:#9f9; color:#000" | Yes
|-
| Pattern matching || style="background:#f99; color:#000" | No || style="background:#9f9; color:#000" | Yes
|-
| <code>for</code>, <code>while</code>, <code>do</code>...<code>while</code>, <code>foreach</code> || style="background:#9f9; color:#000" | Yes || style="background:#9f9; color:#000" | Yes
|-
| <code>goto</code> || style="background:#f99; color:#000" | No || style="background:#9f9; color:#000" | Yes
|-
! rowspan="5" | Operators
| Arithmetic, logical, bitwise, relational || style="background:#9f9; color:#000" | Yes || style="background:#9f9; color:#000" | Yes
|-
| Logical shift right (<code>>>></code>) || style="background:#f99; color:#000" | No || style="background:#9f9; color:#000" | Yes
|-
| Ternary, type-testing (<code>is</code>), casts || style="background:#9f9; color:#000" | Yes || style="background:#9f9; color:#000" | Yes
|-
| <code>as</code> cast || style="background:#f99; color:#000" | No || style="background:#9f9; color:#000" | Yes
|-
| Null-coalescing (<code>??</code>, <code>??=</code>), range (<code>x..y</code>) || style="background:#ff9; color:#000" | Partial || style="background:#9f9; color:#000" | Yes
|-
! rowspan="4" | Data types
| Integer and floating-point types || style="background:#9f9; color:#000" | Yes || style="background:#9f9; color:#000" | Yes
|-
| Arrays and non-generic collections || style="background:#9f9; color:#000" | Yes || style="background:#9f9; color:#000" | Yes
|-
| Anonymous types || style="background:#f99; color:#000" | No || style="background:#9f9; color:#000" | Yes
|-
| Generic collections, LINQ, tuples || style="background:#f99; color:#000" | No || style="background:#f99; color:#000" | No
|-
! rowspan="2" | Preprocessor
| Preprocessor directives and conditional compilation || style="background:#9f9; color:#000" | Yes || style="background:#9f9; color:#000" | Yes
|-
| Defining symbols || style="background:#9f9; color:#000" | Yes || style="background:#9f9; color:#000" | Yes
|-
! rowspan="2" | Name resolution
| Defining namespaces || style="background:#9f9; color:#000" | Yes || style="background:#9f9; color:#000" | Yes
|-
| <code>using</code> directives || style="background:#9f9; color:#000" | Yes || style="background:#9f9; color:#000" | Yes
|}


== Trivia ==
== Trivia ==
Line 12: Line 131:


==Official resources==
==Official resources==
* [https://feedback.vrchat.com/udon/p/udon-2 Soba feedback post] on ''feedback.vrchat.com''


==See also==
==See also==
Line 19: Line 139:
==References==
==References==
{{reflist}}
{{reflist}}
 
[[Category:Upcoming]]
[[Category:Stub]]
[[Category:Needs images]]
[[Category:Needs images]]

Latest revision as of 21:44, 19 March 2026

V · EThis is an official VRChat information page!
It is reviewed and approved by the VRCWiki Team. Learn how to contribute to this page by reading the Contribution Guide.
V · EUnreleased or beta content!
This content is currently unreleased or in beta, be aware it could change!
[Reason: No reason provided.]


V · EThis page is a stub.
You can help the VRChat Wiki by improving it.
[Reason: This article contains unreleased content! You can contribute, by expanding and proofreading, in accordance with the Manual of Style.]

Soba, originally referred to as "Udon 2", is an upcoming[1] high-level, object-oriented programming editor based on C# for the World SDK. It serves as the successor to Udon, with development of Udon 2 having been discontinued in favor of focusing on Soba.

Overview

Originally planned as "Udon 2", Soba was announced on November 25th, 2024 as the new title for the future of programming in VRChat worlds. Unlike Udon 2, Soba is planned to be usable alongside Udon rather than directly replacing it[2].

As of March 2026, Soba is still being prepared for closed beta testing[3].

C# language features

The following table compares C# 9.0 language feature support between UdonSharp and Soba, based on work-in-progress technical documentation shared in the March 2026 Creators Roadmap[3]. This list is subject to change.

C# language feature support: UdonSharp vs Soba
Category Feature UdonSharp Soba
Classes Defining behaviors Yes Yes
Defining non-behavior classes No Yes
Defining abstract classes No Yes
Defining sealed classes Yes Yes
Defining partial classes Yes Yes
Defining nested types No Yes
Defining outside a file with the same name No Yes
Structures Defining No Yes
Interfaces Defining No Yes
Implementing No Yes
Type system Polymorphism Yes Yes
Value types & reference types Yes Yes
Generics Calling generic methods Yes Yes
Using generic types No No
Defining generic types No No
Methods Defining instance methods Yes Yes
Recursion Partial Yes
Defining static methods Yes Yes
Defining constructors No Yes
Defining static constructors No Yes
Defining properties Yes Yes
Defining indexers Yes Yes
event (not Unity/VRChat events) No No
Delegates No No
Lambdas No No
Nested functions No Yes
Extension methods Yes Yes
Operator overloading No Yes
Named and optional parameters Yes Yes
ref & out parameters Yes Yes
Control flow if/else Yes Yes
switch statements Yes Yes
switch expressions No Yes
Pattern matching No Yes
for, while, do...while, foreach Yes Yes
goto No Yes
Operators Arithmetic, logical, bitwise, relational Yes Yes
Logical shift right (>>>) No Yes
Ternary, type-testing (is), casts Yes Yes
as cast No Yes
Null-coalescing (??, ??=), range (x..y) Partial Yes
Data types Integer and floating-point types Yes Yes
Arrays and non-generic collections Yes Yes
Anonymous types No Yes
Generic collections, LINQ, tuples No No
Preprocessor Preprocessor directives and conditional compilation Yes Yes
Defining symbols Yes Yes
Name resolution Defining namespaces Yes Yes
using directives Yes Yes

Trivia

  • "Soba", like its predecessor ("Udon"), is a type of noodle used in Japanese cuisine.

Official resources

See also

References