Some work on std::ascii - #9059

Closed
Kimundi wants to merge 1 commit into
rust-lang:masterfrom
Kimundi:master
Closed

Some work on std::ascii#9059
Kimundi wants to merge 1 commit into
rust-lang:masterfrom
Kimundi:master

Conversation

@Kimundi

Copy link
Copy Markdown
Contributor
  • Marked a unsafe helper function as unsafe, added a second helper function
  • Added moving implementations

Comment threadsrc/libstd/str/ascii.rs Outdated

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This might be cleaner if one converted the string to ~[u8] and just used .mut_iter(); rather than pointer dances.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be indeed, but the function I updated there used pointer arithmetic for what I assumed to be speed reasons. I don't really know how to test such things, so I left the basic structure of the function as is.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The iterators are designed to optimize very well (they use pointers arithmetic internally); so that gives you the benefit of no unsafe code and equal (or faster) speed.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I could just replace both str_map_bytes and str_copy_map_bytes with iterator chains if you think that would be better.

str_copy_map_bytes originally got introduced in #8231 under the name map_bytes. @SimonSapin: Any reason why you choose pointer arithmetic?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wasn’t aware of vec.mut_iter(). How do you get a mutable[u8] from a string?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In this case, I think string.into_bytes() to get a ~[u8] which can be placed into a mut slot. (And then str::from_bytes_owned() at the end.)

