From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8EE7AEE021C for ; Wed, 11 Sep 2024 08:53:35 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id EB7078D0102; Wed, 11 Sep 2024 04:53:34 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E401C8D0056; Wed, 11 Sep 2024 04:53:34 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CE0F88D0102; Wed, 11 Sep 2024 04:53:34 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id AD4128D0056 for ; Wed, 11 Sep 2024 04:53:34 -0400 (EDT) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 34BCC1C3FA7 for ; Wed, 11 Sep 2024 08:53:34 +0000 (UTC) X-FDA: 82551843948.19.893BC94 Received: from mail-40133.protonmail.ch (mail-40133.protonmail.ch [185.70.40.133]) by imf13.hostedemail.com (Postfix) with ESMTP id 5B6E020005 for ; Wed, 11 Sep 2024 08:53:32 +0000 (UTC) Authentication-Results: imf13.hostedemail.com; dkim=pass header.d=proton.me header.s=protonmail header.b=GDzrFMoW; spf=pass (imf13.hostedemail.com: domain of benno.lossin@proton.me designates 185.70.40.133 as permitted sender) smtp.mailfrom=benno.lossin@proton.me; dmarc=pass (policy=quarantine) header.from=proton.me ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1726044708; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=V1DaypacfHgH30QcZbTBIVISoAMB3BZmyLTSZgD+fCw=; b=4tu+MJMozxybXmeHFi0XdR2VaXWd7cHmJKTfhTdu6uzodvwvPMNizomxIJOs1EV6VbYRFL DABQq3rcY5gIpSk7bNIN0sqwLN3k8jldyeDtnsFA8BUsOfgzy/LTsUZOzx9v5ZA8ukeLuA 5+syWTauJqpAn8uw6TeUHI1rUBxnVIA= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1726044708; a=rsa-sha256; cv=none; b=AQqCuc2Zs9GmbXnV3ym2NNdLDoUq1aWuYt5Cf6RbdAhJELfAmFBd6pDtezbTMzeh10sfmx Q6/OE3QLJrzdXZdLlveLvbDLdYCZVeyUyJQsl3sHClIwHuEOe3xB3sUwDruVQysWjy2nGL o9hs3mtPXmiJ1IumC0EHb2xYWR1kKkY= ARC-Authentication-Results: i=1; imf13.hostedemail.com; dkim=pass header.d=proton.me header.s=protonmail header.b=GDzrFMoW; spf=pass (imf13.hostedemail.com: domain of benno.lossin@proton.me designates 185.70.40.133 as permitted sender) smtp.mailfrom=benno.lossin@proton.me; dmarc=pass (policy=quarantine) header.from=proton.me DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=proton.me; s=protonmail; t=1726044809; x=1726304009; bh=V1DaypacfHgH30QcZbTBIVISoAMB3BZmyLTSZgD+fCw=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID:BIMI-Selector; b=GDzrFMoWBDrZGpotXcDnsUADzacYIMxuQESVwPdEnbILhv+MrEfGbM2iPOlAnhi8p cyYQ29nONdVLSiyaVRhfwMWLMmko4GVgj31fKRBEW5Yzz/jKR0fG+wXYX0rZvZg973 IE02FI6O70Wi7e+bpSDTte51pmWoxjPZPFTAo8Mxsrl9dyqFM6T3pI4TQXLPgeBUX1 YE/DtvwGliwkcluG5rRFki75XIuOXjMGcxicDzBnMiiArFI0MAtUNqQketzaHu4TXQ 58slCmqVi2ueGwiA0HwJNxvOu03MFH4R330Fr9XA+siVOPnRY6duu3BdJ2yB8dt1Lx p91iRDCqSke0w== Date: Wed, 11 Sep 2024 08:53:24 +0000 To: Danilo Krummrich From: Benno Lossin Cc: ojeda@kernel.org, alex.gaynor@gmail.com, wedsonaf@gmail.com, boqun.feng@gmail.com, gary@garyguo.net, bjorn3_gh@protonmail.com, a.hindborg@samsung.com, aliceryhl@google.com, akpm@linux-foundation.org, daniel.almeida@collabora.com, faith.ekstrand@collabora.com, boris.brezillon@collabora.com, lina@asahilina.net, mcanal@igalia.com, zhiw@nvidia.com, cjia@nvidia.com, jhubbard@nvidia.com, airlied@redhat.com, ajanulgu@redhat.com, lyude@redhat.com, linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, linux-mm@kvack.org Subject: Re: [PATCH v6 15/26] rust: alloc: implement `collect` for `IntoIter` Message-ID: <503abe24-fbac-440a-a063-fc30a2a6bd77@proton.me> In-Reply-To: References: <20240816001216.26575-1-dakr@kernel.org> <20240816001216.26575-16-dakr@kernel.org> <747b8c1c-cb7b-422e-b6a0-ea863cc37f0a@proton.me> Feedback-ID: 71780778:user:proton X-Pm-Message-ID: 6f7b7bfdbfdcc7f366fd5b4e594634851cf4cf85 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Stat-Signature: ixrf7ud3kkjfuj9rc3o8y1urxromu7ct X-Rspamd-Queue-Id: 5B6E020005 X-Rspam-User: X-Rspamd-Server: rspam08 X-HE-Tag: 1726044812-541805 X-HE-Meta: U2FsdGVkX1+WydmqpTOs0HOdfKBqKUZb+J6DbbtD3avGixjMlWTEMgj3V4AbP0bftFC1IKfuX+tb1TKd7qMbfT5yxt5SZcd02leMeVGsso0GaUfyu/FXgj9lgG21LzuA+Llj1MuQbzLxwkglRxrlxY5GS1gAauAzIFOF0+2YMefiYdFWX8O+xYpRcctA8daShy9AnqF4gU8NFPbtrFGos2GoNAEIbcU6K9HS7hg4oEXhHCEnI3zThMxvLenY3WpoltlYFi2kheCZ6d8r6P0GhVLKIqVl6IgCGCZVOq3heCnn/YcA46LL3FAYLJCsM8Eu3ZuaJFu18XuP8Yxzha7lB2rl7aN0muaqtPe1v2AU894aUNn2PzAxQIrseR8lZDWEFmDjAwOiC1sCFmFVf7nqU/Z1aBMoTZlzOyfSeEma9rPZoC7s3bEKe9GG+sT5mt2Rr8aTjDufSuYAmSU01m/7ShtipLlPwlpSG7FQ/cMhs1ifSCy4Ng6YDV4NYaeNZRZIKtRryKNZlKflCQMUB9qqlwiAEybpCMcCSMpRjsIDd3UmF41DLldyd+qBhoUzjTJBJGx7gmVgSH+H9RPx9bundKmxY/Qi3vyMnvZcC6JpI5sO2Q6BJRSM8g+0rgxr84BKqH+MUChzzTk4h24paSBI9Tb/QkSomIqAszKbqMMxnunUT5e2TYwfQEFleSKwgJQMqV15UuNp5trkOL4VXrYquZ7fu5lN0AhqztOKGCH1GYwwX0rf+o85SibEwZgXQftrWyv6srvKTMF910jlknpzhINjntBxaI3+1seopypL8hB4pI/K5sNGb3USS8C4DvwnSvUSPh0NA1Ry7uYA4Irna3BCtIbmW3Yqcq5d0eSbddcVAEwFSeBlnMjRwHOqX+xjItQLtJVT2I21m1u2DiI2UFFNMLHQ53NeOQ0r0HSVI//ZjcMDTeU7njFAJWCvtaVObcdMcDPj09brLOKjmM4 Y48HJ6dy 15uAnOqJhWYMb5zo4LPrA/UXRibpAnGAjIO5JZ/dRzuH4X/p37TLkqiIjtKi2tP86b/uq22ACQreOXaNdPf81KXrmJwUfyOZDUldzJTlXYcX/g7WqYHvrQFMFxJBL6UfkecyiY7XNPeclmfW/GsFOMqVpKAiQjjyGOiv+6tUwv50bnjurkotFRNcqZiBkkxLDcO78daZ84kHRWVXcIRg1IxgcLjjGWyMgUb3mtoonh7GEbATfmdltKHWZCvc11ZuYVhLNo+ngZ1OD5PzB+wKYUOIT6vnMHtfI2l761NproIGvh/j2YReWr9NngA+lPpi3AGrGLrpCrIt8lyGEVzvjRJhnytc91hOFOS9OwRVje5H8ahPYJ3iRcM+VL0a5CcfWgssW X-Bogosity: Ham, tests=bogofilter, spamicity=0.000111, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On 11.09.24 02:22, Danilo Krummrich wrote: > On Tue, Sep 10, 2024 at 08:12:24PM +0000, Benno Lossin wrote: >> On 16.08.24 02:10, Danilo Krummrich wrote: >>> + /// Same as `Iterator::collect` but specialized for `Vec`'s `IntoI= ter`. >>> + /// >>> + /// Currently, we can't implement `FromIterator`. There are a coup= le of issues with this trait >>> + /// in the kernel, namely: >>> + /// >>> + /// - Rust's specialization feature is unstable. This prevents us = to optimze for the special >>> + /// case where `I::IntoIter` equals `Vec`'s `IntoIter` type. >>> + /// - We also can't use `I::IntoIter`'s type ID either to work aro= und this, since `FromIterator` >>> + /// doesn't require this type to be `'static`. >>> + /// - `FromIterator::from_iter` does return `Self` instead of `Res= ult`, hence >>> + /// we can't properly handle allocation failures. >>> + /// - Neither `Iterator::collect` nor `FromIterator::from_iter` ca= n handle additional allocation >>> + /// flags. >>> + /// >>> + /// Instead, provide `IntoIter::collect`, such that we can at leas= t convert a `IntoIter` into a >>> + /// `Vec` again. >> >> I think it's great that you include this in the code, but I don't think >> that it should be visible in the documentation, >=20 > Why not? I think this information is valuable for users of this API. If you want to keep it, then I don't mind, but I would still move it underneath `Examples` and add a section header `# Implementation Details` or similar. --- Cheers, Benno >> can you move it under >> the `Examples` section and turn it into normal comments? >> >>> + /// >>> + /// Note that `IntoIter::collect` doesn't require `Flags`, since i= t re-uses the existing backing >>> + /// buffer. However, this backing buffer may be shrunk to the actu= al count of elements. >>> + /// >>> + /// # Examples >>> + /// >>> + /// ``` >>> + /// let v =3D kernel::kvec![1, 2, 3]?; >>> + /// let mut it =3D v.into_iter(); >>> + /// >>> + /// assert_eq!(it.next(), Some(1)); >>> + /// >>> + /// let v =3D it.collect(GFP_KERNEL); >>> + /// assert_eq!(v, [2, 3]); >>> + /// >>> + /// # Ok::<(), Error>(()) >>> + /// ``` >>> + pub fn collect(self, flags: Flags) -> Vec {