Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Fix to no copy when format with yansi_term#30

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
zbraniecki merged 1 commit intorust-lang:masterfromzzau13:master
Apr 3, 2020
Merged

Fix to no copy when format with yansi_term#30

zbraniecki merged 1 commit intorust-lang:masterfromzzau13:master
Apr 3, 2020

Conversation

@zzau13
Copy link
Contributor

This PR eliminates the need to reallocate while formatting.
For this I have forked theansi_term library to refactor tofmt::Display allowing to introduce flow with a closure that takes the current formatter as argument.
It will depend onyansi-term instead of ansi_term, which I will keep.

@zbraniecki
Copy link
Contributor

@botika what's your take onyansi-term vstermcolor?@brendanzab says thattermcolor may be a better long term bet.

I'm happy to land this PR, but I'm also curious on your opinion on that :)

@zzau13
Copy link
ContributorAuthor

zzau13 commentedApr 1, 2020
edited
Loading

The library is very simple, just enter a prefix and a suffix. So it does not need much maintenance nor can it innovate significantly. With the fork in theansi_term I have left the minimum to fulfill its function as quickly as possible

The reason for the PR is to remove all unnecessarymallocs in the formatter.

@zbraniecki
Copy link
Contributor

I understand. I'm just curious on your take on long-term replacingansi_term oryansi_term withtermcolor?

@zbranieckizbraniecki self-requested a reviewApril 2, 2020 02:02
@zzau13
Copy link
ContributorAuthor

It is more optimal implementfmt::Display thanio::Write. It forces you to use his buffer or stream output. I think the only thing this library should do is put a prefix and a suffix around the format flow, and let the user use whatever writer they want. So you couldn't usefmt::Formatter for output stream. And I am unaware of compatibility outside of unix systems

@zzau13
Copy link
ContributorAuthor

I've been looking attermcolor in more depth, just as I expected, it's forced to reallocate,here allocate to stack andhere allocate to writer (wherever the writer writes).

So, the main problems oftermcolor are unnecessary use of memory and lack of abstraction of the writer

zbraniecki reacted with thumbs up emoji

@zzau13
Copy link
ContributorAuthor

I updated thewrite bench, the results betweenio::Write andfmt::Display are:

Teams io::Write          time:   [423.37 ns 430.62 ns 436.27 ns]Teams fmt::Write         time:   [291.71 ns 292.90 ns 294.35 ns]

The results are clear. The fastest way to write in Rust is to implementfmt::Display.

@zbranieckizbraniecki merged commit40cec7a intorust-lang:masterApr 3, 2020
@zbraniecki
Copy link
Contributor

Thank you!

zzau13 reacted with heart emoji

