dconf dod parser is 20% slower thoery

monkyyy crazymonkyyy at gmail.com
Mon Jul 14 08:01:42 UTC 2025


https://www.youtube.com/watch?v=s_1OG9GwyOw

https://github.com/burner/Darser/blob/dbe6269aba4abce3b0c6ac07d00da6c86ee7c758/presentation/example.d#L150

```d
struct Parser {
	Document[] documents;
	Definitions[] definitionss;
	Definition[] definitions;
	OperationDefinition[] operationDefinitions;
	SelectionSet[] selectionSets;
	OperationType[] operationTypes;
	Selections[] selectionss;
	Selection[] selections;
	FragmentSpread[] fragmentSpreads;
	InlineFragment[] inlineFragments;
	Field[] fields;
	FieldName[] fieldNames;
	Arguments[] argumentss;
	ArgumentList[] argumentLists;
	Argument[] arguments;
	FragmentDefinition[] fragmentDefinitions;
	Directives[] directivess;
	Directive[] directives;
	VariableDefinitions[] variableDefinitionss;
	VariableDefinitionList[] variableDefinitionLists;
	VariableDefinition[] variableDefinitions;
	Variable[] variables;
	DefaultValue[] defaultValues;
	ValueOrVariable[] valueOrVariables;
	Value[] values;
	Type[] types;
```

this isnt quite right for soa

this is adding an extra layer of indirection

if you have some n^2 iteration lets say
```d
foreach(i;0..selections.length){
foreach(j;0..fields.length){
   ref selection()=>selections[i];
   ref field()=>fields[j];
   foo(selection,fields);
}}
```

The pointer math isnt being automagicly done *compile time* by 
the optimizer in the way this would:


```d
struct Parser(int length){
   Selection[length] selections;
   Field[length] fields;
   ...
```

(it cant be fully optimized at compile time 
selections[3].offset-fields[3].offset changes at runtime)

in the original code theres extra indirection, a bounds check 
that may not disappear(because *.length== all other *.length is 
not generteed), etc.

Ive gave up on aosoa, it probaly needs compiler support, but 
thats the thoery for a reason; I think lib level we should have a 
different target for making some bread and butter dod patterns


More information about the Digitalmars-d mailing list