# 3.0 changes
3.0 has many breaking and other qualify of life changes.
## Library name changes
Library name has changed from rad to **r4d**. This is due to a cargo
recommenation(or say warning) to separate library and binary names. Previously
the names were both rad.
## New rado binary for better experience
New binary rado is now included in procects. Rado's goal is to provide easier
way to edit and read macro files. You can edit a file as unprocessed form and
read a file as a processed form.
Refer [usage](./usage.md) for rado usage.
## "For" macro ergonomics
This was already possible with "for\_macro" feature. From 3.0 for macros
registers local macros named ```$:``` which can be invoked with ```$:()```.
Prevoiusly for macro replaced $: string with iterated values, which worked
pretty well but nested for loop was inconsistent. With newer implemenation,
local macro $: is executed according to local context thus enabled
consistent nested loop.
```
$forloop^($:() - \*$forloop($:(),1,5)*\$nl(),1,5)
===
1 - 12345
2 - 12345
3 - 12345
4 - 12345
5 - 12345
```
## Non-existent file input is an error
Previously rad binary automatcially expanded input argument as literal text
when the given input was not a valid file. Now this triggers errors and now
always needs explicit flag "literal" to interpret argument as literal text.
## Error behaviours ( Nopanic flag removed )
Previously error levels were divided into strict,lenient,purge,nopanic. However
logics in between was not consistent and made error logs unexpectable. From 3.0
nopanic flag is removed and purge or lenient will prevents panic from both
runtime and function macros.
There are misc changes to error loggings and strict panics, ETC.
## Macro execution order
Previously macro execution order was following,
- Deterred
- Local
- Runtime
- Function
From 3.0, macro execution order follows new rules
- Local
- Runtime
- Deterred
- Function
So that user can easily override deterred macros if they want.
## Feature simplification
Many features are now hidden from user, because those features were enabled by
other features anyway while making docs harder to read.
Some features such as csv or lipsum has been ditched in favor of other simpler
crates or pure in-built implemenation.
Storage has been merged to default r4d logic because it had very low overhead
and made code maintenance hard with litle gain. There is also a possbility to
add "hook" as default feature but it adds some overhead so not decidable at the
moment.
## Storage method signature changed
Previously storage accepted Vector of string, not it accepts array of string
(&[String]) for better compatibility;
## Many breaking macro changes
With 3.0, many macros' arguments order changed, some macros were removed and
some macros names' were changed.
The rational are follows
- Argument that can highly contains commas should come the last for usability
- Macro name that doesn't represent its behaviour should be changed to avoid
confusion
- Macros that are rarely used and are mostly a name "squashing" should be
removed
## Misc
There are also many miscellaneous changes. Such as
- Many new macros
- New rad feature
- Detailed documentation
- New library methods
- Bug fixes