Add symbol! macro for optimal compile-time Symbol creation
#1540
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Implements a new
symbol!macro that provides optimal Symbol creation by choosing the best approach at compile time, addressing the performance trade-offs identified in the Symbol::new implementation.Problem
The current
Symbol::newfunction optimistically tries to encode symbols asSymbolValfirst, which adds ~200 bytes of WASM instructions regardless of string length. For longer symbols that can't be encoded asSymbolVal, this optimization attempt is wasted overhead compared to directly using the host function (~58 bytes).Solution
Added a
symbol!macro that makes the optimal choice at compile time:Performance Benefits
symbol_short!Symbol::newsymbol!(new)Implementation Details
The macro leverages the existing
short_or_longfunction in soroban-sdk-macros:symbol_short!Symbol::newsymbol!(&env, "string")Backward Compatibility
This is a non-breaking addition:
Symbol::newcode continues working unchangedsymbol!macroTesting
Comprehensive test suite covering:
Fixes #1298.
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.