perl.perl5.porters https://www.nntp.perl.org/group/perl.perl5.porters/ ... Copyright 1998-2023 perl.org Wed, 06 Dec 2023 21:31:37 +0000 ask@perl.org Re: Summary: Proposed change to Corinna OOP system by Martijn Lievaart via perl5-porters <br/>Op 06-12-2023 om 07:57 schreef Ovid:<br/>&gt; On Wed, Dec 6, 2023 at 2:04&#x202F;AM Chris Prather &lt;chris@prather.org&gt; wrote:<br/>&gt;<br/>&gt; I really just want `method foo() { }` with no visibility attribute<br/>&gt; to be a compile time error and not to default to `method foo<br/>&gt; :private () {}`.<br/>&gt;<br/>&gt; Being rather tired of pushing the rock up the hill, I was tempted to <br/>&gt; not post my summary reply. Now I&#39;m glad I did because it&#39;s clear that <br/>&gt; I misunderstood your&nbsp;intent.<br/>&gt;<br/>&gt; I would be /delighted/&nbsp;if a method with no visibility attribute was a <br/>&gt; compile-time error. It&#39;s more typing and devs will complain,&nbsp;but this <br/>&gt; suggestion neatly solves the&nbsp;problem. Interfaces are explicit and <br/>&gt; intentional. (well, maybe not the latter, but at least someone can&#39;t <br/>&gt; blame Perl for the mistake this time). I think we would still need a <br/>&gt; single attribute for visibility, but this gets us much closer.<br/>&gt;<br/><br/>And it still doesn&#39;t rule out an explicit default given in the use <br/>statement, for those that want that (I know I would use that to default <br/>to private).<br/><br/><br/>HTH,<br/><br/>M4<br/><br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267496.html Wed, 06 Dec 2023 18:04:09 +0000 Re: Post-mortem: Security Releases of this weekend by James E Keenan On 12/6/23 07:25, sisyphus wrote:<br/><br/>&gt; <br/>&gt; Where can we view the changes that were made in order to fix these 2 <br/>&gt; security issues ?<br/>&gt; Have they been applied to blead ?<br/>&gt; <br/><br/>See, for example, commit ff1f9f59360afeebd6f75ca1502f5c3ebf077da3.<br/><br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267495.html Wed, 06 Dec 2023 12:43:12 +0000 Re: Post-mortem: Security Releases of this weekend by sisyphus On Wed, Dec 6, 2023 at 9:58&acirc;&#128;&macr;PM Paul &quot;LeoNerd&quot; Evans &lt;leonerd@leonerd.org.uk&gt; <br/>wrote: <br/> <br/>&gt; The intention of the task was to create 3 new releases all at once, <br/>&gt; as a &quot;surprise&quot; because they contained security-related fixes. <br/>&gt; <br/> <br/>Where can we view the changes that were made in order to fix these 2 <br/>security issues ? <br/>Have they been applied to blead ? <br/> <br/>Cheers, <br/>Rob <br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267494.html Wed, 06 Dec 2023 12:25:17 +0000 Re: Summary: Proposed change to Corinna OOP system by "Ruud H.G. van Tol" via perl5-porters <br/>On 2023-12-06 07:57, Ovid wrote:<br/>&gt; On Wed, Dec 6, 2023 at 2:04&#x202F;AM Chris Prather &lt;chris@prather.org&gt; wrote:<br/>&gt;<br/>&gt; I really just want `method foo() { }` with no visibility attribute<br/>&gt; to be a compile time error and not to default to `method foo<br/>&gt; :private () {}`.<br/>&gt;<br/>&gt; Being rather tired of pushing the rock up the hill, I was tempted to <br/>&gt; not post my summary reply. Now I&#39;m glad I did because it&#39;s clear that <br/>&gt; I misunderstood your&nbsp;intent.<br/>&gt;<br/>&gt; I would be /delighted/&nbsp;if a method with no visibility attribute was a <br/>&gt; compile-time error. It&#39;s more typing and devs will complain,&nbsp;but this <br/>&gt; suggestion neatly solves the&nbsp;problem. Interfaces are explicit and <br/>&gt; intentional. (well, maybe not the latter, but at least someone can&#39;t <br/>&gt; blame Perl for the mistake this time). I think we would still need a <br/>&gt; single attribute for visibility, but this gets us much closer.<br/><br/>Then I think it would be good to have an independent &#39;default&#39; dimension.<br/><br/>For that, Corinna likely needs to have some before-/after-/around-hooks.<br/><br/>With such, one can then make all methods to be private by default, or <br/>all methods with a name matching C&lt;/^_\w+$/aa&gt;, etc.<br/><br/>-- Ruud<br/><br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267493.html Wed, 06 Dec 2023 12:07:27 +0000 Re: Post-mortem: Security Releases of this weekend by Sam James <br/>&quot;Paul \&quot;LeoNerd\&quot; Evans&quot; &lt;leonerd@leonerd.org.uk&gt; writes:<br/><br/>&gt; The intention of the task was to create 3 new releases all at once,<br/>&gt; as a &quot;surprise&quot; because they contained security-related fixes. Those<br/>&gt; fixes had been distributed as patches to vendors in the two weeks<br/>&gt; prior, so this was the determined time to make it public. As such, it<br/>&gt; was a little difficult to work too much out in the open, as would be<br/>&gt; the case for a normal blead-point or maint release. Normal maintenance<br/>&gt; policy said we should keep 5.38 and 5.36 updated, but we decided since<br/>&gt; we&#39;re doing two releases anyway, adding a third didn&#39;t make it much<br/>&gt; worse, so I was building all of 5.34.2, 5.36.2 and 5.38.1.<br/><br/>Thank you for writing this up, and I should say, all of it is<br/>understandable and it didn&#39;t bother us downstream really. These things<br/>happen.<br/><br/>&gt; [...]<br/>&gt;<br/>&gt; Suggestions to fix avoid in future<br/>&gt;<br/>&gt; * Fix up many of the scripts to work in git worktrees<br/>&gt;<br/>&gt; * Early bailout if run using systemperl for those scripts that must<br/>&gt; be run on the built perl<br/>&gt;<br/>&gt; * Tooling to help automate the Module::CoreList process. At the very<br/>&gt; least its own module should always be updated in every block; as<br/>&gt; should B::Opcode and Config.<br/>&gt;<br/>&gt; * Further consider if we need to keep the &quot;next upcoming release&quot; in<br/>&gt; blead&#39;s Module/CoreList.pm at all; as it complicates<br/>&gt; out-of-sequence maint releases in this process<br/>&gt;<br/>&gt; * Streamlining of the RMG to reduce the number of steps overall,<br/>&gt; combine more testing phases, less build/clean/build/clean...<br/>&gt;<br/>&gt; * Also update the wording / formatting of the RMG, making it much<br/>&gt; easier to see which steps apply to which kinds of release<br/>&gt;<br/>&gt; * Fix up / skip / ignore the always-failing or flaky CI tests, so<br/>&gt; that failure messages become useful signals and not noise.<br/><br/><br/>These all sound like decent steps as well. In particular making sure<br/>worktrees are fine (given they&#39;re likely to make life easier for working<br/>on branches, we really don&#39;t want people to be scared of them), and<br/>reducing confusion between just-built and system perl.<br/><br/>thanks,<br/>sam<br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267492.html Wed, 06 Dec 2023 11:13:22 +0000 Post-mortem: Security Releases of this weekend by Paul "LeoNerd" Evans The intention of the task was to create 3 new releases all at once,<br/>as a &quot;surprise&quot; because they contained security-related fixes. Those<br/>fixes had been distributed as patches to vendors in the two weeks<br/>prior, so this was the determined time to make it public. As such, it<br/>was a little difficult to work too much out in the open, as would be<br/>the case for a normal blead-point or maint release. Normal maintenance<br/>policy said we should keep 5.38 and 5.36 updated, but we decided since<br/>we&#39;re doing two releases anyway, adding a third didn&#39;t make it much<br/>worse, so I was building all of 5.34.2, 5.36.2 and 5.38.1.<br/><br/>Since I was building three sets of tarballs all at once, I got myself a<br/>large-CPU machine and used three separate &quot;git worktree&quot; directories,<br/>one on each of the maint-5.34, maint-5.36 and maint-5.38 branches. This<br/>meant I could build them all concurrently, rather than constantly<br/>having to switch between all three branches. This saved much time.<br/><br/><br/>A timeline of what steps I took:<br/><br/> 1. Prepared tarballs by following RMG, these were tested as RC1<br/> from a private server URL.<br/><br/> 2. Some of these needed some minor fixes to documentation, two were<br/> then tested as RC2.<br/><br/> 3. Now found to be OK, I prepared the real tarballs. These were then<br/> uploaded to PAUSE.<br/><br/> 4. The PAUSE indexer failed on these because they were not marked as<br/> &quot;stable&quot; according to the META.json file inside them.<br/><br/> 5. I rebuilt the tarballs with updated META.json<br/><br/> 6. Because PAUSE doesn&#39;t let you create the same file again,<br/> these were uploaded with &quot;a&quot; suffix on the filename.<br/><br/> 7. The tests in these were still failing; specifically<br/> t/porting/regen.t<br/><br/>At this point I decided I wasn&#39;t going to have a third attempt, as I<br/>was not in a good mental state to continue. I took a step back to have<br/>another look the next day.<br/><br/>After some poking around the weekend we eventually came to the<br/>conclusion to abandon those version numbers and rebuild the next<br/>numbers - 5.34.3, 5.36.3, 5.38.2.<br/><br/>What went wrong:<br/><br/> 1. First time, I forgot to rebuild META.json - because it&#39;s a<br/> separate manual step in the RMG, somewhat hard to notice because<br/> of the wording of the RMG. Also I wasn&#39;t really thinking it would<br/> be a discrete step, since when using more regular tools for<br/> building CPAN modules (&quot;./Build dist&quot; or &quot;make dist&quot;) that would<br/> be included there anyway.<br/><br/> 2. I rebuilt the META.json file by running &quot;perl&quot; not &quot;./perl&quot; so it<br/> wrote the wrong version number of JSON::PP into the file. This<br/> wouldn&#39;t normally really matter, except for the fact that<br/> t/porting/regen.t demands a byte-for-byte perfect copy to be<br/> recreated.<br/><br/> 3. Also Module::CoreList was wrong in several ways; having missed the<br/> update of itself in any of the releases, and also declaring<br/> information about the upcoming 5.39.6 release that didn&#39;t even<br/> exist at that point.<br/><br/><br/>Extenuating factors:<br/><br/> * Many porting scripts differ in behaviour. Some work in<br/> workdirs, some do not. Some require `git clean -dxf`, some require<br/> the built perl<br/><br/> * Some porting scripts *require* the built perl but do not complain<br/> if not run using it, and therefore break in subtle ways<br/><br/> * Module::CoreList continues not to have any tooling around updating<br/> it, especially for nontrivial setups like this<br/><br/> * CI tests did in fact pick up on these issues, but I didn&#39;t notice,<br/> because CI tests *always* fail for various spurious reasons. I<br/> have taken to ignoring any failure notifications. <br/> Example: i386 never works - <br/> https://github.com/Perl/perl-security/actions/runs/7020092773/job/19099577640<br/> Win32 never works -<br/> https://github.com/Perl/perl-security/actions/runs/7020092773/job/19099579131<br/><br/><br/>Suggestions to fix avoid in future<br/><br/> * Fix up many of the scripts to work in git worktrees<br/><br/> * Early bailout if run using systemperl for those scripts that must<br/> be run on the built perl<br/><br/> * Tooling to help automate the Module::CoreList process. At the very<br/> least its own module should always be updated in every block; as<br/> should B::Opcode and Config.<br/><br/> * Further consider if we need to keep the &quot;next upcoming release&quot; in<br/> blead&#39;s Module/CoreList.pm at all; as it complicates<br/> out-of-sequence maint releases in this process<br/><br/> * Streamlining of the RMG to reduce the number of steps overall,<br/> combine more testing phases, less build/clean/build/clean...<br/><br/> * Also update the wording / formatting of the RMG, making it much<br/> easier to see which steps apply to which kinds of release<br/><br/> * Fix up / skip / ignore the always-failing or flaky CI tests, so<br/> that failure messages become useful signals and not noise.<br/><br/>-- <br/>Paul &quot;LeoNerd&quot; Evans<br/><br/>leonerd@leonerd.org.uk | https://metacpan.org/author/PEVANS<br/>http://www.leonerd.org.uk/ | https://www.tindie.com/stores/leonerd/<br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267491.html Wed, 06 Dec 2023 10:58:47 +0000 Re: Summary: Proposed change to Corinna OOP system by Darren Duncan On 2023-12-05 10:52 p.m., Ovid wrote:<br/>&gt; Tempting because that gets us back to a single keyword and avoids the<br/>&gt; attribute collision problem&mdash;until you extend that beyond public/private and<br/>&gt; needs attributes for metadata and those attributes are tied to a single<br/>&gt; keyword (e.g., `&cedil;trusted foo () :access(Some::Classes) { ... }` )<br/><br/>Does anyone think there is value to support naming the trusted classes on a <br/>per-method basis rather than simply on a per-class basis?<br/><br/>I previously recommended just enumerate the trusted classes at the class level <br/>and the only thing on the method itself is the boolean :trusted.<br/><br/>Even Raku which is the only language I know of to have trusts on a per-class <br/>basis in contrast to being on a per-library basis, declares the list at the <br/>class level, per this example from the Raku docs:<br/><br/> class A {<br/> trusts B;<br/> has $!foo;<br/> method !foo { return-rw $!foo }<br/> method raku { &quot;A.new(foo =&gt; $!foo)&quot; }<br/> };<br/><br/>And AFAIK the Raku version doesn&#39;t have per-method granularity at all; you just <br/>declare at the class level the trusts and then any method of B may call any <br/>method of A.<br/><br/>I feel we can do better than Raku at marking individual methods for trusting, <br/>meaning we can still also have other methods that are actually private, per the <br/>example of C#/Java/etc.<br/><br/>-- Darren Duncan<br/><br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267490.html Wed, 06 Dec 2023 09:03:47 +0000 Re: Summary: Proposed change to Corinna OOP system by Ovid On Wed, Dec 6, 2023 at 2:04&acirc;&#128;&macr;AM Chris Prather &lt;chris@prather.org&gt; wrote: <br/> <br/> <br/>&gt; I really just want `method foo() { }` with no visibility attribute to be a <br/>&gt; compile time error and not to default to `method foo :private () {}`. <br/>&gt; <br/> <br/>Being rather tired of pushing the rock up the hill, I was tempted to not <br/>post my summary reply. Now I&#39;m glad I did because it&#39;s clear that I <br/>misunderstood your intent. <br/> <br/>I would be *delighted* if a method with no visibility attribute was a <br/>compile-time error. It&#39;s more typing and devs will complain, but this <br/>suggestion neatly solves the problem. Interfaces are explicit and <br/>intentional. (well, maybe not the latter, but at least someone can&#39;t blame <br/>Perl for the mistake this time). I think we would still need a single <br/>attribute for visibility, but this gets us much closer. <br/> <br/>Best, <br/>Ovid <br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267489.html Wed, 06 Dec 2023 06:58:02 +0000 Re: Summary: Proposed change to Corinna OOP system by Ovid On Wed, Dec 6, 2023 at 6:38&acirc;&#128;&macr;AM Oodler 577 &lt;oodler577@sdf-eu.org&gt; wrote: <br/> <br/> <br/>&gt; Why not just trade &quot;method&quot; for &quot;public&quot; or &quot;private&quot;; it seems <br/>&gt; obvious what follows. I can&#39;t read Moose so idk if I got this correct, <br/>&gt; looking at what Java does having &quot;method&quot; there at all seems redundant <br/> <br/> <br/>Tempting because that gets us back to a single keyword and avoids the <br/>attribute collision problem&acirc;&#128;&#148;until you extend that beyond public/private and <br/>needs attributes for metadata and those attributes are tied to a single <br/>keyword (e.g., `&Acirc;&cedil;trusted foo () :access(Some::Classes) { ... }` ) <br/> <br/>Corinna is down to four keywords: `class`, `role`, `field`, and `method`. <br/>Those represent the four fundamental capabilities. The attributes are used <br/>to adjust those capabilities. So making `public` and `private` replacements <br/>for `method` not only goes back down the road of keyword-proliferation, it <br/>violates our KIM syntax guideline <br/>&lt;https://ovid.github.io/articles/language-design-consistency.html&gt;. <br/> <br/>Best, <br/>Ovid <br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267488.html Wed, 06 Dec 2023 06:52:17 +0000 Re: Summary: Proposed change to Corinna OOP system by Oodler 577 via perl5-porters * Chris Prather &lt;chris@prather.org&gt; [2023-12-05 20:03:57 -0500]:<br/><br/>&gt; On Tue, Dec 5, 2023 at 4:21?AM Ovid &lt;curtis.poe@gmail.com&gt; wrote:<br/>&gt; <br/>&gt; &gt;<br/>&gt; &gt; Chris Prather would have supported the idea if it could be known at<br/>&gt; &gt; compile time if `$object-&gt;foo` was trying to call a method it can&#39;t call,<br/>&gt; &gt; but given Perl&#39;s nature, that&#39;s probably impossible. I *think* he might<br/>&gt; &gt; have supported it if all methods had to declare their visibility.<br/>&gt; &gt;<br/>&gt; &gt;<br/>&gt; I really just want `method foo() { }` with no visibility attribute to be a<br/>&gt; compile time error and not to default to `method foo :private () {}`.<br/>&gt; <br/>&gt; Take for example the following scenario.<br/>&gt; <br/>&gt; We have code that generates an index page in our site generator:<br/>&gt; ```<br/>&gt; package Index;<br/>&gt; use Moose;<br/>&gt; <br/>&gt; has entries =&gt; (<br/>&gt; isa =&gt; &#39;ArrayRef[Object]&#39;,<br/>&gt; traits =&gt; [&#39;Array&#39;],<br/>&gt; required =&gt; 1,<br/>&gt; handles =&gt; {<br/>&gt; entries =&gt; &#39;elements&#39;,<br/>&gt; size =&gt; &#39;count&#39;,<br/>&gt; },<br/>&gt; );<br/>&gt; <br/>&gt; sub render_fragment_HTML ($self, $renderer) {<br/>&gt; return join &quot;\n&quot; =&gt; (<br/>&gt; &#39;&lt;div class=&quot;index&quot;&gt;&#39; ,<br/>&gt; map { $_-&gt;render_fragment($renderer) } $self-&gt;entries,<br/>&gt; &#39;&lt;/div&gt;&#39;<br/>&gt; );<br/>&gt; }<br/>&gt; ```<br/>&gt; If I were to hand this to a new-to-perl developer and say &quot;update this to<br/>&gt; use the class feature&quot; this is IMO the obvious translation:<br/>&gt; ```<br/>&gt; class Index {<br/>&gt; field $entries :param;<br/>&gt; <br/>&gt; method entries { @$entires }<br/>&gt; method size { scalar @$entries }<br/>&gt; <br/>&gt; method render_fragment_HTML ($renderer) {<br/>&gt; return join &quot;\n&quot; =&gt; (<br/>&gt; &#39;&lt;div class=&quot;index&quot;&gt;&#39; ,<br/>&gt; map { $_-&gt;render_fragment($renderer) } @$entries,<br/>&gt; &#39;&lt;/div&gt;&#39;<br/>&gt; );<br/>&gt; }<br/>&gt; }<br/>&gt; ```<br/><br/>Why not just trade &quot;method&quot; for &quot;public&quot; or &quot;private&quot;; it seems<br/>obvious what follows. I can&#39;t read Moose so idk if I got this correct,<br/>looking at what Java does having &quot;method&quot; there at all seems redundant.<br/><br/>```<br/>class Index {<br/> field $entries :param;<br/><br/> private entries { @$entires }<br/> private size { scalar @$entries }<br/><br/> public render_fragment_HTML ($renderer) {<br/> return join &quot;\n&quot; =&gt; (<br/> &#39;&lt;div class=&quot;index&quot;&gt;&#39; ,<br/> map { $_-&gt;render_fragment($renderer) } @$entries,<br/> &#39;&lt;/div&gt;&#39;<br/> );<br/> }<br/>}<br/>```<br/><br/>But idk, this might conflict somehow with something else. I just saw that<br/>and wanted to mention it.<br/><br/>Cheers,<br/>Brett<br/><br/>&gt; Under the proposal this would throw a runtime error because we changed the<br/>&gt; visibility of `render_fragment_HTML` from public to private. Preventing it<br/>&gt; from then ending up in production relies on one of the following:<br/>&gt; * someone notices the _abscence_ of `:public` in a code review ? not<br/>&gt; traditionally something humans are good at<br/>&gt; * someone notices an error message in what might be a noisy stream of<br/>&gt; logging information ? not traditionally something humans are good at<br/>&gt; * a test suite that is comprehensive enough for this to cause a test<br/>&gt; failure ? not traditionally something codebases are good at<br/>&gt; <br/>&gt; A compile time exception IMO gives us the best chance to catch it before<br/>&gt; production.<br/>&gt; <br/>&gt; -Chris<br/><br/>-- <br/>oodler@cpan.org ~&gt; oodler577@sdf-eu.org<br/>SDF-EU Public Access UNIX System - http://sdfeu.org<br/>irc.perl.org #openmp #pdl #native<br/>gopher://sdfeu.org/1/users/oodler577/<br/><br/>Carl Spackler: [preparing to dynamite the gopher tunnel] In the<br/>immortal words of Jean Paul Sartre, Au revoir, gopher.<br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267487.html Wed, 06 Dec 2023 05:38:56 +0000 Re: Summary: Proposed change to Corinna OOP system by Darren Duncan On 2023-12-05 5:03 p.m., Chris Prather wrote:<br/>&gt; On Tue, Dec 5, 2023 at 4:21&#x202F;AM Ovid &lt;curtis.poe@gmail.com&gt; wrote:<br/>&gt;&gt; Chris Prather would have supported the idea if it could be known at<br/>&gt;&gt; compile time if `$object-&gt;foo` was trying to call a method it can&#39;t call,<br/>&gt;&gt; but given Perl&#39;s nature, that&#39;s probably impossible. I *think* he might<br/>&gt;&gt; have supported it if all methods had to declare their visibility.<br/>&gt;<br/>&gt; I really just want `method foo() { }` with no visibility attribute to be a<br/>&gt; compile time error and not to default to `method foo :private () {}`.<br/><br/>I agree with you, and would prefer that it is mandatory to have a visibility <br/>trait, and there is no default.<br/><br/>So what if it is a bit more verbose, its only one extra short word per method, <br/>not per line, and helps avoid so many bugs, or lost developer productivity from <br/>looking at code and trying to figure out what it does.<br/><br/>-- Darren Duncan<br/><br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267486.html Wed, 06 Dec 2023 04:10:26 +0000 Perl 5 Commit Summary by Perl 5 commit summary Perl 5 commit summary, activity since Saturday<br/><br/>Current branch blead<br/>32 commits. 4 unique authors. 3 unique committers.<br/>18 files changed, 986 insertions(+), 217 deletions(-)<br/>Thanks, applied: Karl Williamson (1)<br/>Snapshot: http://github.com/Perl/perl5/tarball/450676c25a73a935<br/><br/> perldebug.pod: Fix broken link<br/> Karl Williamson 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/450676c25a73a935<br/><br/> x-yuri is now a Perl author<br/> Karl Williamson 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/e38a781ec51e0ab0<br/><br/> perldebug: clarify the readline support<br/> x-yuri 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/79950615ae6d4a4c<br/><br/> perldelta for fea90cfbe1f<br/> Tony Cook 1 file changed, 5 insertions(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/20b9297558d49b1e<br/><br/> grow the tmps (mortal) stack exponentially rather than linearly<br/> Tony Cook 1 file changed, 6 insertions(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/fea90cfbe1f221d5<br/><br/> [MERGE] unwrap, optimise pp_aassign() and friends<br/> David Mitchell 2 parents<br/> https://github.com/Perl/perl5/commit/7fbd97b4e807873b<br/><br/> fix Perl_rpp_is_lone() for immortals.<br/> David Mitchell 3 files changed, 36 insertions(+), 4 deletions(-<br/> https://github.com/Perl/perl5/commit/efc99d519efd5227<br/><br/> pp_aassign: move UID/GID code into separate fn<br/> David Mitchell 1 file changed, 98 insertions(+), 83 deletions(-<br/> https://github.com/Perl/perl5/commit/f54903ed18841195<br/><br/> pp_aassign: optimise: just zero hash stack elems<br/> David Mitchell 1 file changed, 19 insertions(+), 3 deletions(-)<br/> https://github.com/Perl/perl5/commit/a2677daf97ded4a3<br/><br/> pp_aassign: optimise: just zero array stack elems<br/> David Mitchell 1 file changed, 6 insertions(+), 4 deletions(-)<br/> https://github.com/Perl/perl5/commit/2a2c64dd01fc7424<br/><br/> pp_aassign: optimise: lelem++ at end of loop<br/> David Mitchell 1 file changed, 21 insertions(+), 15 deletions(-<br/> https://github.com/Perl/perl5/commit/971e9b5a17aced68<br/><br/> pp_aassign: optimise: store NULLs in L elem slots<br/> David Mitchell 1 file changed, 88 insertions(+), 9 deletions(-)<br/> https://github.com/Perl/perl5/commit/295ebb578ae1ffef<br/><br/> pp_aassign: skip copying scalars back to stack<br/> David Mitchell 1 file changed, 4 insertions(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/443b64a02939b4e8<br/><br/> pp_aassign: add is_list local variable<br/> David Mitchell 1 file changed, 6 insertions(+), 5 deletions(-)<br/> https://github.com/Perl/perl5/commit/a2515f4c681acde6<br/><br/> use rpp_foo_NN() variants in pp_aassign, pp_rv2av<br/> David Mitchell 1 file changed, 24 insertions(+), 20 deletions(-<br/> https://github.com/Perl/perl5/commit/4d8fbc55082bc848<br/><br/> Add some _NN variants of rpp_() functions.<br/> David Mitchell 5 files changed, 265 insertions(+)<br/> https://github.com/Perl/perl5/commit/cc49ed3d254ee601<br/><br/> use rpp_replace_at_norc in refassign, aassign<br/> David Mitchell 2 files changed, 22 insertions(+), 28 deletions(<br/> https://github.com/Perl/perl5/commit/0cf81d166744bf23<br/><br/> add rpp_replace_at_norc() to API<br/> David Mitchell 5 files changed, 48 insertions(+)<br/> https://github.com/Perl/perl5/commit/f11efeed3a5b76aa<br/><br/> pp_aassign: fix &quot;RC==1&quot; optimisation checks<br/> David Mitchell 1 file changed, 15 insertions(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/8915a2954e1e7a90<br/><br/> pp_aassign: remove panic check under PERL_RC_STACK<br/> David Mitchell 2 files changed, 16 insertions(+), 13 deletions(<br/> https://github.com/Perl/perl5/commit/12e444f71226b832<br/><br/> pp_aassign: optimise SV branch under PERL_RC_STACK<br/> David Mitchell 1 file changed, 3 insertions(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/5a8fb493e89e0884<br/><br/> pp_aassign: optimise HV branch under PERL_RC_STACK<br/> David Mitchell 1 file changed, 56 insertions(+), 8 deletions(-)<br/> https://github.com/Perl/perl5/commit/39a2e63986dff01f<br/><br/> pp_aassign: optimise AV branch under PERL_RC_STACK<br/> David Mitchell 1 file changed, 72 insertions(+), 9 deletions(-)<br/> https://github.com/Perl/perl5/commit/dba1d971bd26e7a0<br/><br/> make RC-stack-aware: unwrap pp_aassign()<br/> David Mitchell 1 file changed, 40 insertions(+), 26 deletions(-<br/> https://github.com/Perl/perl5/commit/eb535a3b7c3f7f88<br/><br/> make RC-stack-aware: unwrap pp_undef()<br/> David Mitchell 1 file changed, 18 insertions(+), 16 deletions(-<br/> https://github.com/Perl/perl5/commit/b5e6ad2a94d4362c<br/><br/> make RC-stack-aware: unwrap pp_refassign()<br/> David Mitchell 1 file changed, 42 insertions(+), 17 deletions(-<br/> https://github.com/Perl/perl5/commit/604c0355d21cd2bd<br/><br/> op/array.t: skip \$#{[]} test under PERL_RC_STACK<br/> David Mitchell 1 file changed, 11 insertions(+), 3 deletions(-)<br/> https://github.com/Perl/perl5/commit/a98ee9eadd3d547a<br/><br/> make RC-stack-aware: unwrap pp_emptyavhv()<br/> David Mitchell 2 files changed, 21 insertions(+), 15 deletions(<br/> https://github.com/Perl/perl5/commit/14403447b7488675<br/><br/> Hash-Util-FieldHash: fixup test on PERL_RC_STACK<br/> David Mitchell 1 file changed, 5 insertions(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/313c8957d3078015<br/><br/> add lvalue scalar alias tests to lvref.t<br/> David Mitchell 1 file changed, 18 insertions(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/b98a30fe2d289132<br/><br/> add list context tests to t/op/lvref.t<br/> David Mitchell 1 file changed, 84 insertions(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/823fcbfd95001ebd<br/><br/> document ref assignment in list context<br/> David Mitchell 1 file changed, 10 insertions(+)<br/> https://github.com/Perl/perl5/commit/08368a773f179335<br/><br/>Current branch smoke-me/khw-env<br/>164 commits. 1 unique author. 1 unique committer.<br/>146 files changed, 3484 insertions(+), 1139 deletions(-)<br/><br/>Snapshot: http://github.com/Perl/perl5/tarball/096dc4d4f45301b5<br/><br/> cleanup<br/> Karl Williamson 2 files changed, 7 insertions(+), 5 deletions(-)<br/> https://github.com/Perl/perl5/commit/096dc4d4f45301b5<br/><br/> pp_study: hook<br/> Karl Williamson 1 file changed, 4 insertions(+)<br/> https://github.com/Perl/perl5/commit/020a4c2e0baea632<br/><br/> perl.h: Fixup FAKE_MINGW<br/> Karl Williamson 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/6016a7a7eada7794<br/><br/> lib/locale.t start of setlocale failure<br/> Karl Williamson 1 file changed, 11 insertions(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/d05bd63fcc721c16<br/><br/> wrap uselocale<br/> Karl Williamson 1 file changed, 31 insertions(+), 14 deletions(-<br/> https://github.com/Perl/perl5/commit/7c56ac4d44bf2a71<br/><br/> openbsd mismatched ctype hints<br/> Karl Williamson 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/cfe5060386db608d<br/><br/> openbsd hints<br/> Karl Williamson 1 file changed, 2 insertions(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/abca44dde6314840<br/><br/> openbsd: Not thread safe locales<br/> Karl Williamson 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/8ce118e2187057ae<br/><br/> openbsd<br/> Karl Williamson 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/df8debf119c3b5a6<br/><br/> Revert &quot;locale_threads.t: Skip on OpenBSD and DragonFly threaded builds&quot;<br/> Karl Williamson 1 file changed, 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/84f78d25b7112e57<br/><br/> Revert &quot;langinfo.t&quot;<br/> Karl Williamson 1 file changed, 3 insertions(+), 12 deletions(-)<br/> https://github.com/Perl/perl5/commit/7f791574181c5c75<br/><br/> langinfo.t<br/> Karl Williamson 1 file changed, 12 insertions(+), 3 deletions(-)<br/> https://github.com/Perl/perl5/commit/77e16b3ee04ba725<br/><br/> Don&#39;t do thread-safe locales emulation on mingw<br/> Karl Williamson 2 files changed, 5 insertions(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/0753cc1684c2453c<br/><br/> locale_threads.t: Better handle weird locales<br/> Karl Williamson 1 file changed, 4 insertions(+), 6 deletions(-)<br/> https://github.com/Perl/perl5/commit/2e6ee7220e2f4e2f<br/><br/> langinfo_l<br/> Karl Williamson 1 file changed, 27 insertions(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/fe97886031b3ef69<br/><br/> final commit<br/> Karl Williamson 1 file changed, 15 insertions(+), 3 deletions(-)<br/> https://github.com/Perl/perl5/commit/f8ea1f61e5699512<br/><br/> Enable DEBUG_SETLOCALE_INCONSISTENCIES<br/> Karl Williamson 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/c4e39fb9d2de8bb4<br/><br/> Add DEBUG_SETLOCALE_INCONSISTENCIES<br/> Karl Williamson 1 file changed, 25 insertions(+)<br/> https://github.com/Perl/perl5/commit/e4e0325111463ee5<br/><br/> makedef.pl: Move comment<br/> Karl Williamson 1 file changed, 1 insertion(+), 3 deletions(-)<br/> https://github.com/Perl/perl5/commit/e44553e18af1b570<br/><br/> makedef.pl: PL_cur_locale_obj is only POSIX 2008 multiplicity<br/> Karl Williamson 1 file changed, 2 insertions(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/c15d749e7c26bc9a<br/><br/> XXX perl.h maybe drop<br/> Karl Williamson 1 file changed, 10 insertions(+), 4 deletions(-)<br/> https://github.com/Perl/perl5/commit/13a546f149a20334<br/><br/> Experimentally enable per-thread locale emulation<br/> Karl Williamson 3 files changed, 12 insertions(+), 4 deletions(-<br/> https://github.com/Perl/perl5/commit/15abb9f1991d57aa<br/><br/> femul<br/> Karl Williamson 2 files changed, 2 insertions(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/53a00e228c7fe01f<br/><br/> more emul<br/> Karl Williamson 1 file changed, 5 insertions(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/01e7bc7d51b6947e<br/><br/> more emul<br/> Karl Williamson 5 files changed, 55 insertions(+), 21 deletions(<br/> https://github.com/Perl/perl5/commit/8ab79d2ee6d81aa5<br/><br/> Add ability to emulate thread-safe locale operations<br/> Karl Williamson 14 files changed, 967 insertions(+), 100 deletio<br/> https://github.com/Perl/perl5/commit/ea80b0af50f9d742<br/><br/> locale.c: Avoid a recalculation<br/> Karl Williamson 1 file changed, 6 insertions(+)<br/> https://github.com/Perl/perl5/commit/74cb7030ada0da41<br/><br/> locale.c: Avoid unnecessary locale changes<br/> Karl Williamson 1 file changed, 18 insertions(+), 11 deletions(-<br/> https://github.com/Perl/perl5/commit/c1f5fbcc639730db<br/><br/> S_my_langinfo_i: Be sure to return in both places<br/> Karl Williamson 1 file changed, 9 insertions(+)<br/> https://github.com/Perl/perl5/commit/3a51c783ab6d27d6<br/><br/> lib/locale_threads.t: Add debugging info<br/> Karl Williamson 1 file changed, 7 insertions(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/96b8b4ba280b827b<br/><br/> lib/locale_threads.t: Change variable names<br/> Karl Williamson 1 file changed, 20 insertions(+), 20 deletions(-<br/> https://github.com/Perl/perl5/commit/af12c4e05dc697a8<br/><br/> locale.c: Change macro calls to shorter form<br/> Karl Williamson 1 file changed, 3 insertions(+), 3 deletions(-)<br/> https://github.com/Perl/perl5/commit/fdfca0a1e950b541<br/><br/> XXX msg locale.c: Refactor an #ifdef<br/> Karl Williamson 1 file changed, 9 insertions(+), 11 deletions(-)<br/> https://github.com/Perl/perl5/commit/49f4afea7076027a<br/><br/> locale.c: Rmv warning and unnecessary declaration<br/> Karl Williamson 1 file changed, 3 insertions(+), 3 deletions(-)<br/> https://github.com/Perl/perl5/commit/90f163b634661aae<br/><br/> add FAKE MING<br/> Karl Williamson 3 files changed, 11 insertions(+), 9 deletions(-<br/> https://github.com/Perl/perl5/commit/74e92f8c07b70a75<br/><br/> debug thread xs<br/> Karl Williamson 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/75212e415189a00e<br/><br/> locale.c: If strftime() fails, use a platform errno<br/> Karl Williamson 1 file changed, 17 insertions(+), 6 deletions(-)<br/> https://github.com/Perl/perl5/commit/64247d808f080ad7<br/><br/> strtod_l<br/> Karl Williamson 1 file changed, 26 insertions(+), 5 deletions(-)<br/> https://github.com/Perl/perl5/commit/d3c7d6b6fb5d5286<br/><br/> strtod<br/> Karl Williamson 1 file changed, 39 insertions(+), 61 deletions(-<br/> https://github.com/Perl/perl5/commit/4e164f55b2792d33<br/><br/> locale.c: XXX Move codeset to separate function<br/> Karl Williamson 1 file changed, 255 insertions(+), 244 deletions<br/> https://github.com/Perl/perl5/commit/43b28213e3046f5b<br/><br/> mismatched ctype<br/> Karl Williamson 1 file changed, 14 insertions(+), 9 deletions(-)<br/> https://github.com/Perl/perl5/commit/5f652024edeae1d1<br/><br/> locale.c: Move code to within only block using it<br/> Karl Williamson 1 file changed, 2 insertions(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/8111e041e10516c7<br/><br/> locale.c: Comments and white space<br/> Karl Williamson 1 file changed, 13 insertions(+), 5 deletions(-)<br/> https://github.com/Perl/perl5/commit/f916427bc23f2abc<br/><br/> locale.c: Add shortcut ruling out locale being UTF8<br/> Karl Williamson 1 file changed, 14 insertions(+)<br/> https://github.com/Perl/perl5/commit/02135a9b61d1058b<br/><br/> locale.c: Fix up some comments<br/> Karl Williamson 1 file changed, 10 insertions(+), 7 deletions(-)<br/> https://github.com/Perl/perl5/commit/84ec2bb79a334ed4<br/><br/> locale.c: Move code into another function<br/> Karl Williamson 1 file changed, 54 insertions(+), 43 deletions(-<br/> https://github.com/Perl/perl5/commit/83393e8525d3d596<br/><br/> locale.c: Move declarations, add comments<br/> Karl Williamson 1 file changed, 9 insertions(+), 10 deletions(-)<br/> https://github.com/Perl/perl5/commit/8608ae069651735d<br/><br/> locale.c: Tighten rules for detecting locale UTF-8ness<br/> Karl Williamson 1 file changed, 3 insertions(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/db33a41b3773f451<br/><br/> locale.c: S_is_locale_utf8(): &quot;C&quot; locale not UTF-8<br/> Karl Williamson 1 file changed, 4 insertions(+)<br/> https://github.com/Perl/perl5/commit/77dff2679e5b2306<br/><br/> debug populate localeconv<br/> Karl Williamson 1 file changed, 8 insertions(+)<br/> https://github.com/Perl/perl5/commit/f42c31ba67ec84fd<br/><br/> Do localeconv() adjustments immediately unthreaded<br/> Karl Williamson 1 file changed, 60 insertions(+), 16 deletions(-<br/> https://github.com/Perl/perl5/commit/dcb35661dddf924b<br/><br/> locale.c: Do an adjustment in a critical section<br/> Karl Williamson 1 file changed, 7 insertions(+), 32 deletions(-)<br/> https://github.com/Perl/perl5/commit/1297ff03e8938175<br/><br/> locale.c: Add struct definition as a fallback<br/> Karl Williamson 1 file changed, 44 insertions(+)<br/> https://github.com/Perl/perl5/commit/566dd3cd0b73639a<br/><br/> locale.c: White space only<br/> Karl Williamson 1 file changed, 91 insertions(+), 92 deletions(-<br/> https://github.com/Perl/perl5/commit/be0da6a08af824b2<br/><br/> Return C values if localeconv() not available<br/> Karl Williamson 4 files changed, 44 insertions(+), 58 deletions(<br/> https://github.com/Perl/perl5/commit/86bd6ba8d6a06e93<br/><br/> funusedarg<br/> Karl Williamson 1 file changed, 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/19d20b36446d4dd9<br/><br/> Remove unimplemented macros<br/> Karl Williamson 1 file changed, 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/20874e94c0e648df<br/><br/> XXX fleash outlocale.c: Revamp localeconv() Win32 handling<br/> Karl Williamson 1 file changed, 68 insertions(+), 61 deletions(-<br/> https://github.com/Perl/perl5/commit/8801da88fe38d0ba<br/><br/> Avoid unnecessary mutex lock on Windows<br/> Karl Williamson 1 file changed, 18 insertions(+), 6 deletions(-)<br/> https://github.com/Perl/perl5/commit/9eacdc75b56b9674<br/><br/> locale.c: Combine some preprocessor directives<br/> Karl Williamson 1 file changed, 45 insertions(+), 23 deletions(-<br/> https://github.com/Perl/perl5/commit/ae0167e995e567fd<br/><br/> localeconv: Need to toggle current locale to desired one<br/> Karl Williamson 1 file changed, 17 insertions(+), 7 deletions(-)<br/> https://github.com/Perl/perl5/commit/fad376cdd057322f<br/><br/> f rmv numeric lock from localeconv<br/> Karl Williamson 1 file changed, 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/ecc5134e560a6dbc<br/><br/> locale.c: Avoid unnecessary work around localeconv()<br/> Karl Williamson 1 file changed, 6 insertions(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/93fd61df03f1f63b<br/><br/> locale.c: Skip locale utf8ness calculation if feasible<br/> Karl Williamson 1 file changed, 2 insertions(+), 7 deletions(-)<br/> https://github.com/Perl/perl5/commit/d1c3a5efa2417b8f<br/><br/> locale.c: Use out-of-bounds value for illegality<br/> Karl Williamson 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/a239776a7d9a07dd<br/><br/> locale.c Special case localeconv for C locale<br/> Karl Williamson 1 file changed, 77 insertions(+), 77 deletions(-<br/> https://github.com/Perl/perl5/commit/6c501b430807e2b1<br/><br/> locale.c: Move some code<br/> Karl Williamson 1 file changed, 13 insertions(+), 14 deletions(-<br/> https://github.com/Perl/perl5/commit/0f88d4fb72dda88d<br/><br/> Special case localeconv when NUMERIC, MONETARY must be C<br/> Karl Williamson 4 files changed, 182 insertions(+), 61 deletions<br/> https://github.com/Perl/perl5/commit/e1293b220c6539ad<br/><br/> locale.c: Use parallel array to simplify<br/> Karl Williamson 3 files changed, 35 insertions(+), 30 deletions(<br/> https://github.com/Perl/perl5/commit/941005d44b607f06<br/><br/> locale.c: Special case some C locale values<br/> Karl Williamson 1 file changed, 30 insertions(+), 11 deletions(-<br/> https://github.com/Perl/perl5/commit/949a41974fe89c83<br/><br/> locale.c: Add some #defines<br/> Karl Williamson 1 file changed, 7 insertions(+), 3 deletions(-)<br/> https://github.com/Perl/perl5/commit/3a3cdf419ed71594<br/><br/> locale.c: Remove unused #define<br/> Karl Williamson 1 file changed, 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/a3791ecd1df09a0d<br/><br/> locale.c: Reorder some statements in a switch()<br/> Karl Williamson 1 file changed, 8 insertions(+), 9 deletions(-)<br/> https://github.com/Perl/perl5/commit/8189848434ad6dfa<br/><br/> locale.c: Move code to earlier in function<br/> Karl Williamson 1 file changed, 42 insertions(+), 37 deletions(-<br/> https://github.com/Perl/perl5/commit/598c35d42a18f66f<br/><br/> locale.c: Don&#39;t need an explicit U32<br/> Karl Williamson 3 files changed, 4 insertions(+), 4 deletions(-)<br/> https://github.com/Perl/perl5/commit/cf1380aa7db90613<br/><br/> locale.c: Simplify some localeconv() code<br/> Karl Williamson 1 file changed, 9 insertions(+), 31 deletions(-)<br/> https://github.com/Perl/perl5/commit/2a8d43d9fbdf5fdb<br/><br/> locale.c: Change parameter specification<br/> Karl Williamson 1 file changed, 14 insertions(+), 14 deletions(-<br/> https://github.com/Perl/perl5/commit/0d980ad66d15dbe1<br/><br/> locale.c: Change two #define names<br/> Karl Williamson 1 file changed, 11 insertions(+), 11 deletions(-<br/> https://github.com/Perl/perl5/commit/459d1f4c4f116735<br/><br/> locale.c: Simplify loop<br/> Karl Williamson 1 file changed, 9 insertions(+), 18 deletions(-)<br/> https://github.com/Perl/perl5/commit/9ddfea21c0f8c408<br/><br/> locale.c: Add braces, indent code<br/> Karl Williamson 1 file changed, 30 insertions(+), 27 deletions(-<br/> https://github.com/Perl/perl5/commit/821a30cbbf0adf82<br/><br/> locale.c: Silence some compiler warnings<br/> Karl Williamson 1 file changed, 10 insertions(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/e12e638c5716abca<br/><br/> locale.c: Use shorter macro form<br/> Karl Williamson 1 file changed, 8 insertions(+), 8 deletions(-)<br/> https://github.com/Perl/perl5/commit/891aa3272c27f89c<br/><br/> Revert &quot;define numeric values to be C when no USE_NUMERIC&quot;<br/> Karl Williamson 3 files changed, 2 insertions(+), 7 deletions(-)<br/> https://github.com/Perl/perl5/commit/f41f4a537c4f83ff<br/><br/> define numeric values to be C when no USE_NUMERIC<br/> Karl Williamson 3 files changed, 7 insertions(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/ac3fc3c9d4b2e709<br/><br/> Revert &quot;locale_threads: start of using platform locales&quot;<br/> Karl Williamson 1 file changed, 3 insertions(+), 3 deletions(-)<br/> https://github.com/Perl/perl5/commit/b5421a991f92c646<br/><br/> locale_threads: start of using platform locales<br/> Karl Williamson 1 file changed, 3 insertions(+), 3 deletions(-)<br/> https://github.com/Perl/perl5/commit/e72441bfc29edc43<br/><br/> Revert &quot;pp.c&quot;<br/> Karl Williamson 1 file changed, 52 deletions(-)<br/> https://github.com/Perl/perl5/commit/d9bef675e7ad5443<br/><br/> Revert &quot;pp&quot;<br/> Karl Williamson 1 file changed, 39 deletions(-)<br/> https://github.com/Perl/perl5/commit/a0dffc7084619776<br/><br/> pp<br/> Karl Williamson 1 file changed, 39 insertions(+)<br/> https://github.com/Perl/perl5/commit/5c48011df77f313b<br/><br/> XXX more work mingw<br/> Karl Williamson 1 file changed, 3 insertions(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/a514a755a17daee4<br/><br/> locale.c: Win32: We don&#39;t know the locale here<br/> Karl Williamson 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/b1e1ac1360dacb30<br/><br/> f perlembed<br/> Karl Williamson 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/75b397275d8a0bd5<br/><br/> XXX t/run/locale.t<br/> Karl Williamson 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/1e82e65120ca9f08<br/><br/> XXX config<br/> Karl Williamson 3 files changed, 3 insertions(+)<br/> https://github.com/Perl/perl5/commit/b45b72957b77e0ec<br/><br/> perllocale Xxx start of changes<br/> Karl Williamson 1 file changed, 9 insertions(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/3e4d88819feeae5e<br/><br/> perlmod<br/> Karl Williamson 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/254e453c8a9a7ba6<br/><br/> perlxs<br/> Karl Williamson 2 files changed, 488 insertions(+), 20 deletions<br/> https://github.com/Perl/perl5/commit/dbe9eeb6f3ce747a<br/><br/> reentr.pl: XXX about needing mutex<br/> Karl Williamson 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/78205119e30020c3<br/><br/> iperlsys.h: TODO need to look at adding mutexes<br/> Karl Williamson 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/d1b716b80f76f13e<br/><br/> XXX incomplete perlhacktips:<br/> Karl Williamson 1 file changed, 34 insertions(+), 3 deletions(-)<br/> https://github.com/Perl/perl5/commit/0f080abe22fb1776<br/><br/> locale.c: Change some -DLv statements to -DL<br/> Karl Williamson 1 file changed, 6 insertions(+), 6 deletions(-)<br/> https://github.com/Perl/perl5/commit/b77d5ed8f765c785<br/><br/> Debug wrap wset<br/> Karl Williamson 1 file changed, 2 insertions(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/985e604c146859b1<br/><br/> XXX util add thread to mem_log<br/> Karl Williamson 1 file changed, 15 insertions(+), 4 deletions(-)<br/> https://github.com/Perl/perl5/commit/767e2c8307bf431f<br/><br/> XXX Win32 mem log<br/> Karl Williamson 2 files changed, 11 insertions(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/85e01981bc55763f<br/><br/> locale.c: Slightly change wording of DEBUG messages<br/> Karl Williamson 1 file changed, 16 insertions(+), 15 deletions(-<br/> https://github.com/Perl/perl5/commit/4fb7969006be9120<br/><br/> Time-Piece: notes to myself<br/> Karl Williamson 1 file changed, 4 insertions(+)<br/> https://github.com/Perl/perl5/commit/2a5ecdb906373fd3<br/><br/> XXX Time::Piece strftime<br/> Karl Williamson 1 file changed, 39 insertions(+), 22 deletions(-<br/> https://github.com/Perl/perl5/commit/011e1f6be8ff092b<br/><br/> Time::Piece: Add critical sections<br/> Karl Williamson 4 files changed, 74 insertions(+), 12 deletions(<br/> https://github.com/Perl/perl5/commit/a578d340219fa945<br/><br/> thread.h: White space only<br/> Karl Williamson 1 file changed, 19 insertions(+), 19 deletions(-<br/> https://github.com/Perl/perl5/commit/1cc7df0f9bcb7211<br/><br/> Time-Piece: Use isSPACE_LC, not isspace; etc<br/> Karl Williamson 1 file changed, 39 insertions(+), 39 deletions(-<br/> https://github.com/Perl/perl5/commit/146a24c97b7372e8<br/><br/> Time-Piece: Use foldEQ_locale() if available<br/> Karl Williamson 1 file changed, 18 insertions(+), 12 deletions(-<br/> https://github.com/Perl/perl5/commit/8875859d28fcaf03<br/><br/> Time::Piece: Use reentrant API<br/> Karl Williamson 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/6bb29ba58779a4e1<br/><br/> add is_cur_locale_utf8<br/> Karl Williamson 4 files changed, 88 insertions(+)<br/> https://github.com/Perl/perl5/commit/4e1f9160ac0a9375<br/><br/> customized.dat for before Time Piece<br/> Karl Williamson 1 file changed, 5 deletions(-)<br/> https://github.com/Perl/perl5/commit/4d7f8c3c8112e79d<br/><br/> locale_threads: debugging<br/> Karl Williamson 1 file changed, 124 insertions(+)<br/> https://github.com/Perl/perl5/commit/c5c86bdd259dbf12<br/><br/> locale_threads: add a commented out yield<br/> Karl Williamson 1 file changed, 3 insertions(+)<br/> https://github.com/Perl/perl5/commit/6b6ae7c6ff582914<br/><br/> t/run/locale.t: debug<br/> Karl Williamson 1 file changed, 5 insertions(+)<br/> https://github.com/Perl/perl5/commit/b7366c0dae488389<br/><br/> Enable thread-safe locales on some freebsd versions<br/> Karl Williamson 1 file changed, 9 insertions(+), 7 deletions(-)<br/> https://github.com/Perl/perl5/commit/d8a569d40d5a1164<br/><br/> darwin<br/> Karl Williamson 1 file changed, 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/ebeb7ee9804f6539<br/><br/> pp.c<br/> Karl Williamson 1 file changed, 52 insertions(+)<br/> https://github.com/Perl/perl5/commit/828b5f091abd6981<br/><br/> darwin hints querylocale race in earlier darwins?<br/> Karl Williamson 1 file changed, 4 insertions(+)<br/> https://github.com/Perl/perl5/commit/e3f5d5e39c187ecd<br/><br/> XXX experimental: Define setlocale_i() on unsafe threaded builds<br/> Karl Williamson 1 file changed, 8 insertions(+)<br/> https://github.com/Perl/perl5/commit/3c7add7d8152008b<br/><br/> locale.c: Add a debugging statement<br/> Karl Williamson 1 file changed, 3 insertions(+)<br/> https://github.com/Perl/perl5/commit/24bb74c7e6cbfacc<br/><br/> savepv if threaded, unused I think<br/> Karl Williamson 1 file changed, 9 insertions(+)<br/> https://github.com/Perl/perl5/commit/ecad75915ab72c2d<br/><br/> S_bool_setlocale_i: Add entry assertion<br/> Karl Williamson 1 file changed, 5 insertions(+)<br/> https://github.com/Perl/perl5/commit/29509fa064c9bede<br/><br/> S_querylocale_2008_i: Add entry assertion<br/> Karl Williamson 1 file changed, 4 insertions(+)<br/> https://github.com/Perl/perl5/commit/6a3b34a634acdbb1<br/><br/> loc_tools: XXX Debug<br/> Karl Williamson 1 file changed, 59 insertions(+), 4 deletions(-)<br/> https://github.com/Perl/perl5/commit/6e0e8635012da897<br/><br/> S_find_locale_from_environment: Handle disparate LC_ALL<br/> Karl Williamson 1 file changed, 36 insertions(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/4e49d3717df8afd6<br/><br/> customized.dat<br/> Karl Williamson 1 file changed, 7 insertions(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/ee0863cf16f12d21<br/><br/> drop, bug have to recompute md5<br/> Karl Williamson 1 file changed, 2 insertions(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/4ff35450da6fb608<br/><br/> 07locale.t: Add some Windows locales to try<br/> Karl Williamson 2 files changed, 70 insertions(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/a5dcc4a91a4681aa<br/><br/> XXX perl.h: Debugging mutex lock&#39;<br/> Karl Williamson 1 file changed, 17 insertions(+)<br/> https://github.com/Perl/perl5/commit/0d7835f29e66a938<br/><br/> lib/locale.t<br/> Karl Williamson 1 file changed, 2 insertions(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/f590e260f9608e0b<br/><br/> lib/locale.t FILE debug<br/> Karl Williamson 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/750a63e709fa4382<br/><br/> XXX temp: lib/locale.t: debug<br/> Karl Williamson 1 file changed, 7 insertions(+)<br/> https://github.com/Perl/perl5/commit/b0b65eabe8bd96f4<br/><br/> threads.xs DEBUG_U<br/> Karl Williamson 1 file changed, 64 insertions(+)<br/> https://github.com/Perl/perl5/commit/60939fc1e327b617<br/><br/> debug thread<br/> Karl Williamson 2 files changed, 18 insertions(+)<br/> https://github.com/Perl/perl5/commit/b1ca88fdafe0225f<br/><br/> XXX memlog<br/> Karl Williamson 3 files changed, 6 insertions(+), 6 deletions(-)<br/> https://github.com/Perl/perl5/commit/240cb131e89fd5bf<br/><br/> S_clear_placeholders(): Fix compiler warning<br/> Karl Williamson 2 files changed, 2 insertions(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/a2bf7cc3f8928452<br/><br/> uvoffuni_to_utf8_flags_msgs(): Fix compiler warning<br/> Karl Williamson 3 files changed, 3 insertions(+), 3 deletions(-)<br/> https://github.com/Perl/perl5/commit/dee52f2f14d7d178<br/><br/> regnode_after(): Fix compiler warning<br/> Karl Williamson 2 files changed, 2 insertions(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/ce3767f0c6cb55cf<br/><br/> newSVbool(): Fix compiler warning<br/> Karl Williamson 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/168912d0929fa8b8<br/><br/> ruler<br/> Karl Williamson 1 file changed, 2 insertions(+)<br/> https://github.com/Perl/perl5/commit/7c57ace7b3535e10<br/><br/> perl.h: Fake up win32 compile a bit<br/> Karl Williamson 1 file changed, 4 insertions(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/a9cc48ba2cb9a265<br/><br/> XXX temporary: Allow undef LC_ALL<br/> Karl Williamson 2 files changed, 15 insertions(+), 2 deletions(-<br/> https://github.com/Perl/perl5/commit/734064e665d2dfd9<br/><br/> XXX skip syslog tests because fail without LC_TIME<br/> Karl Williamson 2 files changed, 2 insertions(+)<br/> https://github.com/Perl/perl5/commit/71aa33a52b5476eb<br/><br/> XXX temp to test broken lconv on non-Windows<br/> Karl Williamson 1 file changed, 6 insertions(+)<br/> https://github.com/Perl/perl5/commit/e1f3fc84e2e13717<br/><br/> XXX skip cmp_version.t because of sym links<br/> Karl Williamson 1 file changed, 2 insertions(+)<br/> https://github.com/Perl/perl5/commit/046b590919746c4b<br/><br/> XXX skip Archive-Tar because of symlinks<br/> Karl Williamson 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/61e53ba5bf70d1da<br/><br/> version 07locale.t should use LC_NUMERIC, not ALL<br/> Karl Williamson 2 files changed, 5 insertions(+), 5 deletions(-)<br/> https://github.com/Perl/perl5/commit/1bf41048fd628359<br/><br/> XXX skip cmp_version.t prob. due to 5.38 tag issue<br/> Karl Williamson 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/6a1fcea3d91fd51b<br/><br/> version::07locale.t: Use I18N::Langinfo, not POSIX::localeconv()<br/> Karl Williamson 2 files changed, 17 insertions(+), 4 deletions(-<br/> https://github.com/Perl/perl5/commit/4149884393176b38<br/><br/> XXX run/locale.t: maybe f move test<br/> Karl Williamson 1 file changed, 18 insertions(+), 15 deletions(-<br/> https://github.com/Perl/perl5/commit/5ef49866f20eab64<br/><br/> run/locale.t: more debug<br/> Karl Williamson 1 file changed, 3 insertions(+), 3 deletions(-)<br/> https://github.com/Perl/perl5/commit/4acd191e64d8b5ec<br/><br/> Revert &quot;XXX test.pl: dont unlink temps&quot;<br/> Karl Williamson 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/25b6e4f23c5d7524<br/><br/> XXX test.pl: dont unlink temps<br/> Karl Williamson 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/0c09b3994e7e2f7f<br/><br/> Split t/uni/variables.t into multiple tests<br/> Karl Williamson 27 files changed, 384 insertions(+), 17 deletion<br/> https://github.com/Perl/perl5/commit/545e20b5195e4596<br/><br/> XXX temp: dist/Tie-File/t/29a_upcopy.t: Up alarm<br/> Karl Williamson 21 files changed, 592 insertions(+), 5 deletions<br/> https://github.com/Perl/perl5/commit/bb0bb26d30e4a642<br/><br/> XXX skip cpan testing<br/> Karl Williamson 1 file changed, 6 insertions(+)<br/> https://github.com/Perl/perl5/commit/1a86398006736819<br/><br/> skip bincompat.t<br/> Karl Williamson 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/46e7ceb763e1f62d<br/><br/> XXX skip croak.t under sanitizer<br/> Karl Williamson 1 file changed, 3 insertions(+)<br/> https://github.com/Perl/perl5/commit/f61838c07ab6566b<br/><br/> XXX t/harness temp tweaks<br/> Karl Williamson 1 file changed, 8 insertions(+), 4 deletions(-)<br/> https://github.com/Perl/perl5/commit/f291806148c9a09e<br/><br/> BlackBox dont use rare scripts<br/> Karl Williamson 1 file changed, 136 insertions(+)<br/> https://github.com/Perl/perl5/commit/9e41ef7af8c8296c<br/><br/> mktables more verbose<br/> Karl Williamson 6 files changed, 25 insertions(+), 12 deletions(<br/> https://github.com/Perl/perl5/commit/bd55a40ab19b663c<br/><br/>Current branch smoke-me/tonyc/21661-no-warn-ck<br/>2 commits. 1 unique author. 1 unique committer.<br/>97 files changed, 1084 insertions(+), 161 deletions(-)<br/><br/>Snapshot: http://github.com/Perl/perl5/tarball/72efebc0b5e4d07f<br/><br/> safer cleanup when failing to compile regexps<br/> Tony Cook 2 files changed, 37 insertions(+), 30 deletions(<br/> https://github.com/Perl/perl5/commit/72efebc0b5e4d07f<br/><br/> add tests for #21661<br/> Tony Cook 1 file changed, 17 insertions(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/a28a6c184ced58a3<br/><br/>New branch davem/rc5<br/>6 commits. 1 unique author. 1 unique committer.<br/><br/>Snapshot: http://github.com/Perl/perl5/tarball/408102c3f022dd75<br/><br/> remove unused tryAMAGICunTARGETlist macro<br/> David Mitchell 1 file changed, 47 deletions(-)<br/> https://github.com/Perl/perl5/commit/408102c3f022dd75<br/><br/> make RC-stack-aware: pp_readline(), pp_glob() etc<br/> David Mitchell 4 files changed, 366 insertions(+), 81 deletions<br/> https://github.com/Perl/perl5/commit/ccf9d66e8acd5f1e<br/><br/> expand tryAMAGICunTARGETlist() macro<br/> David Mitchell 3 files changed, 80 insertions(+), 2 deletions(-<br/> https://github.com/Perl/perl5/commit/eb7b2708f8cd2c8e<br/><br/> IO::getline() handle OPf_STACKED better<br/> David Mitchell 1 file changed, 10 insertions(+), 4 deletions(-)<br/> https://github.com/Perl/perl5/commit/ebb1b1fd72233a35<br/><br/> IO::getline(): use CALLRUNOPS<br/> David Mitchell 1 file changed, 5 insertions(+), 4 deletions(-)<br/> https://github.com/Perl/perl5/commit/3b66035813f06f9f<br/><br/> make RC-stack-aware: unwrap pp_index()<br/> David Mitchell 1 file changed, 30 insertions(+), 16 deletions(-<br/> https://github.com/Perl/perl5/commit/877112385c9ef694<br/><br/>Deleted branch davem/rc4<br/><br/>Ignored 49 GitHub auto-generated merge commits<br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267485.html Wed, 06 Dec 2023 03:11:40 +0000 Re: Summary: Proposed change to Corinna OOP system by Chris Prather On Tue, Dec 5, 2023 at 4:21&acirc;&#128;&macr;AM Ovid &lt;curtis.poe@gmail.com&gt; wrote: <br/> <br/>&gt; <br/>&gt; Chris Prather would have supported the idea if it could be known at <br/>&gt; compile time if `$object-&gt;foo` was trying to call a method it can&#39;t call, <br/>&gt; but given Perl&#39;s nature, that&#39;s probably impossible. I *think* he might <br/>&gt; have supported it if all methods had to declare their visibility. <br/>&gt; <br/>&gt; <br/>I really just want `method foo() { }` with no visibility attribute to be a <br/>compile time error and not to default to `method foo :private () {}`. <br/> <br/>Take for example the following scenario. <br/> <br/>We have code that generates an index page in our site generator: <br/>``` <br/>package Index; <br/>use Moose; <br/> <br/>has entries =&gt; ( <br/> isa =&gt; &#39;ArrayRef[Object]&#39;, <br/> traits =&gt; [&#39;Array&#39;], <br/> required =&gt; 1, <br/> handles =&gt; { <br/> entries =&gt; &#39;elements&#39;, <br/> size =&gt; &#39;count&#39;, <br/> }, <br/>); <br/> <br/>sub render_fragment_HTML ($self, $renderer) { <br/> return join &quot;\n&quot; =&gt; ( <br/> &#39;&lt;div class=&quot;index&quot;&gt;&#39; , <br/> map { $_-&gt;render_fragment($renderer) } $self-&gt;entries, <br/> &#39;&lt;/div&gt;&#39; <br/> ); <br/>} <br/>``` <br/>If I were to hand this to a new-to-perl developer and say &quot;update this to <br/>use the class feature&quot; this is IMO the obvious translation: <br/>``` <br/>class Index { <br/> field $entries :param; <br/> <br/> method entries { @$entires } <br/> method size { scalar @$entries } <br/> <br/> method render_fragment_HTML ($renderer) { <br/> return join &quot;\n&quot; =&gt; ( <br/> &#39;&lt;div class=&quot;index&quot;&gt;&#39; , <br/> map { $_-&gt;render_fragment($renderer) } @$entries, <br/> &#39;&lt;/div&gt;&#39; <br/> ); <br/> } <br/>} <br/>``` <br/>Under the proposal this would throw a runtime error because we changed the <br/>visibility of `render_fragment_HTML` from public to private. Preventing it <br/>from then ending up in production relies on one of the following: <br/>* someone notices the _abscence_ of `:public` in a code review &acirc;&#128;&brvbar; not <br/>traditionally something humans are good at <br/>* someone notices an error message in what might be a noisy stream of <br/>logging information &acirc;&#128;&brvbar; not traditionally something humans are good at <br/>* a test suite that is comprehensive enough for this to cause a test <br/>failure &acirc;&#128;&brvbar; not traditionally something codebases are good at <br/> <br/>A compile time exception IMO gives us the best chance to catch it before <br/>production. <br/> <br/>-Chris <br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267484.html Wed, 06 Dec 2023 01:04:11 +0000 Re: Summary: Proposed change to Corinna OOP system by Lukas Mai <br/><br/>On 05.12.23 22:05, Ovid wrote:<br/>&gt; On Tue, Dec 5, 2023 at 7:09&#x202F;PM Paul &quot;LeoNerd&quot; Evans <br/>&gt; &lt;leonerd@leonerd.org.uk &lt;mailto:leonerd@leonerd.org.uk&gt;&gt; wrote:<br/>&gt; <br/>&gt; Already existing Perl attributes have no worries about duplicate<br/>&gt; application.<br/>&gt; <br/>&gt; &nbsp; $ perl -E &#39;my $n; sub x :lvalue :lvalue { $n } x = 123; say $n&#39;<br/>&gt; &nbsp; 123<br/>&gt; <br/>&gt; So suddenly disallowing it in places like this would be a departure<br/>&gt; from that behaviour.<br/>&gt; <br/>&gt; `perldoc attributes` says this:<br/>&gt; <br/>&gt; &quot;WARNING: attribute declarations for variables are still evolving. The <br/>&gt; semantics and interfaces of such declarations could change in future <br/>&gt; versions. They are present for purposes of experimentation with what the <br/>&gt; semantics ought to be. Do not rely on the current implementation of this <br/>&gt; feature.&quot;<br/>&gt; <br/>&gt; As far as I can tell, duplicate attribute behavior is not specified.<br/><br/>Kind of besides the point, but the quoted section is specifically about <br/>variable attributes, not subs.<br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267483.html Tue, 05 Dec 2023 21:08:33 +0000 Re: Summary: Proposed change to Corinna OOP system by Ovid On Tue, Dec 5, 2023 at 7:09&acirc;&#128;&macr;PM Paul &quot;LeoNerd&quot; Evans &lt;leonerd@leonerd.org.uk&gt; <br/>wrote: <br/> <br/> <br/>&gt; Already existing Perl attributes have no worries about duplicate <br/>&gt; application. <br/>&gt; <br/>&gt; $ perl -E &#39;my $n; sub x :lvalue :lvalue { $n } x = 123; say $n&#39; <br/>&gt; 123 <br/>&gt; <br/>&gt; So suddenly disallowing it in places like this would be a departure <br/>&gt; from that behaviour. <br/> <br/> <br/>`perldoc attributes` says this: <br/> <br/>&quot;WARNING: attribute declarations for variables are still evolving. The <br/>semantics and interfaces of such declarations could change in future <br/>versions. They are present for purposes of experimentation with what the <br/>semantics ought to be. Do not rely on the current implementation of this <br/>feature.&quot; <br/> <br/>As far as I can tell, duplicate attribute behavior is not specified. <br/> <br/>Further, this doesn&#39;t answer my original question. If we disallow duplicate <br/>attributes, many potential bugs go away. What does this mean? <br/> <br/> field $size :param(width) :param(height) ;param(depth); <br/> <br/>Or if we supply :weak twice, does it get weakened twice? Certainly a class <br/>can&#39;t take multiple :isa attributes, can it? I&#39;m sure we can find plenty of <br/>other potential attributes which, if duplicated, might be surprising. <br/> <br/>Nor does it address my original concern: &quot;Eliminating the potential for <br/>many bugs or surprising behaviors seems like a win if the price we pay is <br/>eliminating an uncommon edge case.&quot; <br/> <br/>So that brings up the next question: is this a common edge case? If it&#39;s <br/>not, why cater to it when the behavior is not specified and the docs <br/>clearly state that semantics might change? <br/> <br/>Corinna is a huge addition to the Perl language. It&#39;s important we take the <br/>time to get this right. I&#39;m not saying that I&#39;m right (I concede I lost the <br/>argument about :public), but these questions should at least be answered. <br/> <br/>Best, <br/>Ovid <br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267482.html Tue, 05 Dec 2023 21:05:31 +0000 Re: Summary: Proposed change to Corinna OOP system by Paul "LeoNerd" Evans On Tue, 5 Dec 2023 18:01:06 +0100<br/>Ovid &lt;curtis.poe@gmail.com&gt; wrote:<br/><br/>&gt; Or if we supply :weak twice, does it get weakened twice? Certainly a<br/>&gt; class can&#39;t take multiple :isa attributes, can it? I&#39;m sure we can<br/>&gt; find plenty of other potential attributes which, if duplicated, might<br/>&gt; be surprising.<br/><br/>Already existing Perl attributes have no worries about duplicate<br/>application.<br/><br/> $ perl -E &#39;my $n; sub x :lvalue :lvalue { $n } x = 123; say $n&#39;<br/> 123<br/><br/>So suddenly disallowing it in places like this would be a departure<br/>from that behaviour.<br/><br/>Most attributes just turn on some behavioural flag; specifying them<br/>multiple times is idempotent.<br/><br/>-- <br/>Paul &quot;LeoNerd&quot; Evans<br/><br/>leonerd@leonerd.org.uk | https://metacpan.org/author/PEVANS<br/>http://www.leonerd.org.uk/ | https://www.tindie.com/stores/leonerd/<br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267481.html Tue, 05 Dec 2023 18:09:21 +0000 Re: Summary: Proposed change to Corinna OOP system by Ovid On Tue, Dec 5, 2023 at 3:53&acirc;&#128;&macr;PM Paul &quot;LeoNerd&quot; Evans &lt;leonerd@leonerd.org.uk&gt; <br/>wrote: <br/> <br/>&gt; &gt; I can&#39;t find the reference in the spec (I should add one), but the <br/>&gt; &gt; assumption was that no attribute could be reused on a single <br/>&gt; &gt; field/method. <br/>&gt; <br/>&gt; That&#39;s definitely not true. E.g. it&#39;s totally valid to provide multiple <br/>&gt; `:reader`s: <br/>&gt; <br/>&gt; class Cube { <br/>&gt; field $size <br/>&gt; :reader(get_width) :reader(get_height) :reader(get_depth); <br/>&gt; ... <br/>&gt; } <br/> <br/> <br/>If we disallow duplicate attributes, many potential bugs go away. What does <br/>this mean? <br/> <br/> field $size :param(width) :param(height) ;param(depth); <br/> <br/>Or if we supply :weak twice, does it get weakened twice? Certainly a class <br/>can&#39;t take multiple :isa attributes, can it? I&#39;m sure we can find plenty of <br/>other potential attributes which, if duplicated, might be surprising. <br/> <br/>The rare cases where we might want duplicate attributes can be handled <br/>better. <br/> <br/> class Cube { <br/> field $size :param; <br/> <br/> method get_width {$size} <br/> method get_height {$size} <br/> method get_depth {$size} <br/> } <br/> <br/>It&#39;s not too onerous to allow that (IMHO) because it&#39;s a rare case. <br/>Eliminating the potential for many bugs or surprising behaviors seems like <br/>a win if the price we pay is eliminating an uncommon edge case. <br/> <br/>Best, <br/>Ovid <br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267480.html Tue, 05 Dec 2023 17:01:21 +0000 Re: Summary: Proposed change to Corinna OOP system by Veesh Goldman also valid as a reasonable options in the case we&#39;re discussing if you&#39;d <br/>like your method to be accessible by subclasses AND a specific list of <br/>trusted classes. <br/> <br/> <br/> <br/>On Tue, Dec 5, 2023 at 4:53&acirc;&#128;&macr;PM Paul &quot;LeoNerd&quot; Evans &lt;leonerd@leonerd.org.uk&gt; <br/>wrote: <br/> <br/>&gt; On Tue, 5 Dec 2023 15:44:13 +0100 <br/>&gt; Ovid &lt;curtis.poe@gmail.com&gt; wrote: <br/>&gt; <br/>&gt; &gt; I can&#39;t find the reference in the spec (I should add one), but the <br/>&gt; &gt; assumption was that no attribute could be reused on a single <br/>&gt; &gt; field/method. <br/>&gt; <br/>&gt; That&#39;s definitely not true. E.g. it&#39;s totally valid to provide multiple <br/>&gt; `:reader`s: <br/>&gt; <br/>&gt; class Cube { <br/>&gt; field $size <br/>&gt; :reader(get_width) :reader(get_height) :reader(get_depth); <br/>&gt; ... <br/>&gt; } <br/>&gt; <br/>&gt; -- <br/>&gt; Paul &quot;LeoNerd&quot; Evans <br/>&gt; <br/>&gt; leonerd@leonerd.org.uk | https://metacpan.org/author/PEVANS <br/>&gt; http://www.leonerd.org.uk/ | https://www.tindie.com/stores/leonerd/ <br/>&gt; <br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267479.html Tue, 05 Dec 2023 15:03:16 +0000 Re: Summary: Proposed change to Corinna OOP system by Paul "LeoNerd" Evans On Tue, 5 Dec 2023 15:44:13 +0100<br/>Ovid &lt;curtis.poe@gmail.com&gt; wrote:<br/><br/>&gt; I can&#39;t find the reference in the spec (I should add one), but the<br/>&gt; assumption was that no attribute could be reused on a single<br/>&gt; field/method.<br/><br/>That&#39;s definitely not true. E.g. it&#39;s totally valid to provide multiple<br/>`:reader`s:<br/><br/> class Cube {<br/> field $size <br/> :reader(get_width) :reader(get_height) :reader(get_depth);<br/> ...<br/> }<br/><br/>-- <br/>Paul &quot;LeoNerd&quot; Evans<br/><br/>leonerd@leonerd.org.uk | https://metacpan.org/author/PEVANS<br/>http://www.leonerd.org.uk/ | https://www.tindie.com/stores/leonerd/<br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267478.html Tue, 05 Dec 2023 14:53:11 +0000 Re: Summary: Proposed change to Corinna OOP system by Ovid On Tue, Dec 5, 2023 at 11:30&acirc;&#128;&macr;AM Lukas Mai &lt;lukasmai.403+p5p@gmail.com&gt; <br/>wrote: <br/> <br/> <br/>&gt; I don&#39;t think you can spec your way out of invalid attribute <br/>&gt; combinations this way. What if someone does &#39;method foo <br/>&gt; :restricted(Some::Class) :restricted :restricted(isa) {}&#39;? <br/> <br/> <br/>I can&#39;t find the reference in the spec (I should add one), but the <br/>assumption was that no attribute could be reused on a single field/method. <br/> <br/> <br/>&gt; Also, does trusting Some::Class mean we transitively trust anything that <br/>&gt; isa Some::Class? <br/>&gt; <br/> <br/>Trust only happens on a &quot;per-method&quot; basis. If a method is listed as <br/>&quot;trusted&quot;, any class that is trusted can read that method. That&#39;s all it <br/>means. It doesn&#39;t mean it can read other methods (unless public) or that <br/>the other methods can read non-public methods of the trusted class. <br/> <br/>Best, <br/>Ovid <br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267477.html Tue, 05 Dec 2023 14:44:26 +0000 Re: Summary: Proposed change to Corinna OOP system by "Ruud H.G. van Tol" via perl5-porters <br/>On 2023-12-05 13:06, Darren Duncan wrote:<br/><br/>&gt; [...] But a leading underscore can serve as a shorthand for common <br/>&gt; cases as follows...<br/>&gt;<br/>&gt; These 2 things have the same meaning:<br/>&gt;<br/>&gt; &nbsp;&nbsp;&nbsp; method foo {...}<br/>&gt; &nbsp;&nbsp;&nbsp; method foo :public {...}<br/>&gt;<br/>&gt; And these 2 things have the same meaning:<br/>&gt;<br/>&gt; &nbsp;&nbsp;&nbsp; method _foo {...}<br/>&gt; &nbsp;&nbsp;&nbsp; method _foo :private {...}<br/>&gt;<br/>&gt; So a method without a leading underscore has a DEFAULT interpretation <br/>&gt; of :public, and a method named with a leading underscore has a DEFAULT <br/>&gt; interpretation of :private.<br/><br/>Warning: abstraction ahead.<br/><br/>Such a thing can also be orthogonal, implemented as a general way to <br/>imply attributes by name-patterns of (types of) things.<br/>Then it doesn&#39;t need to be part of Corinna, but could be used by it.<br/><br/>-- Ruud<br/><br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267476.html Tue, 05 Dec 2023 12:19:18 +0000 Re: Summary: Proposed change to Corinna OOP system by "Ruud H.G. van Tol" via perl5-porters <br/>On 2023-12-05 12:35, Martijn Lievaart via perl5-porters wrote:<br/>&gt; Op 05-12-2023 om 10:40 schreef Ruud H.G. van Tol via perl5-porters:<br/>&gt;&gt; On 2023-12-05 10:21, Ovid wrote:<br/>&gt;&gt;&gt; [...]<br/>&gt;&gt;&gt; The current spec assumes a boolean for visibility: private or not <br/>&gt;&gt;&gt; private. That&#39;s far too limiting, so having a single attribute would <br/>&gt;&gt;&gt; be warranted here to allow for future expansion. [...]<br/>&gt;&gt;<br/>&gt;&gt; I would still like to be able to set the method-default to private <br/>&gt;&gt; lexically, so for my own code corner.<br/>&gt;&gt; I didn&#39;t think through how that would best be facilitated, so I&#39;m <br/>&gt;&gt; just brain-farting here:<br/>&gt;&gt; use Corinna qw( :default(methods:private) );<br/>&gt;<br/>&gt; In general, I like this method. But I&#39;d say it needs some <br/>&gt; bikeshedding, as I find the implementation ugly and non trivial to <br/>&gt; remember. Hard pressed to come up with an alternative though. How about:<br/>&gt; use Corinna qw(:methods_private);<br/><br/>Indeed, that is as canonical as it can be.<br/><br/>Probably better to not have a plural in there, somehow seems better to <br/>stick to the keyword.<br/><br/>I presume this will become supported:<br/><br/>use Corinna :private( method, ... );<br/><br/>-- Ruud<br/><br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267475.html Tue, 05 Dec 2023 12:10:11 +0000 Re: Summary: Proposed change to Corinna OOP system by Darren Duncan On 2023-12-05 1:21 a.m., Ovid wrote:<br/>&gt; `method _foo` uses current conventions, but it&#39;s kind of a hack that<br/>&gt; overloads the identifier meaning. Opinions were mixed. Further, if we want<br/>&gt; to have things like trusted and protected methods, what would it mean if a<br/>&gt; leading underscore meant &quot;private&quot; and then we declared a method to be<br/>&gt; trusted or protected? (same issue with using `my` and protected and trusted)<br/><br/>I still feel that changing visibility based on the name is a bad idea and I <br/>would rather we didn&#39;t have it.<br/><br/>However...<br/><br/>As a compromise, I propose the following...<br/><br/>The primary way to indicate visibility is with traits like :private/:public/etc, <br/>and for any methods where these are present, they unambiguously take priority.<br/><br/>But a leading underscore can serve as a shorthand for common cases as follows...<br/><br/>These 2 things have the same meaning:<br/><br/> method foo {...}<br/> method foo :public {...}<br/><br/>And these 2 things have the same meaning:<br/><br/> method _foo {...}<br/> method _foo :private {...}<br/><br/>So a method without a leading underscore has a DEFAULT interpretation of <br/>:public, and a method named with a leading underscore has a DEFAULT <br/>interpretation of :private.<br/><br/>If there are ANY explicit visibility traits, all defaults are ignored.<br/><br/>For any other visibility levels, it is mandatory to use the trait to get them.<br/><br/>&gt; `method foo :private` is the current spec, but it creates another potential<br/>&gt; issue. If we have more types of visibility (trusted or protected), we might<br/>&gt; ultimately create a situation we worked hard to avoid with field variable<br/>&gt; attributes: illegal combinations.<br/>&gt; <br/>&gt; method foo :private :trusted(Some::Class::*) :protected ($bar) { ... }<br/>&gt; <br/>&gt; The above doesn&#39;t make sense and we don&#39;t want to write code that needs to<br/>&gt; validate all attribute combinations are valid. That will likely be buggy,<br/>&gt; slower, and the code could be more confusing.<br/><br/>One way to resolve this is to raise an error that either prevents compilation <br/>(ideally) or dies at runtime when an illegal combination is detected.<br/><br/>An alternate way to resolve this is to logically &quot;or&quot; all of the explicit <br/>visibility traits; if any used trait allows a caller, the caller is allowed, <br/>even if other traits don&#39;t.<br/><br/>That said, the only situation where I would consider a combination useful is to <br/>combine trusted with protected, in the scenario where the subclasses may be <br/>written by third parties.<br/><br/>So while possibly hackish and risking a combinatorial explosion (but probably <br/>not), we could have 5 traits which cover everything: &quot;private&quot;, &quot;trusted&quot;, <br/>&quot;protected&quot;, &quot;trusted_or_protected&quot;, &quot;public&quot;.<br/><br/>Now on a related matter, I strongly believe that defining the list of classes we <br/>trust at the method level is a bad idea for the general case of verbosity. What <br/>if you want to trust say 30 classes because that&#39;s how big your library is, and <br/>each one might call 100 methods.<br/><br/>I believe it is best for every visibility trait on the method itself to just be <br/>a boolean without arguments, and that the list of classes being trusted should <br/>be defined elsewhere.<br/><br/>If we don&#39;t want to have the separately defined library thing, then each class <br/>should just define once for the entire class what other classes it trusts, and <br/>then that list is used for any methods marked :trusted.<br/><br/>For example:<br/><br/> class Foo {<br/> trusts Bar, Baz;<br/> method quux :trusted {...}<br/> }<br/><br/>-- Darren Duncan<br/><br/><br/><br/><br/><br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267474.html Tue, 05 Dec 2023 12:06:53 +0000 Re: Summary: Proposed change to Corinna OOP system by Darren Duncan On 2023-12-05 2:30 a.m., Lukas Mai wrote:<br/>&gt; Also, does trusting Some::Class mean we transitively trust anything that isa <br/>&gt; Some::Class?<br/><br/>It depends what you mean by that.<br/><br/>The whole point of trusting is to define an exclusive list, which in this case <br/>means one can only be called by methods defined in Some::Class itself, and not <br/>by methods defined in sub-classes of Some::Class.<br/><br/>So trusting should work when Some::Class is subclassed, but it shouldn&#39;t be a <br/>way for authors who didn&#39;t write Some::Class to invite themselves to the <br/>exclusive access of our class.<br/><br/>-- Darren Duncan<br/><br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267473.html Tue, 05 Dec 2023 11:45:41 +0000 Re: Summary: Proposed change to Corinna OOP system by Martijn Lievaart via perl5-porters <br/>Op 05-12-2023 om 10:40 schreef Ruud H.G. van Tol via perl5-porters:<br/>&gt;<br/>&gt; On 2023-12-05 10:21, Ovid wrote:<br/>&gt;&gt; [...]<br/>&gt;&gt; The current spec assumes a boolean for visibility: private or not <br/>&gt;&gt; private. That&#39;s far too limiting, so having a single attribute would <br/>&gt;&gt; be warranted here to allow for future expansion. [...]<br/>&gt;<br/>&gt; I would still like to be able to set the method-default to private <br/>&gt; lexically, so for my own code corner.<br/>&gt;<br/>&gt; I didn&#39;t think through how that would best be facilitated, so I&#39;m just <br/>&gt; brain-farting here:<br/>&gt; use Corinna qw( :default(methods:private) );<br/>&gt;<br/><br/>In general, I like this method. But I&#39;d say it needs some bikeshedding, <br/>as I find the implementation ugly and non trivial to remember. Hard <br/>pressed to come up with an alternative though. How about:<br/><br/><br/>use Corinna qw(:methods_private);<br/><br/><br/>HTH,<br/><br/>M4<br/><br/><br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267472.html Tue, 05 Dec 2023 11:35:30 +0000 Re: Summary: Proposed change to Corinna OOP system by Lukas Mai On 05.12.23 10:21, Ovid wrote:<br/>&gt; `method foo :private` is the current spec, but it creates another <br/>&gt; potential issue. If we have more types of visibility (trusted or <br/>&gt; protected), we might ultimately create a situation we worked hard to <br/>&gt; avoid with field variable attributes: illegal combinations.<br/>&gt; <br/>&gt; &nbsp; &nbsp; method foo :private :trusted(Some::Class::*) :protected ($bar) { ... }<br/>&gt; <br/>&gt; The above doesn&#39;t make sense and we don&#39;t want to&nbsp;write code that needs <br/>&gt; to validate all attribute combinations are valid. That will likely be <br/>&gt; buggy, slower, and the code could be more confusing.<br/>&gt; <br/>&gt; The current spec assumes a boolean for visibility: private or not <br/>&gt; private. That&#39;s far too limiting, so having a single attribute would be <br/>&gt; warranted here to allow for future expansion. Just spit-balling:<br/>&gt; <br/>&gt; &nbsp; &nbsp; method foo { ... }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # public<br/>&gt; &nbsp; &nbsp; method foo :restricted { ... }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # private<br/>&gt; &nbsp; &nbsp; method foo :restricted(isa) { ... }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# protected <br/>&gt; (only this class and subclasses)<br/>&gt; &nbsp; &nbsp; method foo :restricted(Some::Library) { ... }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# only <br/>&gt; visible to that library, something we don&#39;t currently have<br/>&gt; &nbsp; &nbsp; method foo :restricted([Class::One,Class::Two]) { ... } # <br/>&gt; enumerated list of classes<br/><br/>I don&#39;t think you can spec your way out of invalid attribute <br/>combinations this way. What if someone does &#39;method foo <br/>:restricted(Some::Class) :restricted :restricted(isa) {}&#39;?<br/>&gt; <br/>&gt; I think `:restricted` is somewhat clear, but I&#39;m not quite sold on it. <br/>&gt; (`:visibility` is better, but too verbose and private would probably <br/>&gt; need `:visibility(undef)` and that would be bad). Also, note that if we <br/>&gt; have a library named `isa`, that would conflict with `:restricted(isa)`.<br/><br/>Bikeshedding: :scope? :trusted?<br/><br/>Also, does trusting Some::Class mean we transitively trust anything that <br/>isa Some::Class?<br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267471.html Tue, 05 Dec 2023 10:30:24 +0000 Re: Summary: Proposed change to Corinna OOP system by Paul "LeoNerd" Evans On Tue, 5 Dec 2023 11:22:56 +0100<br/>Lukas Mai &lt;lukasmai.403+p5p@gmail.com&gt; wrote:<br/><br/>&gt; On 05.12.23 10:40, Ruud H.G. van Tol via perl5-porters wrote:<br/>&gt; &gt; <br/>&gt; &gt; I would still like to be able to set the method-default to private <br/>&gt; &gt; lexically, so for my own code corner.<br/>&gt; &gt; <br/>&gt; &gt; I didn&#39;t think through how that would best be facilitated, so I&#39;m<br/>&gt; &gt; just brain-farting here:<br/>&gt; &gt; use Corinna qw( :default(methods:private) );<br/>&gt; &gt; <br/>&gt; &gt; <br/>&gt; &gt; Or maybe a &quot;private method&quot; needs a new keyword, like my_method. <br/>&gt; <br/>&gt; Doesn&#39;t the current Object::Pad implementation use &#39;method $foo() {<br/>&gt; ... }&#39; and $obj-&gt;$foo() for private (lexical) methods?<br/><br/>It does, but only because it couldn&#39;t alter the way that `my` or method<br/>invocation works.<br/><br/>Ideally I&#39;d like to see this in core as<br/><br/> my method f () { ... }<br/><br/> $self-&gt;&amp;f();<br/><br/>-- <br/>Paul &quot;LeoNerd&quot; Evans<br/><br/>leonerd@leonerd.org.uk | https://metacpan.org/author/PEVANS<br/>http://www.leonerd.org.uk/ | https://www.tindie.com/stores/leonerd/<br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267470.html Tue, 05 Dec 2023 10:29:15 +0000 Re: Summary: Proposed change to Corinna OOP system by Lukas Mai On 05.12.23 10:40, Ruud H.G. van Tol via perl5-porters wrote:<br/>&gt; <br/>&gt; I would still like to be able to set the method-default to private <br/>&gt; lexically, so for my own code corner.<br/>&gt; <br/>&gt; I didn&#39;t think through how that would best be facilitated, so I&#39;m just <br/>&gt; brain-farting here:<br/>&gt; use Corinna qw( :default(methods:private) );<br/>&gt; <br/>&gt; <br/>&gt; Or maybe a &quot;private method&quot; needs a new keyword, like my_method.<br/><br/>Doesn&#39;t the current Object::Pad implementation use &#39;method $foo() { ... <br/>}&#39; and $obj-&gt;$foo() for private (lexical) methods?<br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267469.html Tue, 05 Dec 2023 10:23:06 +0000 Re: Summary: Proposed change to Corinna OOP system by Nicolas Mendoza via perl5-porters <br/>Den 05.12.2023 10:21, skrev Ovid:<br/>&gt; &hellip;<br/><br/>&gt; `my method foo` would possibly entail calling it via <br/>&gt; `$self-&gt;&amp;foo`.&nbsp;This isn&#39;t bad, but we need the metadata to be <br/>&gt; available in the MOP. The `my` keyword, in this context, is now doing <br/>&gt; more than just declaring something to be lexical. Is this subtle <br/>&gt; overloading an issue?<br/>&gt;<br/>&gt; `method _foo` uses current conventions, but it&#39;s kind of a hack that <br/>&gt; overloads the identifier meaning. Opinions were mixed. Further, if we <br/>&gt; want to have things like trusted and protected methods, what would it <br/>&gt; mean if a leading underscore meant &quot;private&quot; and then we declared a <br/>&gt; method to be trusted or protected? (same issue with using `my` and <br/>&gt; protected and trusted)<br/>&gt;<br/>Promising to not beat this horse further, but just some cents: Letting <br/>attributes always override _foo prefix is what I would expect at least. <br/>It is as hacky as double sigils in other languages. I think letting the <br/>average (most) users just use `method foo` and `method _bar` and things <br/>just work as expected would be positive in every day coding. Personally <br/>I would like to avoid as much explicit attribute usage as possible.<br/><br/>-- <br/><br/>Nicolas Mendoza<br/><br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267468.html Tue, 05 Dec 2023 09:52:29 +0000 Re: Summary: Proposed change to Corinna OOP system by "Ruud H.G. van Tol" via perl5-porters <br/>On 2023-12-05 10:21, Ovid wrote:<br/>&gt; [...]<br/>&gt; The current spec assumes a boolean for visibility: private or not <br/>&gt; private. That&#39;s far too limiting, so having a single attribute would <br/>&gt; be warranted here to allow for future expansion. [...]<br/><br/>I would still like to be able to set the method-default to private <br/>lexically, so for my own code corner.<br/><br/>I didn&#39;t think through how that would best be facilitated, so I&#39;m just <br/>brain-farting here:<br/>use Corinna qw( :default(methods:private) );<br/><br/><br/>Or maybe a &quot;private method&quot; needs a new keyword, like my_method.<br/><br/>-- Ruud<br/><br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267467.html Tue, 05 Dec 2023 09:40:21 +0000 Summary: Proposed change to Corinna OOP system by Ovid Hi all,<br/><br/>Out of the discussions on that thread<br/>&lt;https://www.nntp.perl.org/group/perl.perl5.porters/2023/11/msg267373.html&gt;,<br/>I got the following out of it.<br/><br/>TL;DR: I lost, but we still have something to fix.<br/><br/>Summary: I proposed that we make methods private by default to ensure that<br/>developers would have to think about their contracts and explicitly add<br/>`:public` to a method to make it a public method. This would make it more<br/>consistent with how field variables are handled and makes it easier to<br/>avoid exposing behavior we did not intend.<br/><br/>The Consensus: Interesting idea, but probably not workable in that form.<br/><br/>For the following, I will use these definitions:<br/><br/><br/> 1. public: a method that anything can call on an instance<br/> 2. private: a method that only the class of the instance can call (no<br/> &quot;isa&quot; check)<br/> 3. protected: a method that only a class of subclass of an instance can<br/> call<br/> 4. trusted: a method that can be called by classes identified as trusted<br/><br/>Chris Prather would have supported the idea if it could be known at<br/>compile time if `$object-&gt;foo` was trying to call a method it can&#39;t call,<br/>but given Perl&#39;s nature, that&#39;s probably impossible. I *think* he might<br/>have supported it if all methods had to declare their visibility.<br/><br/>Various approaches to declaring private methods were proposed:<br/><br/> - my method foo<br/> - method _foo<br/> - method foo :private (current spec)<br/><br/>All three of those have issues.<br/><br/>`my method foo` would possibly entail calling it via `$self-&gt;&amp;foo`. This<br/>isn&#39;t bad, but we need the metadata to be available in the MOP. The `my`<br/>keyword, in this context, is now doing more than just declaring something<br/>to be lexical. Is this subtle overloading an issue?<br/><br/>`method _foo` uses current conventions, but it&#39;s kind of a hack that<br/>overloads the identifier meaning. Opinions were mixed. Further, if we want<br/>to have things like trusted and protected methods, what would it mean if a<br/>leading underscore meant &quot;private&quot; and then we declared a method to be<br/>trusted or protected? (same issue with using `my` and protected and trusted)<br/><br/>`method foo :private` is the current spec, but it creates another potential<br/>issue. If we have more types of visibility (trusted or protected), we might<br/>ultimately create a situation we worked hard to avoid with field variable<br/>attributes: illegal combinations.<br/><br/> method foo :private :trusted(Some::Class::*) :protected ($bar) { ... }<br/><br/>The above doesn&#39;t make sense and we don&#39;t want to write code that needs to<br/>validate all attribute combinations are valid. That will likely be buggy,<br/>slower, and the code could be more confusing.<br/><br/>The current spec assumes a boolean for visibility: private or not private.<br/>That&#39;s far too limiting, so having a single attribute would be warranted<br/>here to allow for future expansion. Just spit-balling:<br/><br/> method foo { ... } # public<br/> method foo :restricted { ... } # private<br/> method foo :restricted(isa) { ... } # protected<br/>(only this class and subclasses)<br/> method foo :restricted(Some::Library) { ... } # only visible<br/>to that library, something we don&#39;t currently have<br/> method foo :restricted([Class::One,Class::Two]) { ... } # enumerated<br/>list of classes<br/><br/>I think `:restricted` is somewhat clear, but I&#39;m not quite sold on it.<br/>(`:visibility` is better, but too verbose and private would probably need<br/>`:visibility(undef)` and that would be bad). Also, note that if we have a<br/>library named `isa`, that would conflict with `:restricted(isa)`.<br/><br/>Suggestions are welcome here. We could punt on defining libraries if we<br/>have an explicit list of enumerated classes which can read a method. Also,<br/>while I&#39;ve thought of ideas that would make it harder for someone to fork a<br/>module to get at methods they should not, I think this is an arms race with<br/>little practical value. Let people hang themselves, but don&#39;t give &#39;em the<br/>rope.<br/><br/>Best,<br/>Ovid<br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267466.html Tue, 05 Dec 2023 09:21:17 +0000 Re: PSC #123 2023-11-09 by Elvin Aslanov Optional Chaining is interesting &acirc;&#155;&#147;&iuml;&cedil;&#143; <br/> <br/>Is it possible to track the implementations? <br/> <br/>In a public banch, fork, docs etc <br/> <br/>On Mon, Dec 4, 2023, 5:56 PM Philippe Bruhat (BooK) &lt;book@cpan.org&gt; wrote: <br/> <br/>&gt; As noted by Dave Cross in a recent email, this report slipped through <br/>&gt; the cracks. This was during the quiet period where we were quietly busy <br/>&gt; with the security issues. <br/>&gt; <br/>&gt; Here&#39;s what we planned on reporting: <br/>&gt; <br/>&gt; We skipped the meeting last week (2023-11-02). This week was a quiet <br/>&gt; week too, so we don&acirc;&#128;&#153;t have much to report. <br/>&gt; <br/>&gt; We talked a bit about the PPCs currently being implemented. PPCs 14 <br/>&gt; (English names) and 21 (optional chaining) have people implementing them <br/>&gt; - we hope to have some progress to publish soon. <br/>&gt; <br/>&gt; -- <br/>&gt; Philippe Bruhat (BooK) <br/>&gt; <br/>&gt; The world is a gamble and the only &quot;sure thing&quot; is that cheaters <br/>&gt; eventually <br/>&gt; lose. (Moral from Groo The Wanderer #23 <br/>&gt; (Epic)) <br/>&gt; <br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267465.html Mon, 04 Dec 2023 17:29:40 +0000 Re: PSC #126 2023-11-30 by Elvin Aslanov &gt; We took note of what projects we have in flight (e.g. PPCs<br/>&gt; being implemented) and may find a way to keep that list<br/>&gt; published and updated<br/><br/>I think employing Notion could be more suited to this task rather than<br/>Spreadsheets<br/><br/>On Mon, Dec 4, 2023, 4:21 PM Philippe Bruhat (BooK) &lt;book@cpan.org&gt; wrote:<br/><br/>&gt; We met Thursday (sorry for the delay).<br/>&gt;<br/>&gt; Three Perl releases have been published this past week, containing<br/>&gt; patches for security issues CVE-2023-47038 and CVE-2023-47039. This<br/>&gt; kept us busy for the past few weeks (explaining the somewhat thinner<br/>&gt; recent updates).<br/>&gt;<br/>&gt; * Paul will publish a post-mortem on the recent releases, looking at<br/>&gt; what went wrong and some thoughts on how to improve it so those don&#39;t<br/>&gt; happen again<br/>&gt; * We discussed a plan to improve documentation of the security<br/>&gt; disclosure process<br/>&gt; * We took note of what projects we have in flight (e.g. PPCs<br/>&gt; being implemented) and may find a way to keep that list<br/>&gt; published and updated<br/>&gt;<br/>&gt; --<br/>&gt; Philippe Bruhat (BooK)<br/>&gt;<br/>&gt; Everyone&#39;s life seems easier from the outside.<br/>&gt; (Moral from Groo The Wanderer #45<br/>&gt; (Epic))<br/>&gt;<br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267464.html Mon, 04 Dec 2023 17:26:48 +0000 PSC #123 2023-11-09 by book As noted by Dave Cross in a recent email, this report slipped through<br/>the cracks. This was during the quiet period where we were quietly busy<br/>with the security issues.<br/><br/>Here&#39;s what we planned on reporting:<br/><br/>We skipped the meeting last week (2023-11-02). This week was a quiet<br/>week too, so we don&rsquo;t have much to report.<br/><br/>We talked a bit about the PPCs currently being implemented. PPCs 14<br/>(English names) and 21 (optional chaining) have people implementing them<br/>- we hope to have some progress to publish soon.<br/><br/>-- <br/> Philippe Bruhat (BooK)<br/><br/> The world is a gamble and the only &quot;sure thing&quot; is that cheaters eventually<br/> lose. (Moral from Groo The Wanderer #23 (Epic))<br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267463.html Mon, 04 Dec 2023 15:40:53 +0000 PSC #126 2023-11-30 by book We met Thursday (sorry for the delay).<br/><br/>Three Perl releases have been published this past week, containing<br/>patches for security issues CVE-2023-47038 and CVE-2023-47039. This<br/>kept us busy for the past few weeks (explaining the somewhat thinner<br/>recent updates).<br/><br/>* Paul will publish a post-mortem on the recent releases, looking at<br/> what went wrong and some thoughts on how to improve it so those don&#39;t<br/> happen again<br/>* We discussed a plan to improve documentation of the security<br/> disclosure process<br/>* We took note of what projects we have in flight (e.g. PPCs<br/> being implemented) and may find a way to keep that list<br/> published and updated<br/><br/>-- <br/> Philippe Bruhat (BooK)<br/><br/> Everyone&#39;s life seems easier from the outside.<br/> (Moral from Groo The Wanderer #45 (Epic))<br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267462.html Mon, 04 Dec 2023 15:13:10 +0000 Re: TONYC Grant Report October 2023 by wolfsage On Wed, Nov 29, 2023 at 4:54&acirc;&#128;&macr;AM Tony Cook &lt;tony@develop-help.com&gt; wrote: <br/> <br/>&gt; <br/>&gt; Approximately 45 tickets were reviewed or worked on, and 8 patches <br/>&gt; were applied. <br/>&gt; <br/> <br/>Thanks Tony, +1 from me. <br/> <br/>-- Matthew Horsfall (alh) <br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267461.html Mon, 04 Dec 2023 13:38:40 +0000 Re: Proposed change to Corinna OOP system by Darren Duncan I formally request that any alterations to Corinna in this current discussion <br/>about public/private on methods also takes into account the assumption of <br/>additional visibility levels for methods, particularly &quot;internal&quot; or whatever we <br/>want to name it, and the solution we come up with needs to work when there are 3 <br/>or more options to choose from, not just a total of 2.<br/><br/>It should be able to assume that an effective mechanism exists for knowing at <br/>regular application compile and run time what &quot;library&quot; (or other term) a Perl <br/>package / Corinna class belongs to, and that any package/class belongs to <br/>exactly 1 library, and the meaning of putting the &quot;internal&quot; scope on a method <br/>is to make it public-like but only for subs/methods in those packages. The <br/>current discussion doesn&#39;t need to concern with how a library is defined, just <br/>that it exists.<br/><br/>Note that if not otherwise declared we can consider each Perl package to belong <br/>to its own library consisting of only that 1 package, which should be reasonable <br/>semantics.<br/><br/>While private/internal/public are all mutually exclusive, we should also design <br/>for the assumption of adding a &quot;protected&quot; or analogy additional visibility <br/>scope, which is NOT mutually exclusive with the above, and can be paired with <br/>either private or internal, and its effect in the latter case is, visible to a <br/>class in the same library OR that is a subclass.<br/><br/>-- Darren Duncan<br/><br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267460.html Sat, 02 Dec 2023 20:20:11 +0000 Re: Pre-RFC: Propose explicit library entity for Corinna/Perl by Branislav Zahradník On Sat, 2 Dec 2023 at 07:49, Darren Duncan &lt;darren@darrenduncan.net&gt; wrote: <br/> <br/>&gt; On 2023-12-01 10:13 p.m., Branislav Zahradn&Atilde;&shy;k wrote: <br/>&gt; &gt; If for information: isn&#39;t this information already available via <br/>&gt; distribution&#39;s <br/>&gt; &gt; MANIFEST? <br/>&gt; <br/>&gt; Does the MANIFEST get installed somewhere persistent that Perl can see at <br/>&gt; runtime during the normal post-install course of running an application? <br/>&gt; <br/>&gt; The whole point of my proposal is to have a sense of a collection of Perl <br/>&gt; modules that are considered a unit and this information is available <br/>&gt; post-install to a regular application. <br/>&gt; <br/> <br/>so install it :-) <br/> <br/> <br/>&gt; <br/>&gt; &gt; if for subpackages / private packages, Ovid contemplated about it some <br/>&gt; time ago, <br/>&gt; &gt; would be worth to look at it as well <br/>&gt; <br/>&gt; The &quot;internal&quot; thing I mention isn&#39;t the same as the concept of <br/>&gt; sub-packages or <br/>&gt; private packages, as the latter exist entirely within a host package and <br/>&gt; are <br/>&gt; only used within that one host, while my proposal involves a group of peer <br/>&gt; packages such that in the general case more than one might contribute to <br/>&gt; the <br/>&gt; public API of the library and any of them may be used by multiple other <br/>&gt; packages <br/>&gt; in the same library but at least part of their API isn&#39;t public. <br/>&gt; <br/>&gt; In the general case, my proposal is to allow any single package to have a <br/>&gt; mixture of routines such that some are intended to be public to all, <br/>&gt; others <br/>&gt; usable only by other packages in the same library, and others only usable <br/>&gt; by the <br/>&gt; same class. <br/>&gt; <br/> <br/>how inheritance should work? <br/>how tests should work? <br/>how tests written by 3rd party will work (eg integration tests testing new <br/>version of X before starting full matrix tests) <br/> <br/> <br/>&gt; <br/>&gt; -- Darren Duncan <br/>&gt; <br/>&gt; <br/>&gt; <br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267459.html Sat, 02 Dec 2023 20:18:18 +0000 Though about qt by Branislav Zahradník Read lot of qt being about to be implemented lately, and one though occured:<br/><br/>qt and current interpolation shouldn&#39;t mix in one context (readability and<br/>so)<br/>so imho qt shouldn&#39;t be extra syntax but only feature altering behaviour<br/>of current interpolated contexts.<br/><br/>Brano<br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267458.html Sat, 02 Dec 2023 06:51:09 +0000 Re: Pre-RFC: Propose explicit library entity for Corinna/Perl by Darren Duncan On 2023-12-01 10:13 p.m., Branislav Zahradn&iacute;k wrote:<br/>&gt; If for information: isn&#39;t this information already available via distribution&#39;s <br/>&gt; MANIFEST?<br/><br/>Does the MANIFEST get installed somewhere persistent that Perl can see at <br/>runtime during the normal post-install course of running an application?<br/><br/>The whole point of my proposal is to have a sense of a collection of Perl <br/>modules that are considered a unit and this information is available <br/>post-install to a regular application.<br/><br/>&gt; if for subpackages / private packages, Ovid contemplated about it some time ago, <br/>&gt; would be worth to look at it as well<br/><br/>The &quot;internal&quot; thing I mention isn&#39;t the same as the concept of sub-packages or <br/>private packages, as the latter exist entirely within a host package and are <br/>only used within that one host, while my proposal involves a group of peer <br/>packages such that in the general case more than one might contribute to the <br/>public API of the library and any of them may be used by multiple other packages <br/>in the same library but at least part of their API isn&#39;t public.<br/><br/>In the general case, my proposal is to allow any single package to have a <br/>mixture of routines such that some are intended to be public to all, others <br/>usable only by other packages in the same library, and others only usable by the <br/>same class.<br/><br/>-- Darren Duncan<br/><br/><br/> https://www.nntp.perl.org/group/perl.perl5.porters/2023/12/msg267457.html Sat, 02 Dec 2023 06:49:05 +0000