# C++ backend integration: unstructured and refactoring
###### tags: `functional cycle 11`
Appetite: Full cycle
Goal: if reasonable make most of the current tests work with the C++ backend
Developer: Rico + a new person?
Support: Peter/Hannes?
## Steps
1. finish the infrastructure & faster builder (PR in working state, cleanup + more tests required)
2. support unstructured domain
3. support additional argument types (tuples, IndexFields, ConstantFields, etc)
4. there may be more
## Rabbit holes
- Trying to anticipate additional future workflows in the infrastructure design is overkill, since it is lightweight and can be changed / extended easily. Example: branching workflows
- Trying to get caching right will probably be it's own project (or series thereof)
## Infrastructure
Where it sits in GT4Py:
```IR -> source -> python bindings -> compiled python module -> python function```
- end points can be chosen
- useful for external integrations, CLI etc
Usage snippet
```python=
workflow = Workflow.from_steps([
ir_to_src,
add_bindings_to_src,
make_compiler(
... # compiler flags, caching strategy etc
),
])
run_compiled_fencil = workflow((myfencil, *args, **kwargs))
run_compiled_fencil(*args)
```
How it works:
- each step takes only one argument (can be a tuple)
- any configuration for a step has to be done while constructing the workflow
- no branching in workflows implemented but could be considered in the future
- caching ideally implemented as a step(s), (not yet done)