}
```
2. **Breaking:** Generalize the REPL system
The current REPL is merely _usable_, but far from _user-friendly_. Mingling plans
to remove the `repl` feature in 0.5 and by default expose more execution-related
interfaces for the Program, so that users can extend functionality beyond the REPL
by leveraging Mingling's execution model.
3. **Breaking:** Remove the `parser` feature
In 0.3.0, Mingling introduced the `picker` feature, which provides more powerful
parameter parsing capabilities. At that point, the original `parser` feature became
inadequate. Mingling plans to completely remove it, which will directly affect
downstream users of the `parser` feature.
4. **Breaking:** Remove `with_dispatcher` and `with_dispatchers`
Mingling's commands must be registered through `with_dispatcher` in order to be usable
when `dispatcher_tree` is disabled. This has always been a strange semantic: `chain`,
`renderer`, `help`, `completion`, and `metadata` are all collected at compile time,
so why is `Dispatcher` the exception?
In fact, during my usage of `dispatcher` from 0.1.0 to 0.4.0, I have never encountered
a scenario where **dynamic registration** was necessary. I consider it unnecessary.
Therefore, I plan to make `Dispatcher` registration also compile-time collected in
non-`dispatcher_tree` states starting from 0.5.0.
5. **Breaking:** Modify the `dispatcher!` syntax
After completing item #4, `dispatcher!` will be simplified, because the `CMD*` struct will no longer need to be created
```rust
// Before
dispatcher!("command", CMDCommand => EntryCommand);
// After
dispatcher!("command", EntryCommand);
// NOTE: The implicit mode is not affected
```
6. **Feature:** Higher-level abstractions for the completion system
Mingling's completion system filled a number of behavioral gaps in 0.4 and fixed many
edge cases. It's now time to introduce more powerful higher-level abstractions.
First, this feature will add a set of utility functions to `ShellContext`, enabling a
smarter description of user state, rather than simply relying on manually identifying
user behavior through fields like `previous_word`.
Additionally, when the `picker` feature introduced in 0.3.0 is enabled together with
the `comp` feature, a module named `picker_comp` will be activated to enable more
completion behaviors.
7. **Feature:** Automated `dispatcher_tree` optimization decisions (under consideration)
After completing item #4, this Feature becomes implementable: Mingling can automatically
decide whether to use `dispatcher_tree` to optimize dispatch efficiency based on the current
number and depth of registered commands, so users no longer need to manually enable the
`dispatch_tree` feature.
Conditions: `dispatch_tree` has an advantage in cases where command depth is too high and
the number of commands is too large. However, if the number of commands is too small, the
increased CPU prediction failure rate will inevitably make it less efficient than linear
lookup; specifics need to be tuned during implementation.
Additionally, the issue where `pathf` + `dispatch_tree` must be explicitly specified in
`[build-dependencies]` will be resolved:
```toml
# Before
[build-dependencies.mingling]
version = "0.4.0"
features = [ "build", "pathf", "dispatch_tree" ] # `dispatch_tree` must be explicitly specified for `pathf` to recognize it
# After
[build-dependencies.mingling]
version = "0.4.0"
features = [ "build", "pathf" ] # No `dispatch_tree` feature; `pathf` no longer needs to consider its branches
```
Written by @Weicao-CatilGrass