|
00:17
[Coke] joined
00:42
ds7832 left
05:48
lizmat_ joined
05:52
coverable6__ joined
05:53
vrurg_ joined
05:56
nativecallable6_ joined,
evalable6 left,
notable6 left,
bisectable6 left,
shareable6 left,
coverable6 left,
greppable6 left,
committable6 left,
benchable6 left,
tellable6 left,
lizmat left,
vrurg left,
evalable6 joined,
shareable6 joined,
notable6 joined,
benchable6 joined,
committable6 joined,
nativecallable6 left,
tellable6 joined
05:58
bisectable6 joined
05:59
greppable6 joined
08:45
melezhik joined
09:13
lizmat_ left,
lizmat joined
|
|||
| patrickb | If in a Rakudo installation, the "share/perl6" folder is symlinked to the share/perl6 folder of some other Rakudo installation, which Rakudo should be used to run scripts that are installed in contained CURIs? | 10:16 | |
| lizmat | feels like a bad idea to do? | 10:21 | |
| patrickb | I.e. if the script tries to find it's rakudo executable, by looking for "../../../../bin/rakudo" relative to it's own dir (i.e. it tries to resolve /home/foo/inst/share/perl6/site/bin/../../../../bin/rakudo.exe), should it resolve symlinks or not? | ||
| I agree it's a bad idea, but we still have to decide how raki do should behave in that case. | |||
| Unsure if this could have security ramifications. | 10:22 | ||
| lizmat | also, disk space wise, with a lot of precomp files hanging around? | 10:23 | |
| patrickb | I agree this is stupid. Still we need to define the behavior. But maybe this is pretty obvious. The OS already defines the semantics of .. in a path. Let's just follow that. | 10:25 | |
| lizmat | ugexe: given that raku.land/zef:lizmat/Slang::Nogil is at 1.0 | 11:33 | |
| and the previous version was at 0.09 | |||
| m: say v1.0 cmp v0.09 # and give that 1.0 > 0.09 | 11:34 | ||
| camelia | More | ||
| lizmat | why is it that "zef install Slang::Nogil" is trying to install the old one? | ||
| could it be that it has :api<1> ? | |||
| and the new one has no specific :api setting | 11:35 | ||
| timo | github.com/rakudo/rakudo/pull/6005 i would love someone to just give this a quick look and hopefully merge | 11:38 | |
| Geth | rakudo/main: 5154f2a1cd | timo++ (committed using GitHub Web editor) | src/Perl6/bootstrap.c/BOOTSTRAP.nqp Make CORE.c setting build reproducibly The last thing missing was the array of capture names getting a different order depending on hash randomization, thus breaking reproducibility. |
11:46 | |
| timo | neat, thanks ... whoever that was? :D | 11:49 | |
| lizmat | 11:50 | ||
| timo | i feel that the benefit to debian should be palpable | 11:51 | |
| lizmat | meh, t/spec/S17-promise/nonblocking-await.t just hung for me once | 11:53 | |
| unrepeatable, so probably unrelated | |||
| timo: what about github.com/rakudo/rakudo/pull/5999 ? | 11:55 | ||
| timo | that generator i wrote for trying to concurrently load stuff turned out to not be much of a stress test at all, it looked like it didn't manage to explode on main rakudo at all | 11:56 | |
| i would like to brainstorm approaches to handling regexes that just infinitely loop | 12:14 | ||
| lizmat | perhaps a thread that does own-up logic repeatedly and checks the stack traces ? | 12:15 | |
| timo | things i've thought of so far: we can compile quantifiers to code that would detect that since the previous iteration, the position of the cursor hasn't changed. we can emit code that runs a kind of check after 1000 iterations have been reached, there's many more options we can explore | 12:35 | |
| firing up a thread that watches over regex execution sounds kind of wasteful, especially when we can essentially completely freely change how the code is compiled | 12:49 | ||
| lizmat | well, your suggestions would create overhead for all regexes | 12:52 | |
| whereas my idea would only create overhead when that thread is actually started, e.g. with a pragma | 12:53 | ||
| timo | but then you have to know ahead of time if you're going to have the problem of infinitely matching nothing and getting stuck in a regex match | ||
| another thing i need to address is the question of "what if someone actually somehow relies on being able to keep the regex engine not progressing when doing an infinite quantifier" | 12:57 | ||
| the code i had looked at for stumbling upon this topic again was i think actually capturing instances of zero-width matches, so the problem was not simply getting stuck and doing nothing, it was actually creating more and more captures | 13:00 | ||
| we don't want to end up in a place where we say "actually, capturing infinite copies of the same zero characters long match is undefined behaviour, so we just skip over it in the optimizer" which is a thing that gives C and C++ programmers fun "wtf" moments every now and again when it's brought up | 13:01 | ||
| lizmat | hmmm | 13:02 | |
| timo | we can statically determine when something can result in a zero-width match - easiest is when a construct like <?...> or <!...> is used, since they literally set "zerowidth" on the QRegex node | ||
| but if we have something like a role that expects to be applied to a grammar, we can't know enough at compile time to necessarily warn about that | 13:03 | ||
| Geth | rakudo: patrickbkr++ created pull request #6025: Normalize rakudo-home path |
||
| lizmat | yeah, we don't want false positives | ||
| timo | we can in theory warn at composition time, but that would imply another pass over everything whenever a mixin of roles into grammars happens | 13:04 | |
| lizmat | ouch, and that is slow enough already | ||
| timo | that's a few of the reasons that brought me to the idea of putting a "has progress happened?" check into the compiled code we make from quantifiers | ||
| and choosing a high-but-not-too-high point at which we check if any progress has happened and doing something to prevent trouble. could be throwing an exception, could be returning a Failure from the match, could be continuing as if the quantifier had been exhausted | 13:05 | ||
| in a way, compiling `a*` as if it were really `a ** {0,100000}` is a (possibly poor) way to fix this | 13:06 | ||
| of course, if we choose a too-low value, we will give someone a very, very confusing misbehaviour when they match their regex against a rather long piece of input where it's legitimate to match a single * quantifier 100000 times in a row | 13:07 | ||
| lizmat | is that counter a 32bit or 64bit one? | 13:08 | |
| timo | moarvm int register, so 64bit | ||
| 64bit signed integer probably | 13:09 | ||
| also, do we want to be thorough in checking statically if there's a possibility that a piece of regex is capable of matching zero characters, and throw an error ahead of time? | 13:12 | ||
| ab5tract brought up the possibility of an adverb to control how all of this is handled | 13:14 | ||
| could be something that has the same effect as putting a `& .+?` next to the can-match-zero thing so that if it matches zero, it has to backtrack and try something else | 13:16 | ||
| lizmat | ack | 13:19 | |
| timo | it seems like a simple thing to put in, but it shouldn't be default for everywhere, because there's absolutely many places where you want something to be able to match zero width. if we only make it the default for the thing that's quantified with a *, then it'll give people a surprise too, just a different kind of surprise from the infinite looping one | 13:24 | |
| Geth | rakudo: patrickbkr++ created pull request #6026: Win MSI: Remove stale command |
||
| rakudo/main: 635279c8f9 | (Patrick Böker)++ | tools/build/binary-release/msi/build-msi.ps1 Win MSI: Remove stale command Forgot to remove this during the last refactor |
13:25 | ||
| rakudo/main: 5140c3c647 | (Patrick Böker)++ (committed using GitHub Web editor) | tools/build/binary-release/msi/build-msi.ps1 Merge pull request #6026 from patrickbkr/msi-stale-command-cleanup Win MSI: Remove stale command |
|||
| melezhik | Another idea , for brownie usage - add unit tests for PR via dedicated zef module ( installed from git repo ) this would allow quickly test PRs idea | 13:37 | |
| timo | can you explain a bit more? | 13:45 | |
| melezhik | One sec | 13:46 | |
| pasteboard.co/KATwJ4XFjoTb.png | 13:47 | ||
| source code checkbox checked means Rakudo commit is going to be compiled from source code | 13:48 | ||
| It works already | |||
| Anyone could pick a commit for respected PR and try it out - github.com/rakudo/rakudo/pulls | 13:49 | ||
| The second part is I imaging having a regular zef module with some unit tests covering cases for a PR | 13:50 | ||
| Such a Raku module could be pointed via module text input as a regular git repo as zef understands such a format | 13:51 | ||
| This allows quickly run PR unit tests against complied Rakudo | 13:52 | ||
| timo | so you're suggesting this would be used when you make a change to rakudo that you expect will fix the tests in an existing module? | 14:19 | |
| ab5tract | Or to verify that a change doesn’t affect anything in the ecosystem | 14:29 | |
| timo | that would need a full blin run though right? | 14:30 | |
| ab5tract | Ah, I didn’t read carefully enough | 14:34 | |
| melezhik | The idea is to run only against a specific module with tests , however it’s possible to run against entire eco system or subset ( 2,10,100,200,1000,2000 modules) which is default | 15:07 | |
| “5:19 PM <timo> so you're suggesting this would be used when you make a change to rakudo that you expect will fix the tests in an existing module?” Oh, this could be that too, did not think about that. ) | 15:52 | ||
| Or create a Raku module with some unit tests that prove PR will fix the issue | 15:53 | ||
| Geth | rakudo/main: 3b80351fa6 | rir++ (committed using GitHub Web editor) | 2 files Eliminate magic 37 in Instant class. Modify some comments * Eliminate magic 37 in Instant class. Modify some comments * Remove unused $offset-nanos declar * Calculate current UTC offset once in Instant class. Restore a comment |
17:04 | |
| ab5tract | hrm, this is an interesting wrench -- ParametricRoleHOW.compose returns a ParametricRoleGroupHOW ?? | 18:32 | |
| m: role R {}; role S does R {}; dd role T does S { }.HOW.compose(T).HOW | |||
| camelia | Perl6::Metamodel::ParametricRoleGroupHOW.new | ||
| lizmat | that's because mixin in a role in a role creates a new role ? | 18:56 | |
|
19:21
librasteve_ joined
|
|||
| librasteve_ | rakudoweekly.blog/2025/11/17/2025-...lease-187/ | 19:24 | |
| Geth | setup-raku/dependabot/npm_and_yarn/js-yaml-3.14.2: 8fb72d01ce | dependabot[bot]++ (committed using GitHub Web editor) | package-lock.json Bump js-yaml from 3.14.1 to 3.14.2 Bumps [js-yaml](github.com/nodeca/js-yaml) from 3.14.1 to 3.14.2. - [Changelog](github.com/nodeca/js-yaml/blob/mas...NGELOG.md) - [Commits](github.com/nodeca/js-yaml/compare/......3.14.2) --- ... (7 more lines) |
19:59 | |
| setup-raku: dependabot[bot]++ created pull request #43: Bump js-yaml from 3.14.1 to 3.14.2 |
20:00 | ||
|
20:45
melezhik left
|
|||
| ab5tract | lizmat: sure, but the compose method returns the (modified) type object that is passed in, I don't see $target being re-assigned | 21:24 | |
| lizmat: also, the role is supposed to be composed already, at least from what the code suggests | 21:25 | ||
|
21:31
librasteve_ left
|
|||
| ab5tract | this behavior (ParametricRoleHOW.compose => ParametricRoleGroupHOW) is also not present when calling compose inside of RakuAST::Role :( | 21:45 | |
| m: role R {}; role S does R {}; use nqp; dd nqp::istype(role T does S { }.HOW.compose(T).HOW, R); dd nqp::istype(role U does S {}, R); | 21:57 | ||
| camelia | 0 0 |
||
| ab5tract | m: role R {}; role S does R {}; use nqp; dd nqp::istype(role T does S { }.HOW.compose(T), R); dd nqp::istype(role U does S {}, R); | ||
| camelia | 1 0 |
||
| Geth | rakudo: patrickbkr++ created pull request #6027: Another vararg test: passing `Int`s |
22:44 | |
| [Coke] | jdv: can you take 2025.12 ? | 23:46 | |
| releasable6: next | 23:47 | ||
| releasable6 | [Coke], Release date for Rakudo 2025.11 is listed in “Planned future releases”, but it was already released. | ||
| [Coke], and I oop! Backtrace: gist.github.com/c6ac62b0c8a4222ec2...4585dc7a23 | |||