epage pushed a commit to epage/annotate-snippets-rs that referenced this pull requestSep 29, 2025
Coming soon: The Renovate bot (GitHub App) will be renamed to Mend. PRsfrom Renovate will soon appear from 'Mend'. Learn more[here](https://redirect.github.com/renovatebot/renovate/discussions/37842).This PR contains the following updates:| Package | Update | Change ||---|---|---|| [STABLE](https://redirect.github.com/rust-lang/rust) | minor | `1.89`-> `1.90` |---### Release Notes<details><summary>rust-lang/rust (STABLE)</summary>###[`v1.90`](https://redirect.github.com/rust-lang/rust/blob/HEAD/RELEASES.md#Version-1900-2025-09-18)[CompareSource](https://redirect.github.com/rust-lang/rust/compare/1.89.0...1.90.0)\===========================<a></a>## Language- [Split up the `unknown_or_malformed_diagnostic_attributes`lint](https://redirect.github.com/rust-lang/rust/pull/140717). This linthas been split up into four finer-grained lints, with`unknown_or_malformed_diagnostic_attributes` now being the lint groupthat contains these lints:  1. `unknown_diagnostic_attributes`: unknown to the current compiler  2. `misplaced_diagnostic_attributes`: placed on the wrong item3. `malformed_diagnostic_attributes`: malformed attribute syntax oroptions4. `malformed_diagnostic_format_literals`: malformed format stringliteral- [Allow constants whose final value has references to mutable/externalmemory, but reject such constants aspatterns](https://redirect.github.com/rust-lang/rust/pull/140942)- [Allow volatile access to non-Rust memory, including address0](https://redirect.github.com/rust-lang/rust/pull/141260)<a></a>## Compiler- [Use `lld` by default on`x86_64-unknown-linux-gnu`](https://redirect.github.com/rust-lang/rust/pull/140525).- [Tier 3 `musl` targets now link dynamically bydefault](https://redirect.github.com/rust-lang/rust/pull/144410).Affected targets:  - `mips64-unknown-linux-muslabi64`  - `powerpc64-unknown-linux-musl`  - `powerpc-unknown-linux-musl`  - `powerpc-unknown-linux-muslspe`  - `riscv32gc-unknown-linux-musl`  - `s390x-unknown-linux-musl`  - `thumbv7neon-unknown-linux-musleabihf`<a></a>## Platform Support- [Demote `x86_64-apple-darwin` to Tier 2 with hosttools](https://redirect.github.com/rust-lang/rust/pull/145252)Refer to Rust's [platform support page][platform-support-doc]for more information on Rust's tiered platform support.[platform-support-doc]:https://doc.rust-lang.org/rustc/platform-support.html<a></a>## Libraries- [Stabilize`u*::{checked,overflowing,saturating,wrapping}_sub_signed`](https://redirect.github.com/rust-lang/rust/issues/126043)- [Allow comparisons between `CStr`, `CString`, and`Cow<CStr>`](https://redirect.github.com/rust-lang/rust/pull/137268)- [Remove some unsized tuple impls since unsized tuples can't beconstructed](https://redirect.github.com/rust-lang/rust/pull/138340)- [Set `MSG_NOSIGNAL` for`UnixStream`](https://redirect.github.com/rust-lang/rust/pull/140005)- [`proc_macro::Ident::new` now supports`$crate`.](https://redirect.github.com/rust-lang/rust/pull/141996)- [Guarantee the pointer returned from `Thread::into_raw` has at least 8bytes ofalignment](https://redirect.github.com/rust-lang/rust/pull/143859)<a></a>## Stabilized APIs-[`u{n}::checked_sub_signed`](https://doc.rust-lang.org/stable/std/primitive.usize.html#method.checked_sub_signed)-[`u{n}::overflowing_sub_signed`](https://doc.rust-lang.org/stable/std/primitive.usize.html#method.overflowing_sub_signed)-[`u{n}::saturating_sub_signed`](https://doc.rust-lang.org/stable/std/primitive.usize.html#method.saturating_sub_signed)-[`u{n}::wrapping_sub_signed`](https://doc.rust-lang.org/stable/std/primitive.usize.html#method.wrapping_sub_signed)- [`impl Copy forIntErrorKind`](https://doc.rust-lang.org/stable/std/num/enum.IntErrorKind.html#impl-Copy-for-IntErrorKind)- [`impl Hash forIntErrorKind`](https://doc.rust-lang.org/stable/std/num/enum.IntErrorKind.html#impl-Hash-for-IntErrorKind)- [`impl PartialEq<&CStr> forCStr`](https://doc.rust-lang.org/stable/std/ffi/struct.CStr.html#impl-PartialEq%3C%26CStr%3E-for-CStr)- [`impl PartialEq<CString> forCStr`](https://doc.rust-lang.org/stable/std/ffi/struct.CStr.html#impl-PartialEq%3CCString%3E-for-CStr)- [`impl PartialEq<Cow<CStr>> forCStr`](https://doc.rust-lang.org/stable/std/ffi/struct.CStr.html#impl-PartialEq%3CCow%3C'_,+CStr%3E%3E-for-CStr)- [`impl PartialEq<&CStr> forCString`](https://doc.rust-lang.org/stable/std/ffi/struct.CString.html#impl-PartialEq%3C%26CStr%3E-for-CString)- [`impl PartialEq<CStr> forCString`](https://doc.rust-lang.org/stable/std/ffi/struct.CString.html#impl-PartialEq%3CCStr%3E-for-CString)- [`impl PartialEq<Cow<CStr>> forCString`](https://doc.rust-lang.org/stable/std/ffi/struct.CString.html#impl-PartialEq%3CCow%3C'_,+CStr%3E%3E-for-CString)- [`impl PartialEq<&CStr> forCow<CStr>`](https://doc.rust-lang.org/stable/std/borrow/enum.Cow.html#impl-PartialEq%3C%26CStr%3E-for-Cow%3C'_,+CStr%3E)- [`impl PartialEq<CStr> forCow<CStr>`](https://doc.rust-lang.org/stable/std/borrow/enum.Cow.html#impl-PartialEq%3CCStr%3E-for-Cow%3C'_,+CStr%3E)- [`impl PartialEq<CString> forCow<CStr>`](https://doc.rust-lang.org/stable/std/borrow/enum.Cow.html#impl-PartialEq%3CCString%3E-for-Cow%3C'_,+CStr%3E)These previously stable APIs are now stable in const contexts:-[`<[T]>::reverse`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.reverse)-[`f32::floor`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.floor)-[`f32::ceil`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.ceil)-[`f32::trunc`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.trunc)-[`f32::fract`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.fract)-[`f32::round`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.round)-[`f32::round_ties_even`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.round_ties_even)-[`f64::floor`](https://doc.rust-lang.org/stable/std/primitive.f64.html#method.floor)-[`f64::ceil`](https://doc.rust-lang.org/stable/std/primitive.f64.html#method.ceil)-[`f64::trunc`](https://doc.rust-lang.org/stable/std/primitive.f64.html#method.trunc)-[`f64::fract`](https://doc.rust-lang.org/stable/std/primitive.f64.html#method.fract)-[`f64::round`](https://doc.rust-lang.org/stable/std/primitive.f64.html#method.round)-[`f64::round_ties_even`](https://doc.rust-lang.org/stable/std/primitive.f64.html#method.round_ties_even)<a></a>## Cargo- [Add `http.proxy-cainfo` config for proxycerts](https://redirect.github.com/rust-lang/cargo/pull/15374/)- [Use `gix` for `cargopackage`](https://redirect.github.com/rust-lang/cargo/pull/15534/)- [feat(publish): Stabilize multi-packagepublishing](https://redirect.github.com/rust-lang/cargo/pull/15636/)<a></a>## Rustdoc- [Add ways to collapse all implblocks](https://redirect.github.com/rust-lang/rust/pull/141663).Previously the "Summary" button and "-" keyboard shortcut would nevercollapse `impl` blocks, now they do when shift is held- [Display unsafe attributes with `unsafe()`wrappers](https://redirect.github.com/rust-lang/rust/pull/143662)<a></a>## Compatibility Notes- [Use `lld` by default on`x86_64-unknown-linux-gnu`](https://redirect.github.com/rust-lang/rust/pull/140525).See also<https://blog.rust-lang.org/2025/09/01/rust-lld-on-1.90.0-stable/>.- [Make `core::iter::Fuse`'s `Default` impl construct `I::default()`internally as promised in the docs instead of always beingempty](https://redirect.github.com/rust-lang/rust/pull/140985)- [Set `MSG_NOSIGNAL` for`UnixStream`](https://redirect.github.com/rust-lang/rust/pull/140005)This may change program behavior but results in the same behavior asother primitives (e.g., stdout, network sockets).Programs relying on signals to terminate them should update handling ofsockets to handle errors on write by exiting.- [On Unix `std::env::home_dir` will use the fallback if the `HOME`environment variable isempty](https://redirect.github.com/rust-lang/rust/pull/141840)- We now [reject unsupported `extern "{abi}"`s consistently in allpositions](https://redirect.github.com/rust-lang/rust/pull/142134). Thisprimarily affects the use of implementing traits on an `extern "{abi}"`function pointer, like `extern "stdcall" fn()`, on a platform thatdoesn't support that, like aarch64-unknown-linux-gnu. Direct usage ofthese unsupported ABI strings by declaring or defining functions wasalready rejected, so this is only a change for consistency.- [const-eval: error when initializing a static writes to thatstatic](https://redirect.github.com/rust-lang/rust/pull/143084)- [Check that the `proc_macro_derive` macro has correct arguments whenapplied to the crateroot](https://redirect.github.com/rust-lang/rust/pull/143607)</details>---### Configuration📅 **Schedule**: Branch creation - Every minute ( * * * * * ) (UTC),Automerge - At any time (no schedule defined).🚦 **Automerge**: Enabled.♻ **Rebasing**: Whenever PR is behind base branch, or you tick therebase/retry checkbox.🔕 **Ignore**: Close this PR and you won't be reminded about this updateagain.---- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, checkthis box---This PR was generated by [Mend Renovate](https://mend.io/renovate/).View the [repository joblog](https://developer.mend.io/github/epage/_rust).<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS45Ny4xMCIsInVwZGF0ZWRJblZlciI6IjQxLjk3LjEwIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment

Reviewers

1 more reviewer

@zbranieckizbranieckizbraniecki approved these changes

Reviewers whose approvals may not affect merge requirements

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

2 participants

@zzau13@zbraniecki

[8]ページ先頭

©2009-2025 Movatter.jp