|
🦋 Welcome to the IRC channel of the core developers of the Raku Programming Language (raku.org #rakulang). This channel is logged for the purpose of history keeping about its development | evalbot usage: 'm: say 3;' or /msg camelia m: ... | Logs available at irclogs.raku.org/raku-dev/live.html | For MoarVM see #moarvm Set by lizmat on 8 June 2022. |
|||
| [Coke] | what does Mu.sink do? (it's defined to do nothing, but does it somehow do something?) | 02:38 | |
| Operator was added to rakudo and to S02-types/WHICH.t, but is not otherwise tested in t/spec. Does this make it part of the spec, or is this an accidental inclusion that should be reverted. | 02:50 | ||
| m: Operator.new | |||
| camelia | Cannot make a Operator object using .new in block <unit> at <tmp> line 1 |
||
| [Coke] | I ask because there's a raku/doc ticket about it. | 02:51 | |
| m: new Proc::Async::Pipe | 02:57 | ||
| camelia | ===SORRY!=== Error while compiling <tmp> Unsupported use of C++ constructor syntax. In Raku please use: method call syntax. at <tmp>:1 ------> new Proc::Async::Pipe⏏<EOL> |
||
| [Coke] | m: Proc::Async::Pipe.new | ||
| camelia | Too few positionals passed; expected 5 arguments but got 1 in block <unit> at <tmp> line 1 |
||
| [Coke] | ^^ this isn't in roast. is it an internal detail? | 02:58 | |
| releasable6__ | Next release in ≈6 days and ≈15 hours. There are no known blockers. Please log your changes in the ChangeLog: github.com/rakudo/rakudo/wiki/ChangeLog-Draft | 03:00 | |
| [Coke] | any PRs to roast should trigger a check for documentation on that feature. | ||
| finally closed a doc ticket opened by niner in 11/2019 | 03:20 | ||
|
07:21
finanalyst joined
08:33
sena_kun joined
|
|||
| lizmat | [Coke]: Operator is a bit in limbo at the momen | 08:54 | |
| it is used in RakuAST, my plan was to use it in the legacy grammar as well, but ran into issues | 08:55 | ||
| it should become a full-fledged citizen in 6.e, but might still have some changes until thenb | |||
| so I'd rather treat it as an implementation detail until then, like the rest of RakuAST | |||
|
08:58
sena_kun left
|
|||
| finanalyst | lizmat: I found .join.naive-word-wrapper in RakuDoc::To::Text, but cant find where naive-word-wrapper is documented. | 09:21 | |
| lizmat | it's an implementation detail | ||
| github.com/rakudo/rakudo/blob/main...3588-L3595 | 09:22 | ||
| m: sub a(uint $a) { dd $a }; a -1 # meh, a buglet | 10:25 | ||
| camelia | -1 | ||
| lizmat | m: my uint $a = -1; say $a | ||
| camelia | 18446744073709551615 | ||
| lizmat | m: Q|sub a(uint $a) { dd $a }; a -1|.AST.EVAL | 10:26 | |
| camelia | 18446744073709551615 | ||
| lizmat | ah... but fixed in RakuAST *phew* :-) | 10:27 | |
| ab5tract: ^^ maybe a test *nudge* *nudge* :-) | |||
| ab5tract | :) | 10:53 | |
|
11:39
MasterDuke left
|
|||
| ab5tract | lizmat: any thoughts on R#5576 | 12:22 | |
| linkable6 | R#5576 [open]: github.com/rakudo/rakudo/pull/5576 Give META_REDUCE_RIGHT behavior for 1-arg case | ||
| ab5tract | I’m not sure that one-arg == no-op ever made sense, but if we want it for left we should do it for right | 12:24 | |
| lizmat | actually no, apart from your thought "should we even be doing this" | ||
| perhaps nine has more ideas | |||
| ab5tract | am I misremembering or did we once have a version of camelia / evalable that could process a gist from github? | 13:21 | |
| committable6: HEAD gist.githubusercontent.com/ab5trac...r2000.raku | 13:23 | ||
| committable6 | ab5tract, Successfully fetched the code from the provided URL | ||
| ab5tract, ¦HEAD(a26b756): «:contoto("Any"):slot(Any):type("Any")assign requires a concrete object (got a Any type object instead) in block <unit> at /tmp/YrFu5B6BIh line 10 «exit code = 1»» | |||
| ab5tract | evalable6: gist.githubusercontent.com/ab5trac...r2000.raku | 13:24 | |
| evalable6 | ab5tract, Successfully fetched the code from the provided URL | ||
| (exit code 1) :contoto("Str") :slot("b") :type("Str") Cannot assign to an immutable value in block <unit> at /tmp/3qYdNTQxmo line 10 |
|||
| ab5tract | so... we use `op.count` to determine when to do the reduction: github.com/rakudo/rakudo/blob/a26b...kumod#L190 | 13:27 | |
| however, that feels unforunately inadequate in light of multi-ness :( | 13:28 | ||
| lizmat | it could well be improved if @args where an IterationBuffer and |$args.List | 13:30 | |
| ab5tract | hmm | 13:32 | |
| would that adress "when" to call the provided op? or do we need to adjust user expectations that it always call the longest-arg candidate(s)? | 13:35 | ||
| lizmat | sorry, I was just talking about performance... :-) | 13:36 | |
| ab5tract | :) | ||
| well from my first pass at R#2000, fixing the issue of maintaining containerization involves removing binds and adding a `return`... | 13:37 | ||
| linkable6 | R#2000 [open]: github.com/rakudo/rakudo/issues/2000 [data types][metaop] `reduce` needlessly deconts | ||
| ab5tract | gist.github.com/ab5tract/7b6eda846...econt-diff | 13:38 | |
| so not a net-win on the performance side :/ | 13:39 | ||
| but that does fix the second example provided in the issue | |||
| maybe this slower path could be restricted to only cases where the first argument is in a container to begin with? | 13:43 | ||
| lizmat | possibly... I must admit I'm a bit distracted atm | 13:44 | |
| ab5tract | no worries :) | 13:45 | |
| thanks for the heads up! | |||
| [Coke] | added github.com/Raku/doc/issues/4475 for Operator and others. | 15:30 | |
| Would like to make sure that we have a good 6.e experience with the docs when 6.e goes live. | |||
| lizmat | [Coke]++ | 15:43 | |
| [Coke] | There's no specific timeframe on that, yes? Just "when RakuAST lands" atm? | 15:50 | |
| no pressure, just planning. | |||
| lizmat | Indeed, "when RakuAST lands" | ||
| jdv | will there be a party? | 16:37 | |
| lizmat | that would be very nice indeed :-) | 16:38 | |
| ab5tract | m: use nqp; my %h; my $p := %h<a>; dd :$p, :desc(nqp::getattr($p.VAR, Scalar, q|$!descriptor|).^name) | 17:58 | |
| camelia | :desc("VMNull") :p(Any) |
||
| lizmat | m: use nqp; dd nqp::null | 17:59 | |
| camelia | Mu | ||
| lizmat | m: use nqp; dd CMNull | ||
| camelia | ===SORRY!=== Error while compiling <tmp> Undeclared name: CMNull used at line 1 |
||
| lizmat | m: use nqp; dd VMNull | ||
| camelia | ===SORRY!=== Error while compiling <tmp> Undeclared name: VMNull used at line 1 |
||
| ab5tract | According to: github.com/rakudo/rakudo/blob/a26b...akumod#L29 | ||
| IIUC I should be seeing `ContainerDescriptor::BindHashKey` | 18:00 | ||
| or.. hmm.. `$p` itself is the `ContainerDescriptor::BindHashKey` | 18:07 | ||
| huh, this is weird: | 18:08 | ||
| m: use nqp; my %h; my $p := %h<a>; dd :$p, :desc(nqp::getattr($p.VAR, Scalar, q|$!descriptor|).^name), :next($p ~~ ContainerDescriptor::BindHashKey) | |||
| camelia | Bool::False | ||
| ab5tract | (dd fails quite curiously) | ||
| lizmat | m: my $a; use nqp; dd nqp::getattr($a.VAR, Scalar, /$!descriptor) | 18:10 | |
| camelia | ===SORRY!=== Error while compiling <tmp> Variable $!descriptor used where no 'self' is available at <tmp>:1 ------> p::getattr($a.VAR, Scalar, /$!descriptor⏏) |
||
| lizmat | m: my $a; use nqp; dd nqp::getattr($a.VAR, Scalar, q/$!descriptor) | 18:11 | |
| camelia | ===SORRY!=== Error while compiling <tmp> Couldn't find terminator / (corresponding / was at line 1) at <tmp>:1 ------> :getattr($a.VAR, Scalar, q/$!descriptor)⏏<EOL> expecting any of: / |
||
| lizmat | m: my $a; use nqp; dd nqp::getattr($a.VAR, Scalar, q/$!descriptor/) | ||
| camelia | Mu | ||
| lizmat | m: my $a; use nqp; say nqp::getattr($a.VAR, Scalar, q/$!descriptor/).raku | ||
| camelia | No such method 'raku' for invocant of type 'VMNull'. Found 'raku' on type 'Mu' in block <unit> at <tmp> line 1 |
||
| lizmat | m: my $a; use nqp; say nqp::getattr($a.VAR, Scalar, q/$!descriptor/).^name | 18:12 | |
| camelia | VMNull | ||
| lizmat | ab5tract: ^^ golfed | ||
| m: use nqp; say nqp::getattr((my $).VAR, Scalar, q/$!descriptor/).^name | |||
| camelia | VMNull | ||
| ab5tract | ah, I wasn't initially raising any issues regarding dd | 18:13 | |
| it only produced surprising results when I added a smartmatch on `ContainerDescriptor::BindHashKey` | 18:14 | ||
| nine | m: say [∈] "a" | 18:58 | |
| camelia | True | ||
| nine | obviously | ||
| ab5tract | :) | 18:59 | |
| I think I might even have seen a report or at least a conversation about this recently | |||
| seems like a reasonable place to use a Failure to me | 19:01 | ||
| nine | m: say [∈] set(), set(set()), set(set(set())) | 19:02 | |
| camelia | True | ||
| nine | m: say [∈] set(), set(set()) | ||
| camelia | True | ||
| nine | m: say [∈] set() | 19:03 | |
| camelia | True | ||
| nine | Actually that does make some sense | ||
| m: say [∈] | |||
| camelia | True | ||
| ab5tract | m: sub infix:<gg>($a, $b --> Set) { set($a, $b) }; dd [gg] "a" | 19:04 | |
| camelia | "a" | ||
| ab5tract | does that make sense though? | ||
| I think this one is probably a pretty tight corner, I respect that there was some thought that went into treating it this way in the design | 19:05 | ||
| m: say [∈] Mu | 19:06 | ||
| camelia | True | ||
| nine | I have my answer fully typed up but I'm still reluctant to send it. | 19:13 | |
| ab5tract | no rush | 19:17 | |
| nine | I don't think this is something where just more time helps. It needs concrete real-life use cases | 19:18 | |
| See, that's exactly why I tend to stay out of language design discussions. It's sooo easy to have a gut reaction (in this case I have actually typed two answers in opposite directions, both claiming that they are "clearly" right) and so hard to make an actually informed, far looking decision. | 19:20 | ||
| ab5tract | indeed :/ | 19:27 | |
| it would be interesting to read both of those, FWIW :) | |||
| nine | Well I posted the second one | ||
| ab5tract | do you reckon it deserves a problem solving thread? | 19:33 | |
| lizmat wonders where nine posted | 19:36 | ||
| ab5tract | R#1705 | 19:41 | |
| linkable6 | R#1705 [open]: github.com/rakudo/rakudo/issues/1705 [metaop] META_REDUCE_RIGHT doesn't check for 1-arg case like META_REDUCE_LEFT | ||
| lizmat | thanks :-) | 19:43 | |
| ab5tract | m: use nqp; my %h; my $p := %h<a> = Any; dd nqp::getattr($p, Scalar, q|$!descriptor|).^name; $p = 5; dd %h | 19:54 | |
| camelia | "ContainerDescriptor::Untyped" {:a(5)} |
||
| ab5tract | just when I think I'm starting to understand :) | 19:55 | |
| lizmat | m: mh %h; my $p := %h<a>; say $p; say %h<a>; $p = 42; say %h<a> # ab5tract do you grok this? | 19:59 | |
| camelia | ===SORRY!=== Error while compiling <tmp> Variable '%h' is not declared. Perhaps you forgot a 'sub' if this was intended to be part of a signature? at <tmp>:1 ------> mh ⏏%h; my $p := %h<a>; say $p; say %h<a>; $ |
||
| lizmat | m: my %h; my $p := %h<a>; say $p; say %h<a>; $p = 42; say %h<a> # ab5tract do you grok this? | ||
| camelia | (Any) (Any) 42 |
||
| ab5tract | that part makes sense. | 20:00 | |
| how it's being done with a `ContainerDescriptor::Untyped` is the part that confuses me | |||
| m: use nqp; my %h; my $p := %h<a>; dd nqp::getattr($p, Scalar, q|$!descriptor|).^name; $p = 5; dd %h | |||
| camelia | "ContainerDescriptor::BindHashKey" {:a(5)} |
||
| ab5tract | ^^ this I grok | 20:01 | |
| lizmat | ok, by assigning Any to the container, it changes its descriptor to whatever it was indicated to be | ||
| ab5tract | but then how does it know to still bind into the hash? | ||
| lizmat | it bound it to the hash on assignment | 20:02 | |
| after that, the knowledge is no longer needed, so discarded | |||
| see role ContainerDescriptor::Whence | 20:03 | ||
| ab5tract | but there is no ContainerDescriptor::Whence involved in the second example... this is what I'm confused about | 20:07 | |
| m: use nqp; my %h; my $p := (%h<a> = Any); dd nqp::getattr($p, Scalar, q|$!descriptor|).^name; $p = 5; dd %h | |||
| camelia | "ContainerDescriptor::Untyped" {:a(5)} |
||
| lizmat | there you are binding the result of the assignment, which already switched the descriptors | 20:09 | |
| afk& | 20:11 | ||
| ab5tract | I understand that part... it's what is causing me to as the question: how does the next assignment "know" that is bound into the hash? | ||
| anyway, enjoy your afk :) | 20:12 | ||
| lizmat | that's because %h<a> returns a container that has ContainerDescriptor::Whence descriptor | ||
| really afk& | 20:13 | ||
| ab5tract | cheers | ||
|
20:15
finanalyst left
21:46
sena_kun joined
|
|||
| ab5tract | so the issue I've been poking at in R#2000 boils down to this: | 21:54 | |
| linkable6 | R#2000 [open]: github.com/rakudo/rakudo/issues/2000 [data types][metaop] `reduce` needlessly deconts | ||
| ab5tract | m: use nqp; my %h; sub s(%h) { return %h<a> }; my $p := s(%h); dd nqp::getattr($p, Scalar, q|$!descriptor|).^name | ||
| camelia | "VMNull" | ||
| ab5tract | m: use nqp; my %h; sub s(%h) { return %h<a> }; my $p := s(%h); dd nqp::getattr($p, Scalar, q|$!descriptor|).^name; $p = 42 | 21:55 | |
| camelia | "VMNull" Cannot assign to a readonly variable or a value in block <unit> at <tmp> line 1 |
||
| ab5tract | Should have checked that earlier, would have saved me some trouble | 21:56 | |
| m: use nqp; my %h; sub s(%h) { %h<a> }; my $p := s(%h); dd nqp::getattr($p, Scalar, q|$!descriptor|).^name; $p = 42 | 22:06 | ||
| camelia | Cannot look up attributes in a Any type object. Did you forget a '.new'? in block <unit> at <tmp> line 1 |
||
| ab5tract | (in case anyone was wondering) | ||
| m: use nqp; my %h; sub s(%h) { my $ = %h<a> }; my $p := s(%h); dd nqp::getattr($p, Scalar, q|$!descriptor|).^name; $p = 42 | 22:07 | ||
| camelia | Cannot look up attributes in a Any type object. Did you forget a '.new'? in block <unit> at <tmp> line 1 |
||
| ab5tract | I've tried just about every other combination (my $ :=, return-rw, and more combinations thereof and thereabove) but I don't see a reason to flood the channel with them. | 22:16 | |
| Is it expected for container descriptors to get dropped from the return value of a callable? | 22:17 | ||
| lizmat | yes | 22:19 | |
| by default, return values are deconted on return, unless the Callable has "is raw" or "is rw" on it | 22:20 | ||
| In fact, that's how postcircumfix <> works :-) | |||
| m: my $a = 42; use nqp; say nqp::iscont($a); say nqp::iscont($a<>) | 22:21 | ||
| camelia | 1 0 |
||
| lizmat | ab5tract ^^ | ||
| ab5tract | thanks :) | 22:23 | |
| still a fair bit for me to comprehend wrt containers and their descriptors | |||
| lizmat | it's a bit of a rite of passage indeed | ||
| ab5tract | at the risk of taking too much of your time, what's the difference between `is raw` and `is rw` in this case? | 22:25 | |
| I assume something that is already `rw` will remain so via `is raw` | 22:26 | ||
| lizmat | Actually, on return values I don't think there's a difference | 22:35 | |
| at least not functionally | |||
| anyways, time for some shuteye | 22:37 | ||
| afk again& | |||
| releasable6__ | Next release in ≈5 days and ≈19 hours. There are no known blockers. Please log your changes in the ChangeLog: github.com/rakudo/rakudo/wiki/ChangeLog-Draft | 23:00 | |
|
23:00
sena_kun left
|
|||