(And yes; I think keeping the amount of unsafe code as small as possible is a good goal: less code to audit, and if there is a bug found then it'll only need to be changed in one spot.)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you’d want str::raw::from_bytes_owned to avoid the UTF-8 check. (This is safe when the map only changes bytes in the ASCII range.)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay, gonna rewrite the functions to only use unsafe to circumvent the utf8 checks.

bors added a commit that referenced this pull request Sep 9, 2013
- Marked a unsafe helper function as unsafe, added a second helper function
- Added moving implementations
@borsbors closed this Sep 9, 2013
flip1995 pushed a commit to flip1995/rust that referenced this pull request Aug 14, 2023
…lexendoo
[`manual_retain`]: add lint case for `binary_heap`
Closesrust-lang#9059
This PR adds changes to perform linting on the `binary_heap` as well, under the [manual_retain rule](https://rust-lang.github.io/rust-clippy/master/index.html#/manual_retain).
changelog: [manual_retain]: update for lint `binary_heap`
U007D pushed a commit to U007D/rust-mos that referenced this pull request Aug 21, 2026
9059: fix: Only complete derive proc macros in `#[derive]` r=jonas-schievink a=jonas-schievink
HIR now gives them `MacroKind::Derive` instead of `MacroKind::ProcMacro`
bors r+
Co-authored-by: Jonas Schievink <jonasschievink@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@Kimundi@SimonSapin@huonw@bors
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Some work on std::ascii - #9059

Closed
Kimundi wants to merge 1 commit into
rust-lang:masterfrom
Kimundi:master
Closed

Some work on std::ascii#9059
Kimundi wants to merge 1 commit into
rust-lang:masterfrom
Kimundi:master

Conversation

@Kimundi

Copy link
Copy Markdown
Contributor
  • Marked a unsafe helper function as unsafe, added a second helper function
  • Added moving implementations

Comment threadsrc/libstd/str/ascii.rs Outdated

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This might be cleaner if one converted the string to ~[u8] and just used .mut_iter(); rather than pointer dances.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be indeed, but the function I updated there used pointer arithmetic for what I assumed to be speed reasons. I don't really know how to test such things, so I left the basic structure of the function as is.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The iterators are designed to optimize very well (they use pointers arithmetic internally); so that gives you the benefit of no unsafe code and equal (or faster) speed.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I could just replace both str_map_bytes and str_copy_map_bytes with iterator chains if you think that would be better.

str_copy_map_bytes originally got introduced in #8231 under the name map_bytes. @SimonSapin: Any reason why you choose pointer arithmetic?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wasn’t aware of vec.mut_iter(). How do you get a mutable[u8] from a string?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In this case, I think string.into_bytes() to get a ~[u8] which can be placed into a mut slot. (And then str::from_bytes_owned() at the end.)

(And yes; I think keeping the amount of unsafe code as small as possible is a good goal: less code to audit, and if there is a bug found then it'll only need to be changed in one spot.)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you’d want str::raw::from_bytes_owned to avoid the UTF-8 check. (This is safe when the map only changes bytes in the ASCII range.)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay, gonna rewrite the functions to only use unsafe to circumvent the utf8 checks.

bors added a commit that referenced this pull request Sep 9, 2013
- Marked a unsafe helper function as unsafe, added a second helper function
- Added moving implementations
@borsbors closed this Sep 9, 2013
flip1995 pushed a commit to flip1995/rust that referenced this pull request Aug 14, 2023
…lexendoo
[`manual_retain`]: add lint case for `binary_heap`
Closesrust-lang#9059
This PR adds changes to perform linting on the `binary_heap` as well, under the [manual_retain rule](https://rust-lang.github.io/rust-clippy/master/index.html#/manual_retain).
changelog: [manual_retain]: update for lint `binary_heap`
U007D pushed a commit to U007D/rust-mos that referenced this pull request Aug 21, 2026
9059: fix: Only complete derive proc macros in `#[derive]` r=jonas-schievink a=jonas-schievink
HIR now gives them `MacroKind::Derive` instead of `MacroKind::ProcMacro`
bors r+
Co-authored-by: Jonas Schievink <jonasschievink@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@Kimundi@SimonSapin@huonw@bors
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Some work on std::ascii - #9059

Closed
Kimundi wants to merge 1 commit into
rust-lang:masterfrom
Kimundi:master
Closed

Some work on std::ascii#9059
Kimundi wants to merge 1 commit into
rust-lang:masterfrom
Kimundi:master

Conversation

@Kimundi

Copy link
Copy Markdown
Contributor
  • Marked a unsafe helper function as unsafe, added a second helper function
  • Added moving implementations

Comment threadsrc/libstd/str/ascii.rs Outdated

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This might be cleaner if one converted the string to ~[u8] and just used .mut_iter(); rather than pointer dances.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be indeed, but the function I updated there used pointer arithmetic for what I assumed to be speed reasons. I don't really know how to test such things, so I left the basic structure of the function as is.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The iterators are designed to optimize very well (they use pointers arithmetic internally); so that gives you the benefit of no unsafe code and equal (or faster) speed.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I could just replace both str_map_bytes and str_copy_map_bytes with iterator chains if you think that would be better.

str_copy_map_bytes originally got introduced in #8231 under the name map_bytes. @SimonSapin: Any reason why you choose pointer arithmetic?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wasn’t aware of vec.mut_iter(). How do you get a mutable[u8] from a string?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In this case, I think string.into_bytes() to get a ~[u8] which can be placed into a mut slot. (And then str::from_bytes_owned() at the end.)

(And yes; I think keeping the amount of unsafe code as small as possible is a good goal: less code to audit, and if there is a bug found then it'll only need to be changed in one spot.)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you’d want str::raw::from_bytes_owned to avoid the UTF-8 check. (This is safe when the map only changes bytes in the ASCII range.)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay, gonna rewrite the functions to only use unsafe to circumvent the utf8 checks.

bors added a commit that referenced this pull request Sep 9, 2013
- Marked a unsafe helper function as unsafe, added a second helper function
- Added moving implementations
@borsbors closed this Sep 9, 2013
flip1995 pushed a commit to flip1995/rust that referenced this pull request Aug 14, 2023
…lexendoo
[`manual_retain`]: add lint case for `binary_heap`
Closesrust-lang#9059
This PR adds changes to perform linting on the `binary_heap` as well, under the [manual_retain rule](https://rust-lang.github.io/rust-clippy/master/index.html#/manual_retain).
changelog: [manual_retain]: update for lint `binary_heap`
U007D pushed a commit to U007D/rust-mos that referenced this pull request Aug 21, 2026
9059: fix: Only complete derive proc macros in `#[derive]` r=jonas-schievink a=jonas-schievink
HIR now gives them `MacroKind::Derive` instead of `MacroKind::ProcMacro`
bors r+
Co-authored-by: Jonas Schievink <jonasschievink@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@Kimundi@SimonSapin@huonw@bors
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Some work on std::ascii - #9059

Closed
Kimundi wants to merge 1 commit into
rust-lang:masterfrom
Kimundi:master
Closed

Some work on std::ascii#9059
Kimundi wants to merge 1 commit into
rust-lang:masterfrom
Kimundi:master

Conversation

@Kimundi

Copy link
Copy Markdown
Contributor
  • Marked a unsafe helper function as unsafe, added a second helper function
  • Added moving implementations

Comment threadsrc/libstd/str/ascii.rs Outdated

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This might be cleaner if one converted the string to ~[u8] and just used .mut_iter(); rather than pointer dances.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be indeed, but the function I updated there used pointer arithmetic for what I assumed to be speed reasons. I don't really know how to test such things, so I left the basic structure of the function as is.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The iterators are designed to optimize very well (they use pointers arithmetic internally); so that gives you the benefit of no unsafe code and equal (or faster) speed.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I could just replace both str_map_bytes and str_copy_map_bytes with iterator chains if you think that would be better.

str_copy_map_bytes originally got introduced in #8231 under the name map_bytes. @SimonSapin: Any reason why you choose pointer arithmetic?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wasn’t aware of vec.mut_iter(). How do you get a mutable[u8] from a string?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In this case, I think string.into_bytes() to get a ~[u8] which can be placed into a mut slot. (And then str::from_bytes_owned() at the end.)

(And yes; I think keeping the amount of unsafe code as small as possible is a good goal: less code to audit, and if there is a bug found then it'll only need to be changed in one spot.)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you’d want str::raw::from_bytes_owned to avoid the UTF-8 check. (This is safe when the map only changes bytes in the ASCII range.)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay, gonna rewrite the functions to only use unsafe to circumvent the utf8 checks.

bors added a commit that referenced this pull request Sep 9, 2013
- Marked a unsafe helper function as unsafe, added a second helper function
- Added moving implementations
@borsbors closed this Sep 9, 2013
flip1995 pushed a commit to flip1995/rust that referenced this pull request Aug 14, 2023
…lexendoo
[`manual_retain`]: add lint case for `binary_heap`
Closesrust-lang#9059
This PR adds changes to perform linting on the `binary_heap` as well, under the [manual_retain rule](https://rust-lang.github.io/rust-clippy/master/index.html#/manual_retain).
changelog: [manual_retain]: update for lint `binary_heap`
U007D pushed a commit to U007D/rust-mos that referenced this pull request Aug 21, 2026
9059: fix: Only complete derive proc macros in `#[derive]` r=jonas-schievink a=jonas-schievink
HIR now gives them `MacroKind::Derive` instead of `MacroKind::ProcMacro`
bors r+
Co-authored-by: Jonas Schievink <jonasschievink@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@Kimundi@SimonSapin@huonw@bors
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Some work on std::ascii - #9059

Closed
Kimundi wants to merge 1 commit into
rust-lang:masterfrom
Kimundi:master
Closed

Some work on std::ascii#9059
Kimundi wants to merge 1 commit into
rust-lang:masterfrom
Kimundi:master

Conversation

@Kimundi

Copy link
Copy Markdown
Contributor
  • Marked a unsafe helper function as unsafe, added a second helper function
  • Added moving implementations

Comment threadsrc/libstd/str/ascii.rs Outdated

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This might be cleaner if one converted the string to ~[u8] and just used .mut_iter(); rather than pointer dances.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be indeed, but the function I updated there used pointer arithmetic for what I assumed to be speed reasons. I don't really know how to test such things, so I left the basic structure of the function as is.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The iterators are designed to optimize very well (they use pointers arithmetic internally); so that gives you the benefit of no unsafe code and equal (or faster) speed.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I could just replace both str_map_bytes and str_copy_map_bytes with iterator chains if you think that would be better.

str_copy_map_bytes originally got introduced in #8231 under the name map_bytes. @SimonSapin: Any reason why you choose pointer arithmetic?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wasn’t aware of vec.mut_iter(). How do you get a mutable[u8] from a string?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In this case, I think string.into_bytes() to get a ~[u8] which can be placed into a mut slot. (And then str::from_bytes_owned() at the end.)

(And yes; I think keeping the amount of unsafe code as small as possible is a good goal: less code to audit, and if there is a bug found then it'll only need to be changed in one spot.)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you’d want str::raw::from_bytes_owned to avoid the UTF-8 check. (This is safe when the map only changes bytes in the ASCII range.)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay, gonna rewrite the functions to only use unsafe to circumvent the utf8 checks.

bors added a commit that referenced this pull request Sep 9, 2013
- Marked a unsafe helper function as unsafe, added a second helper function
- Added moving implementations
@borsbors closed this Sep 9, 2013
flip1995 pushed a commit to flip1995/rust that referenced this pull request Aug 14, 2023
…lexendoo
[`manual_retain`]: add lint case for `binary_heap`
Closesrust-lang#9059
This PR adds changes to perform linting on the `binary_heap` as well, under the [manual_retain rule](https://rust-lang.github.io/rust-clippy/master/index.html#/manual_retain).
changelog: [manual_retain]: update for lint `binary_heap`
U007D pushed a commit to U007D/rust-mos that referenced this pull request Aug 21, 2026
9059: fix: Only complete derive proc macros in `#[derive]` r=jonas-schievink a=jonas-schievink
HIR now gives them `MacroKind::Derive` instead of `MacroKind::ProcMacro`
bors r+
Co-authored-by: Jonas Schievink <jonasschievink@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@Kimundi@SimonSapin@huonw@bors
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Some work on std::ascii - #9059

Closed
Kimundi wants to merge 1 commit into
rust-lang:masterfrom
Kimundi:master
Closed

Some work on std::ascii#9059
Kimundi wants to merge 1 commit into
rust-lang:masterfrom
Kimundi:master

Conversation

@Kimundi

Copy link
Copy Markdown
Contributor
  • Marked a unsafe helper function as unsafe, added a second helper function
  • Added moving implementations

Comment threadsrc/libstd/str/ascii.rs Outdated

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This might be cleaner if one converted the string to ~[u8] and just used .mut_iter(); rather than pointer dances.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be indeed, but the function I updated there used pointer arithmetic for what I assumed to be speed reasons. I don't really know how to test such things, so I left the basic structure of the function as is.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The iterators are designed to optimize very well (they use pointers arithmetic internally); so that gives you the benefit of no unsafe code and equal (or faster) speed.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I could just replace both str_map_bytes and str_copy_map_bytes with iterator chains if you think that would be better.

str_copy_map_bytes originally got introduced in #8231 under the name map_bytes. @SimonSapin: Any reason why you choose pointer arithmetic?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wasn’t aware of vec.mut_iter(). How do you get a mutable[u8] from a string?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In this case, I think string.into_bytes() to get a ~[u8] which can be placed into a mut slot. (And then str::from_bytes_owned() at the end.)

(And yes; I think keeping the amount of unsafe code as small as possible is a good goal: less code to audit, and if there is a bug found then it'll only need to be changed in one spot.)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you’d want str::raw::from_bytes_owned to avoid the UTF-8 check. (This is safe when the map only changes bytes in the ASCII range.)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay, gonna rewrite the functions to only use unsafe to circumvent the utf8 checks.

bors added a commit that referenced this pull request Sep 9, 2013
- Marked a unsafe helper function as unsafe, added a second helper function
- Added moving implementations
@borsbors closed this Sep 9, 2013
flip1995 pushed a commit to flip1995/rust that referenced this pull request Aug 14, 2023
…lexendoo
[`manual_retain`]: add lint case for `binary_heap`
Closesrust-lang#9059
This PR adds changes to perform linting on the `binary_heap` as well, under the [manual_retain rule](https://rust-lang.github.io/rust-clippy/master/index.html#/manual_retain).
changelog: [manual_retain]: update for lint `binary_heap`
U007D pushed a commit to U007D/rust-mos that referenced this pull request Aug 21, 2026
9059: fix: Only complete derive proc macros in `#[derive]` r=jonas-schievink a=jonas-schievink
HIR now gives them `MacroKind::Derive` instead of `MacroKind::ProcMacro`
bors r+
Co-authored-by: Jonas Schievink <jonasschievink@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@Kimundi@SimonSapin@huonw@bors
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Some work on std::ascii - #9059

Closed
Kimundi wants to merge 1 commit into
rust-lang:masterfrom
Kimundi:master
Closed

Some work on std::ascii#9059
Kimundi wants to merge 1 commit into
rust-lang:masterfrom
Kimundi:master

Conversation

@Kimundi

Copy link
Copy Markdown
Contributor
  • Marked a unsafe helper function as unsafe, added a second helper function
  • Added moving implementations

Comment threadsrc/libstd/str/ascii.rs Outdated

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This might be cleaner if one converted the string to ~[u8] and just used .mut_iter(); rather than pointer dances.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be indeed, but the function I updated there used pointer arithmetic for what I assumed to be speed reasons. I don't really know how to test such things, so I left the basic structure of the function as is.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The iterators are designed to optimize very well (they use pointers arithmetic internally); so that gives you the benefit of no unsafe code and equal (or faster) speed.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I could just replace both str_map_bytes and str_copy_map_bytes with iterator chains if you think that would be better.

str_copy_map_bytes originally got introduced in #8231 under the name map_bytes. @SimonSapin: Any reason why you choose pointer arithmetic?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wasn’t aware of vec.mut_iter(). How do you get a mutable[u8] from a string?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In this case, I think string.into_bytes() to get a ~[u8] which can be placed into a mut slot. (And then str::from_bytes_owned() at the end.)

(And yes; I think keeping the amount of unsafe code as small as possible is a good goal: less code to audit, and if there is a bug found then it'll only need to be changed in one spot.)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you’d want str::raw::from_bytes_owned to avoid the UTF-8 check. (This is safe when the map only changes bytes in the ASCII range.)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay, gonna rewrite the functions to only use unsafe to circumvent the utf8 checks.

bors added a commit that referenced this pull request Sep 9, 2013
- Marked a unsafe helper function as unsafe, added a second helper function
- Added moving implementations
@borsbors closed this Sep 9, 2013
flip1995 pushed a commit to flip1995/rust that referenced this pull request Aug 14, 2023
…lexendoo
[`manual_retain`]: add lint case for `binary_heap`
Closesrust-lang#9059
This PR adds changes to perform linting on the `binary_heap` as well, under the [manual_retain rule](https://rust-lang.github.io/rust-clippy/master/index.html#/manual_retain).
changelog: [manual_retain]: update for lint `binary_heap`
U007D pushed a commit to U007D/rust-mos that referenced this pull request Aug 21, 2026
9059: fix: Only complete derive proc macros in `#[derive]` r=jonas-schievink a=jonas-schievink
HIR now gives them `MacroKind::Derive` instead of `MacroKind::ProcMacro`
bors r+
Co-authored-by: Jonas Schievink <jonasschievink@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@Kimundi@SimonSapin@huonw@bors
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Some work on std::ascii - #9059

Closed
Kimundi wants to merge 1 commit into
rust-lang:masterfrom
Kimundi:master
Closed

Some work on std::ascii#9059
Kimundi wants to merge 1 commit into
rust-lang:masterfrom
Kimundi:master

Conversation

@Kimundi

Copy link
Copy Markdown
Contributor
  • Marked a unsafe helper function as unsafe, added a second helper function
  • Added moving implementations

Comment threadsrc/libstd/str/ascii.rs Outdated

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This might be cleaner if one converted the string to ~[u8] and just used .mut_iter(); rather than pointer dances.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be indeed, but the function I updated there used pointer arithmetic for what I assumed to be speed reasons. I don't really know how to test such things, so I left the basic structure of the function as is.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The iterators are designed to optimize very well (they use pointers arithmetic internally); so that gives you the benefit of no unsafe code and equal (or faster) speed.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I could just replace both str_map_bytes and str_copy_map_bytes with iterator chains if you think that would be better.

str_copy_map_bytes originally got introduced in #8231 under the name map_bytes. @SimonSapin: Any reason why you choose pointer arithmetic?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wasn’t aware of vec.mut_iter(). How do you get a mutable[u8] from a string?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In this case, I think string.into_bytes() to get a ~[u8] which can be placed into a mut slot. (And then str::from_bytes_owned() at the end.)

(And yes; I think keeping the amount of unsafe code as small as possible is a good goal: less code to audit, and if there is a bug found then it'll only need to be changed in one spot.)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you’d want str::raw::from_bytes_owned to avoid the UTF-8 check. (This is safe when the map only changes bytes in the ASCII range.)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay, gonna rewrite the functions to only use unsafe to circumvent the utf8 checks.

bors added a commit that referenced this pull request Sep 9, 2013
- Marked a unsafe helper function as unsafe, added a second helper function
- Added moving implementations
@borsbors closed this Sep 9, 2013
flip1995 pushed a commit to flip1995/rust that referenced this pull request Aug 14, 2023
…lexendoo
[`manual_retain`]: add lint case for `binary_heap`
Closesrust-lang#9059
This PR adds changes to perform linting on the `binary_heap` as well, under the [manual_retain rule](https://rust-lang.github.io/rust-clippy/master/index.html#/manual_retain).
changelog: [manual_retain]: update for lint `binary_heap`
U007D pushed a commit to U007D/rust-mos that referenced this pull request Aug 21, 2026
9059: fix: Only complete derive proc macros in `#[derive]` r=jonas-schievink a=jonas-schievink
HIR now gives them `MacroKind::Derive` instead of `MacroKind::ProcMacro`
bors r+
Co-authored-by: Jonas Schievink <jonasschievink@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@Kimundi@SimonSapin@huonw@bors