Remove most unsafe code from identifier.rs
.
#271
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The old implementation, while being really efficient and fast, was very unsafe and had problems with miri's raw pointer tagging.
This rewrite does come at a performance cost (0.25ns -> 0.34ns in the prerelease parsing test), but I don't think that this will be noticeable anywhere.
The only remaining unsafe code is a
str::from_utf8_unchecked
to convert the inline array to astr
efficiently.I would understand it if you don't want to merge this because of the performance hit, but I'd still like to hear your opinion on it. Another alternative solution would be to put the whole inline pointer sized string into a new crate and use it.