(Moved from #2981)

Proposal: add type signature metadata to PackedFunc

 Each `PackedFunc` would have an optional field describing what arguments it 
takes and what type it returns. This field would be automatically populated 
during conversion from a `TypedPackedFunc`.

Once we have these type signatures, we could use them to generate bindings in 
new languages (i.e., Rust) and get coverage of a good chunk of TVM's API for 
free.

This would result in much easier-to-maintain language bindings (not only for 
the runtime, for the compiler stack too) and might allow us to eventually rip 
out a lot of the manually-written stuff in e.g. the Python bindings.

The downside of this idea is that it would result in some fairly hairy codegen, 
which can be difficult to maintain. It would also add small amounts of overhead 
to the tvm runtime system; we could reduce that issue by adding a #define to 
disable the type metadata. Also, as @tqchen pointed out, the generated code 
might be lower-quality than handwritten bindings.

A few extensions of this idea:
- Add more compile-time metadata to the Node heirarchy, allowing codegen to 
access their methods / attributes.
- Add docstrings to PackedFuncs to allow auto-generation of documentation.
- Allow `std::variant` or equivalent in `TypedPackedFunc` signatures. Lots of 
PackedFuncs have arguments that can be one of a few types (e.g. Int or Expr); a 
simple extension to the PackedFunc system + runtime type system would allow 
these to be described automatically. 

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/dmlc/tvm/issues/2983

Reply via email to