What's Changed
- feat(sym): Enforce DType Checks in Constructors by @potatomashed in #46
 - fix(core): Fix DLPack Interface by @potatomashed in #47
 - chore(build): Exclude static library in pypi release by @potatomashed in #48
 - fix(core): Skip dataclass fields only when it starts with 
_mlc_by @potatomashed in #53 - feat(dataclass): Support 
frozen=Truein py_class by @potatomashed in #54 - feat(core): Support 
List|Dict.py()by @potatomashed in #55 - feat(core): Introduce 
Object.id_andObject.is_by @potatomashed in #57 - feat(core): Support freezing List/Dict by @potatomashed in #58
 - chore: Release AArch64 Wheels by @potatomashed in #60
 - chore(release): Add dependency to stage publish by @potatomashed in #61
 - feat(core): Add missing methods in mlc::core::List by @potatomashed in #63
 - fix(dataclasses): Add customized 
__str__method to registry by @potatomashed in #64 - feat(core): Dependency Graph by @potatomashed in #65
 - feat(printer): Print address for duplicated variable names by @potatomashed in #66
 - feat(dataclasses): Introduce 
mlc.dataclasses.stringifyby @potatomashed in #69 - feat(cython): Hide C++ stacktrace by default by @potatomashed in #70
 - feat(cython): Python Stable ABI Friendliness by @potatomashed in #72
 - feat(cython): ABI3 Compatibility Update by @potatomashed in #71
 - feat(core): Support 
eq_sandhash_sfor opaque objects by @potatomashed in #74 - feat(core): Support serialization of opaque objects by @potatomashed in #75
 - feat(core): Support deepcopy in opaque by @potatomashed in #76
 - fix(printer): Underscore at the end of the line by @potatomashed in #77
 
Full Changelog: v0.3.0...0.4.0