Slang Feature matureness

The table below shows the matureness of each Slang feature.

There are four types of Status:

  • Stable: feature is stable and mature, and is documented by the language spec.

  • Public Review: feature is implemented and tested by the community, and is now under public review and ready to be marked as stable and become part of the language spec.

  • Experimental: feature is implemented and being tested by early adopters. Features in this stage are subject to change or removal at any time.

Feature

Status

Notes

Attributes and user defined attributes

Stable

Auto variable type inference

Stable

HLSL syntax

Stable

Some known gaps around specific intrinsics; templates intentionally left out

enum types

Stable

Extension

Stable

Intellisense

Stable

Modules (import)

Stable

Being widely adopted in many code bases and haven’t seen true quality issues reported for a long while. There are issues reported for quality of life improvements, but not about implementation defects.

Namespaces

Stable

Operator Overload

Stable

Optional

Stable

ParameterBlock

Stable

Properties

Stable

No issues found or reported in the last year. (this is to establish reference, many features not listed will fall in this category)

Raytracing

Stable

Reflection

Stable

User-defined operator[] (with multi parameter support)

Stable

Vulkan Interop (scalar layout, -fvk-* options)

Stable

Associated types for static dispatch

Experimental

Has been there for a long while with a lot of user code adoption

Autodiff (first-order)

Experimental

Adopted by many large scale code bases (3000+ lines of code), have not seen correctness issues for a long period. There are requests for unimplemented features. Improvements, enhancements and refactors are known and planned.

Autodiff (higher-order)

Experimental

Implemented and adopted in 2 different codebases. Known holes in design, and has not been widely adopted or exercised so its quality maybe significantly lower.

Builtin generic interfaces and operator overloads for generic code

Experimental

There isn’t bugs or quality issues, and a lot of user code is depending on this, but we don’t have good test coverage to build the confidence that it will provide good user experience.

Capabilities

Experimental

Implementation not done.

Capabilities

Experimental

Implementation not done.

GLSL Compatibility

Experimental

Lightly adopted in MKL’s mini examples, and a subset of CTS. Need more detailed scope and more time to test its quality.

Generic existential types

Experimental

Not being used or tested much

Generic existential types

Experimental

Not being used or tested much

Generic interface as generic constraints

Experimental

Not widely adopted, test coverage are not comprehensive but the basic feature works. Known limitations in implementation that we need to spec out for now.

Geometry Shader (spirv direct)

Experimental

Still seeing bug reports from time to time, but likely more mature than Mesh Shader due to the long time it exists

Link time specialization

Experimental

Adopted by one user library and tested with several user applications. No issues has been filed in last two weeks. There are known gaps in implementation but our users are not running into them.

Mesh Shader (spirv-direct)

Experimental

Still seeing bugs from time to time, not thoroughly tested.

Multi-entrypoint (spirv direct)

Experimental

Being adopted in many codebases including Valve’s, still seeing bug reports from time to time, need time to verify its quality

Multi-file Modules (__include)

Experimental

Implemented and tested with several different configurations. However, not fully tested with precompiled modules. No user code is adopting this feature.

Multi-file Modules (__include)

Experimental

Implemented and tested with several different configurations. However, not fully tested with precompiled modules. No user code is adopting this feature.

Non-generic Interface as generic constraints

Experimental

The basis of stdlib and widely adopted in user codebase. This is the most basic use of interface types and has been working well.

Non-generic existential types (dynamic dispatch)

Experimental

Nontrivial adoption, a lot of test coverage. But syntax around existential types may change.

Non-generic existential types (dynamic dispatch)

Experimental

Nontrivial adoption, a lot of test coverage. But syntax around existential types may change.

Non-generic existential types (static dispatch)

Experimental

Syntax around existential types may change.

Non-generic existential types (static dispatch)

Experimental

Syntax around existential types may change.

Obfuscation

Experimental

Implemented a long while ago and adopted by OV, not seeing bug reports but they may be broken with latest language developments and lack of sufficient testing, especially when used in tendum with precompiled modules and link time specialization.

Precompiled Modules (serialization / up-to-date-ness verification)

Experimental

Adopted by one user library and tested with serveral applications.

SPIRV Debug

Experimental

Bug rate stablized, and has been working well. But need more adoption or testing to receive a higher matureness rating.

SPIRV Pointers

Experimental

Adopted by many users, and address many corner case issues reported by the user. Related bug rate is converging to 0.

Uniformity Analysis

Experimental

Implemented the first version, tested with 2 unit tests, no actual user code exercising it, not thoroughly tested, unlikely to work out of box when it gets actual use but expected to mature within 2 weeks in close iteration loop with adopting users.

Uniformity Analysis

Experimental

Implemented the first version, tested with 2 unit tests, no actual user code exercising it, not thoroughly tested, unlikely to work out of box when it gets actual use but expected to mature within 2 weeks in close iteration loop with adopting users.

as and is operators

Experimental

reinterpret<T>

Experimental

{:.table}