CQCL / guppylang

Pythonic quantum-classical programming language
https://pypi.org/project/guppylang
Apache License 2.0
31 stars 2 forks source link

Compiler directives #567

Open ss2165 opened 2 days ago

ss2165 commented 2 days ago

Let's use this issue to collect ideas for compiler directives in guppy.

I propose using optional arguments to @guppy decorators to collect compiler directives.

Some will be directives for the guppy compiler, some will be passed down. Those passed down can be collected using reserved keys in hugr metadata. We could even opaquely include LLVM directives?

Examples:

@guppy(inline=True)
def foo(...):
    pass

# add order edges to preserve ordering between operations (what about nested operations?)
@guppy(preserve_order=True)
def bar(...):
   pass

# disallow non-unitary operations
@guppy(unitary=True)
def circ(qs: array<qubit>):
    pass

See #361

ss2165 commented 2 days ago

Also see #178