From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-40141.protonmail.ch (mail-40141.protonmail.ch [185.70.40.141]) by sourceware.org (Postfix) with ESMTPS id 685123858D35 for ; Wed, 28 Jun 2023 12:12:18 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 685123858D35 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=protonmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=protonmail.com Date: Wed, 28 Jun 2023 12:12:05 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail3; t=1687954336; x=1688213536; bh=k6jWv4NDTJNtogpFGHS+P2YqlOpjbMVIxlUkzSfK6Mk=; 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=sc2WbGlUBtiqHNYirMStNotGy5+KrGVnN6tojjxXoTpiKRFGyYCOM2tPjHt+CMiJP zgaslDFrZj8WVr6IvBioOUuKB04UXoSFKlxi/KrEaCIuEJjIWWBgobtnWV7QdndDfc e6CCnLbV3RdjH3QwYHT3OJRx1bnWQVnj5Mv3o1ayRV5D7HN7R/yOTlkw6NBSYJ+3Oj jr4QPXuplhBWuNbypzJZYFpXf2L/G7fj3xipBpv/XL82qFpeEq+PP+kvqlWHSKWUyM 3sRr/emPrjM/SKWju4p5vmXN5UPC00dmHca0iz1wGtByiUdsKND/VCKDNg2BAwyQ7y 4Ygxteysipx/A== To: =?utf-8?Q?Rafa=C5=82_Pietrak?= From: waffl3x Cc: Jonathan Wakely , "gcc@gcc.gnu.org" Subject: Re: wishlist: support for shorter pointers Message-ID: In-Reply-To: <9bf8d93d-7342-ad21-4f06-864978e580f4@ztk-rp.eu> References: <439affd4-11fe-de80-94c8-6fc64cbf76ec@ztk-rp.eu> <21650b1b-1d2e-7929-3105-b8aaca629272@ztk-rp.eu> <9bf8d93d-7342-ad21-4f06-864978e580f4@ztk-rp.eu> Feedback-ID: 14591686:user:proton MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-2.3 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,SPF_HELO_PASS,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: > Hmm... that's disappointing :( nothing was generated. Function templates are not functions, they are templates of functions, they will not generate any code unless they are instantiated. > then again. I've noticed that you've changed pointers to indices.=20 No, I changed pointers to a template type parameter named Iter. Which is me= ant to correspond to the C++ iterator interface. Pointers satisfy all of iterat= ors requirements, and classes that satisfy those requirements (by implementing = similar semantics to pointers) are also iterators. > Or may be C++ does a different thing with [object++], then > what plain-c does with [variable++]? That's correct, C++ has operator overloading, which allows you to define member functions for classes that are called when the corresponding operato= r is used. In this case, operator++ (in the imaginary implementation) is overloaded to= go to the next element of the linked list. The iterator interface requires operat= or++ to be overloaded, and should implement similar semantics to using operator++ o= n a pointer. > I's hard to analyze code without basic knowledge of the language :( Yes, I personally recommend learncpp as a resource for learning C++, that would aid you greatly. C++ is a large language, you would need to invest so= me time into it to become proficient, in my opinion that investment is hugely worth= it though. > I only hoped that the problem could be > recognized and may be would inspire some developers out there Unfortunately, I strongly agree with JWakely that what you requested belong= s in library rather than in language additions. If implementing it is too muc= h of a burden (which is understandable since you have no prior experience with C++= ) then I would suggest checking out Boost to see if they have what you need. I seem = to recall them having some sort of fancy pointers in there somewhere. Realistically t= hough, it will take some time to get used to all the C++isms before you would be a= ble to be proficient with anything Boost would provide. I don't mean to be discour= aging, I just want to keep your expectations realistic, the learning curve for C++= can be rather high, especially when you're used to C. Good luck! -Alex Sent with Proton Mail secure email. ------- Original Message ------- On Wednesday, June 28th, 2023 at 6:43 AM, Rafa=C5=82 Pietrak wrote: > Hi Alex, >=20 > W dniu 28.06.2023 o 11:56, waffl3x pisze: >=20 > > Here's a quick and dirty example of how this function could be rewritte= n with > > modern C++. I omitted some necessary details, particularly the implemen= tation of the > > linked list iterator. I also wrote it out quickly so I can't be certain= it's 100% > > correct, but it should give you an idea of whats possible. >=20 >=20 > trying.... >=20 > > // I assume you meant to return a pointer > > template > > auto test_funct(Iter iter, Iter end, char opt) { > > for (; iter !=3D end; ++iter) { > > // dereferencing iter would get buff > > if (!*iter) { *iter =3D opt; break; } > > } > > return iter; > > } >=20 > -------------------------- TEST.CPP is the above code > $ g++ -fpermissive -c test.cpp >=20 > > > no error, GOOD :) >=20 > $ g++ -fpermissive -S test.cpp > $ cat test.s > .file "test.cpp" > .text > .ident "GCC: (Debian 12.2.0-14) 12.2.0" > .section .note.GNU-stack,"",@progbits > ---------------end-of-file---------- >=20 > Hmm... that's disappointing :( nothing was generated. >=20 > then again. I've noticed that you've changed pointers to indices. I've > pondered that for my implementation too but discarded the idea for it > will require adjustments by struct-size (array element size) on every > access.... Or may be C++ does a different thing with [object++], then > what plain-c does with [variable++]? >=20 > I's hard to analyze code without basic knowledge of the language :( >=20 > > I also made an example using the C++ algorithms library. > >=20 > > template > > auto test_funct(Iter begin, Iter end, char opt) { > > auto iter =3D std::find_if(begin, end, [](auto buff){return !buff;}); > > if (iter) { > > *iter =3D opt; > > } > > return iter; > > } >=20 >=20 > here I got: > test2.cpp:3:22: error: =E2=80=98find_if=E2=80=99 is not a member of = =E2=80=98std=E2=80=99 > so, it's a nogo for me either. >=20 > > As I said, there's quite a bit omitted here, to be blunt, implementing = both > > the fancy pointers (especially when I don't know anything about the har= dware) and > > the iterators required would be more of a task than I am willing to do.= I'm happy > > to help but I don't think I should be doing unpaid labor :). >=20 >=20 > Fair enough. >=20 > [---------] >=20 > > I'm happy to answer more questions and help, however I'm concerned this= is > > getting fairly unrelated to GCC. >=20 >=20 > From my perspective it is related to GCC (well... ok, to CC in general > - it "smells" like an extention to "C-standard" providing additional > "funny" semantics to CC. But GCC is a "front-runner" for CC evolution, > right? :). >=20 > Then again. I'm not into drawing anybody into unfruitful and pointless > support (for my little project). I only hoped that the problem could be > recognized and may be would inspire some developers out there (as it > would be silly for me, if I thought its implementation into GCC could > happen before my small project ends, right?). >=20 > Anyway, thanx for the hints and suggestions. >=20 > -R