List<T>
Resizable generic sequence with indexing, enumeration, managed-element tracing, and collection initializer support.
VOID Libraries
The standard library is written in VOID, and project library output can now package your own VOID code as a native static archive with stable exported C entry points.
Standard library surface
The standard library uses VOID generics, interfaces, hashing/equality, enumeration, GC-managed references, and ordinary method binding. Collection initializer syntax lowers through normal Add(...) calls rather than a separate runtime path.
List<T>Resizable generic sequence with indexing, enumeration, managed-element tracing, and collection initializer support.
Queue<T>FIFO storage built as normal generic library code.
Stack<T>LIFO storage using the same generic/runtime model.
Dictionary<TKey,TValue>Generic hash lookup with resizing, removal, enumeration, and multi-argument collection initializer entries through Add(key, value).
HashSet<T>Generic set semantics using the dictionary-compatible hashing/equality model and collection initializer syntax.
IEnumerable<T> / IEnumerator<T>The shared iteration contract used by collections, foreach, and compiler-generated iterator state machines.
public static class MathApi
{
[Export("void_math_add")]
public static int Add(int left, int right)
{
return left + right;
}
}public static class MathNative
{
[Native("void_math_add")]
public static unsafe extern int Add(int left, int right);
}Project libraries
Set a project to "output": "library" and voidc build produces bin/lib<ProjectName>.a; publish produces the matching archive under publish/. Public static methods marked with [Export("symbol")] seed normal reachability, keep their stable native symbol, and reuse the existing scalar/string/pointer/native-struct and ref/out/in ABI. Library static initialization and managed static GC roots persist across repeated exported calls.
Initialization & GC
Arrays and collections can be populated inline, stored in initialized instance/static members, contain nullable or managed values, and remain reachable through managed static GC roots. The language-completion integration regression exercises these paths together rather than as isolated syntax tests.
Dictionary<string, int> scores = new()
{
{ "Alpha", 10 },
{ "Beta", 20 }
};
List<Node> nodes = new()
{
new Node(10),
new Node(20) { Score = default }
};