The one thing that common to Rust programmers is that, if it's not written in Rust, it probably almost definitely should be. In the case of TVM, we can do this rather painlessly and incrementally since the "frontend" (i.e. bindings) made by @ehsanmok allow us to replicate the functionality of c++ TVM until the pure-Rust portion (currently a CPU-only static runtime) is feature complete.
The target for the next TVM release (0.6) will be (in order):
For those wondering "why even??," my main response would be that rust is more ergonomic than C++ (having powerful macros, a package manager, a sane standard library); safety is also nice to have but mostly for the runtime. In an ideal world, all of the boilerplate associated with creating new passes and operators is handled by a few proc_macros and some build.rs scripts--same with generating the python bindings (complete with docs; ref: #2328 (comment)).
The one thing that common to Rust programmers is that, if it's not written in Rust, it
probablyalmost definitely should be. In the case of TVM, we can do this rather painlessly and incrementally since the "frontend" (i.e. bindings) made by @ehsanmok allow us to replicate the functionality of c++ TVM until the pure-Rust portion (currently a CPU-only static runtime) is feature complete.The target for the next TVM release (0.6) will be (in order):
tvmnamespacecommon, remove tvm-syspacked_func,module,(DL)Tensorfailurecrate for errorsFor those wondering "why even??," my main response would be that rust is more ergonomic than C++ (having powerful macros, a package manager, a sane standard library); safety is also nice to have but mostly for the runtime. In an ideal world, all of the boilerplate associated with creating new passes and operators is handled by a few
proc_macros and somebuild.rsscripts--same with generating the python bindings (complete with docs; ref: #2328 (comment)).