🦋 Welcome to Raku! raku.org/ | evalbot usage: 'p6: say 3;' or /msg camelia p6: ... | irclog: colabti.org/irclogger/irclogger_log/raku
Set by ChanServ on 14 October 2019.
guifa well, actually, I’m not sure how the use Test makes it happen. The monkey scoping stuff is supposed to be lexically scoped, at least as far as I knew 00:00
00:01 DarthGandalf left 00:03 aborazmeh joined, aborazmeh left, aborazmeh joined
guifa oh. whoa 00:04
sub MONKEY-SEE-NO-EVAL() is export { 1 } is apparently all that’s needed 00:05
00:20 DarthGandalf joined 00:36 hungryd19 joined, hungrydonkey left 00:53 thundergnat joined
thundergnat You really want to be disquieted? 00:55
m: my $a = 1; say EVAL("$a + 1"); # yay!
camelia 5===SORRY!5=== Error while compiling <tmp>
EVAL is a very dangerous function!!! (use the MONKEY-SEE-NO-EVAL pragma
to override this error but only if you're VERY sure your data contains
no injection attacks).
at <tmp>:1
------> 3my $a =…
thundergnat m: my $a = 1; say "$a + 1".EVAL; #boo
camelia 2
thundergnat m: my $e = &CORE::EVAL; my $a = 2; say &$e("$a + 1"); # boo-hoo 00:56
camelia 3
codesections Oh yikes and/or wow
So, I'd drafted a Rakudo issue re: the `use Test` behavior, but I guess I shouldn't open it but should instead open a docs issue to add warnings for the Test module? 00:58
00:59 thundergnat left, fooist joined
codesections Or, actually, maybe I'll open it so there's a record/tracking issue. Even if that behavior is *known*, it could still be buggy 01:05
(a known bug is still a bug, after all)
01:08 _jrjsmrtn joined, __jrjsmrtn__ left
Geth doc: e72e190595 | Coke++ | xt/pws/code.pws
add word

Originally reported by codesections++
[Coke] codesections: did a full 'make xtest' which I only do very rarely today, and saw "falses". 01:23
guessing I was missing a git pull when I did my final aspell tests 01:24
codesections [Coke]++ well that's _one_ minor mystery solved :)
01:40 Tirifto left 02:00 molaf left 02:10 gnufr33dom joined 02:13 molaf joined 02:21 Cabanossi left 02:33 Cabanossi joined 03:08 fooist left 03:16 gnufr33dom left 03:42 aborazmeh left 04:04 fooist joined 04:49 approaching236 joined 05:25 approaching236 left 05:35 kensanata joined 05:36 wamba joined, molaf left
raku-bridge <interwebs> hi 05:50
05:52 interwebs joined
interwebs hello 05:53
raku-bridge <interwebs> alright got in through irc haha
06:00 interwebs60 joined 06:01 interwebs60 left 06:13 fooist left 06:20 billN1VUX left, rindolf joined 06:56 wamba left 06:57 ufobat joined 06:58 JJMerelo joined 07:13 wamba joined 07:19 Sgeo left 07:34 Cabanossi left 07:50 kensanata left, nebuchadnezzar left 07:51 nebuchadnezzar joined 07:52 MasterDuke left 07:54 JJMerelo left 07:55 nebuchadnezzar left 07:57 nebuchadnezzar joined 08:00 hungryd19 left, Xliff left, vrurg left, Util left, shadowpaste left, bocaneri left, Celelibi left, gfldex left, agentzh left, stux|RC-only left 08:02 fvox left, wamba left 08:05 hungryd19 joined, Xliff joined, vrurg joined, Util joined, shadowpaste joined, bocaneri joined, Celelibi joined, gfldex joined, agentzh joined, stux|RC-only joined 08:06 bocaneri left 08:07 bocaneri joined, fvox joined 08:10 JJMerelo joined
JJMerelo We are seven questions short of 1500 in StackOverflow stackoverflow.com/questions/tagged/raku Will we be able to reach 1500 before the end of August? 08:11
08:41 MasterDuke joined 08:54 ambs left 08:55 ambs joined 09:08 JJMerelo left, zakame left 09:09 zakame joined 09:39 kensanata joined 09:53 rindolf left 10:04 rindolf joined 10:05 pecastro joined 10:18 sena_kun joined 10:36 kensanata left 10:40 TreyHarris left 10:46 pecastro left 10:54 pecastro joined 10:59 finanalyst joined 11:45 Altai-man joined 11:48 sena_kun left 12:04 Archenoth joined
tobs What was the idea behind MONEY-SEE-NO-EVAL anyway? To protect naïve users from using it? (re: R#3896) 12:22
linkable6 R#3896 [open]: github.com/rakudo/rakudo/issues/3896 `Cool.EVAL` does not check for the MONKEY-SEE-NO-EVAL pragma
lizmat tobs: from the doc: In case the MONKEY-SEE-NO-EVAL pragma is not activated, the compiler will complain with a EVAL is a very dangerous function!!! exception. And it is essentially right, since that will run arbitrary code with the same permissions as the program. You should take care of cleaning the code that is going to pass through EVAL if you activate the MONKEY-SEE-NO-EVAL pragma. 12:24
tobs My 2¢ on that issue is that a pragma in my understanding should affect code lexically, and since Cool::EVAL is in another lexical scope, it is not subject to the (dynamic) caller's (in)active pragmata.
12:26 AlexDaniel joined
tobs But I have to wonder, given ugexe's example and the availability of the method form, whether the pragma doesn't set false expectations of safety and the ALLCAPS name is warning enough... 12:26
12:26 AlexDaniel left, AlexDaniel joined
tobs (that seemed to kind of go away from the issue on a tangent, so I'm wary of posting it as a comment on GH) 12:27
12:47 TreyHarris joined
codesections tobs: the problem with the ALLCAPS name being warning enough is that Raku has trained users that ALLCAPS == MOP (WHAT, HOW, etc), not ALLCAPS == dangerous 13:18
(I'm with you on the idea of false expectations of safety, though)
13:29 rir joined
rir p6: say DateTime.new( :year(1970)).Instant; 13:30
camelia Instant:10
rir ^ Why 10? I have looked about but not found the reason? 13:31
13:35 gnufr33dom joined
codesections m: say DateTime.new( :year(1970)).Instant.to-posix 13:43
camelia (0 False)
codesections rir: I'm not an expert, but I think the answer is "no reason, really". `Instant` doesn't represent any particular time; it's just a Raku-specific idea of an instant that supports some, but not all math operations 13:44
If you want the seconds in the Unix epoch, you can convert with `to-posix`, as shown above 13:45
Woo, just saw that my first Rakudo PR was merged! (Admittedly, it added two words and had no effect besides causing a Rakudo to throw a slightly clearer error. But still – baby steps!) 13:49
lizmat codesections++ :-)
13:51 MasterDuke left 13:55 aborazmeh joined, aborazmeh left, aborazmeh joined 14:08 MasterDuke joined
Geth doc: 2ed434182c | Coke++ | .gitignore
Add cache dir created by Documentable
codesections [Coke]: So _that's_ why `git pull` made `make update-html` misbehave sometimes! 14:16
14:17 Sgeo joined
[Coke] maybe? I find it just sits there, but doesn't get in the way usually. just tired of seeing it in git status 14:17
14:35 billN1VUX joined 14:37 samebchase- left, [ptc] left, Bucciarati left, Bucciarati joined, [ptc] joined 14:40 samebchase-4 joined 14:41 samebchase-4 is now known as samebchase-
codesections m: say $*RAKU.compiler.verbose-config.lines.grep(/Raku/).join("\n") 14:46
camelia Raku::can-language-versions=6.c 6.c 6.d 6.d.PREVIEW 6.d.TEST 6.d.TESTDEPR 6.e 6.e.PREVIEW
Raku::language-revisions=c mods
codesections does any of that info ^^^ let me identify the exact source code for the version of Rakudo I'm running? 14:47
I expected `source-digest` to be the hash for a git commit, but it doesn't seem to be
or is there a different way to match the code up to the version I'm using?
Altai-man codesections, --version is not good enough? 14:48
codesections That would be fine too
Altai-man codesections, what's the use-case?
codesections Is there a way to get from --version to the exact code for that version?
Altai-man codesections, yeah.
If it is a non-git version (a release, like 2020.07), go to rakudo releases page and there is a tag with the same name. If it is git version, number after `ge` part is commit sha. 14:49
E.g. from "2020.08.2-35-g09e4f2333" you know the thing after `g` is sha, so github.com/rakudo/rakudo/commits/09e4f2333 14:50
Will be the exact sources, I believe.
And if you are using release, just go to github.com/rakudo/rakudo/tags and each tag has sources. 14:51
Is it what you wanted or did I misunderstand what you want? :)
codesections Hmmm, that doesn't seem to *quite* work with the tagged release. But maybe something is just miss-tagged? 14:52
14:52 cpan-raku left, cpan-raku joined, cpan-raku left, cpan-raku joined
codesections Yes, that's exactly what I'm looking for – thanks! Now I just need to see why it isn't working ... 14:52
Altai-man codesections, please, specify some details.
codesections, 2020.08 "release" was badly screwed, sorry for that.
So you are supposed to use either 2020.08.1 or 2020.08.2 and it's normal. 14:53
14:53 finanalyst left
codesections I'm checking with the 2020.07 release. `raku -v` shows '... version 2020.02 ...'; 14:53
then, in the /rakudo dir, I run `git checkout tags/2020.07` 14:54
rir Thanks codesections, given how complex and political time is I find your answer unsatisfying: surely reason was applied even it the choice was to punt; and that that would make your answer on the spot. 14:55
p6: say DateTime.new( :year(1970)).Instant
camelia Instant:10
codesections and then some of the lines reported by `.line` don't match the actual source code
rir The Docs say an Instant `is not tied to or aware of any epoch`. To me that implies that 0 is 10 seconds before the unix epoch is not something to rely upon from run to run. Is that right? Off-hand that seems to lack utility at best and to be trappy for casual scripters who might get caught 0.0116 % of the time.
Altai-man codesections, sorry for the dumb question, but do you clean/rebuild after changing branches? 14:56
codesections ... no? I'm not trying to *use* the checked out version of Raku, I'm trying to check out the version of the source code that corresponds to an already-running Raku process. Do I need to clean/rebuild to get the correct source code? 14:57
Altai-man codesections, so you are not running raku executable from rakudo/, but from other place? 14:58
[Coke] codesections: are you looking at rakudo source? or the corresponding nqp/moarvm code?
14:59 gnufr33dom left 15:00 aborazmeh left
codesections Altai-man: right. What I was doing was, in a raku program, running &SOME-CODE.file and &SOME-CODE.line, and then trying to go from that file/line number pair to the source code for whatever version of Rakudo is executing the script (given access to a git repo for Rakudo) 15:00
[Coke]: That's a good question. Let me look into that
Altai-man codesections, this is a pretty serious claim, I think, so someone with free time has to look into that trying to reproduce. 15:01
codesections Well, thanks for the help! At least now I know I'm on the right track :)
[Coke]: The rakudo source files. The first mismatched line number I saw was in Range.pm6 15:05
[Coke] you mentioned two different numbers above. are you sure you're looking at the right tag?
you mention 2020.02 and 2020.06 15:06
er, 07
codesections oh, I see where I said '02'. No, that was a typo. It's been .06 15:08
(except when I tested with a non-release version, which doesn't have the same issue)
but that uses a commit hash, not a tag 15:09
Altai-man codesections, I wonder if this can be a bug in .line/.file implementation. Can you double check your data and create a rakudo ticket please with a simple case where the data is mismatched? 15:12
codesections Altai-man: Will do 15:13
Altai-man codesections++
15:19 molaf joined 15:28 telex left 15:30 telex joined
codesections Altai-man: Actually, no issue is needed; I figured out the problem: when a method is an automatically generated accessor method, `line` points to the class declaration (which isn't a bug, but is worth documenting -- I'll open an issue/PR for the `lines` docs). I got confused because I was looking at a method that had changed, and thus didn't show up the way I expected. 15:31
Altai-man codesections, oh yes, good catch! Thanks for investigating this. :) 15:33
Geth doc: codesections self-assigned document behavior of `line` method for auto-generated accessor methods github.com/Raku/doc/issues/3606
codesections++ created pull request #3607: Expand Code.line documentation
15:46 sena_kun joined, fooist joined 15:47 Altai-man left 15:52 andrzejku joined 15:53 MasterDuke left
guifa So I tracked down a rakudo, eh, bug?(ish) last night. Trick was that a gist method used cmp, which stringifies, and so failed on things that can’t be stringified. 15:57
I get why Nil doesn’t have a Str method (even gist sort of violates the idea of Nil begetting Nil for everything), but for Regex it seems of an issue 15:58
15:58 aluaces left
guifa If I had typed my $a = /a/; say “The regex $a matches a”, I think the DWIM expectation is to produce “The regex /a/ matches a” 15:59
codesections Having not run that code, I agree that's basically the output I would have expected 16:01
guifa m: my $a = /a/; say “The regex $a matches a”
camelia Regex object coerced to string (please use .gist or .raku to do that)
The regex matches a
in block <unit> at <tmp> line 1
guifa Instead, it stringifies to the empty string, and produces the warning 16:02
Now, in that case, it makes total sense but…
say /a/ cmp /b/
evalable6 Regex object coerced to string (please use .gis…
guifa, Full output: gist.github.com/bb4a46899fee5e5674...1142daddb2
guifa or more telling
say /this is a really long regex that will probably never match anything/ cmp ‘’ 16:03
m: say /this is a really long regex that will probably never match anything/ cmp ‘’
camelia Potential difficulties:
Space is not significant here; please use quotes or :s (:sigspace) modifier (or, to suppress this warning, omit the space, or otherwise change the spacing)
at <tmp>:1
------> 3say /this7⏏5 is a really lon…
guifa say /thisisareallylongregexwithoutspacestoavoidthatannoyingwarningandwillnevermatchanything/ cmp ‘’ 16:04
m: say /thisisareallylongregexwithoutspacestoavoidthatannoyingwarningandwillnevermatchanything/ cmp ‘’
camelia Regex object coerced to string (please use .gist or .raku to do that)
in block <unit> at <tmp> line 1
16:25 ufobat left 16:34 approaching236 joined 16:35 rir left 17:04 domidumont joined 17:39 zacts joined 17:44 mowcat joined 17:46 zakame left 17:51 zakame joined 17:56 fooist left 18:13 natrys joined 18:21 aluaces joined 18:22 molaf left 18:29 bocaneri left 18:46 orinthe left, orinthe joined 19:05 kensanata joined 19:10 finanalyst joined 19:12 domidumont left
Geth ¦ problem-solving: vrurg assigned to jnthn Issue Coercion reconsidered and unified github.com/Raku/problem-solving/issues/227 19:17
19:21 nebuchadnezzar left 19:22 nebuchadnezzar joined 19:30 zacts left
Geth doc: e539502c0e | (Daniel Sockwell)++ (committed by Juan Julián Merelo Guervós) | doc/Type/Code.pod6
Expand Code.line documentation

Code.line's documentation previously just stated that it returns the
  line of the code object's declaration. This is *usually* true, but
isn't true for auto-generated code objects, which don't have a declaration. This commit explains how the method works in that case.
linkable6 Link: docs.raku.org/type/Code
Geth doc: 4b94178870 | (Daniel Sockwell)++ (committed by Juan Julián Merelo Guervós) | doc/Type/Code.pod6
Add example for Code.line with automatic accessor
19:40 cpan-raku left 19:41 cpan-raku joined, cpan-raku left, cpan-raku joined 19:42 molaf joined 19:45 Altai-man joined 19:48 sena_kun left
lizmat Extra Edition of the Rakudo Weekly News: rakudoweekly.blog/2020/08/31/new-h...mentation/ 20:09
codesections «Reports so far indicate 10% to 15% improvements in core setting compilation, as well as in roast testing.» \o/ 20:12
sjn nice! 20:15
20:26 kensanata left
[Coke] nwc10++ lizmat++ 20:35
lizmat And another Rakudo Weekly News hits the Net: rakudoweekly.blog/2020/08/31/2020-...ndidacies/ 20:52
21:02 finanalyst left
sjn lizmat: $rwn ~~ s/Rake/Raku/g 21:06
21:09 rir joined 21:11 finanalyst joined 21:15 AlexDaniel left
timotimo what the heck, whenever i click the link to the sparrowdo proposal thing, the tab immediately crashes 21:15
lizmat que? 21:16
lizmat checks
works for me :-(
21:16 AlexDaniel joined
timotimo huh, now i copypasted the url and paste&go in a new tab, now the browser UI is unresponsive 21:16
even in other windows
lizmat wow 21:17
21:17 AlexDaniel left, AlexDaniel joined
lizmat so, does sparrowdo.wordpress.com/2020/08/28...-proposal/ work for you? 21:17
timotimo no
maybe nothing works
lizmat uses Safari
timotimo perhaps updating the system in the background was the cause of my issue 21:19
now i can load the page
21:20 AlexDaniel left
mendel rir: i guess the Instant with the value 0 is in TAI (en.wikipedia.org/wiki/Internationa...mic_Time), whereas DateTime.new(:year(1970)) is in UTC, and around that time UTC was 10s behind TAI - see en.wikipedia.org/wiki/Leap_second 21:22
lizmat mendel: indeed, see github.com/rakudo/rakudo/blob/mast...s.pm6#L828 :-) 21:29
sjn lizmat: there's a typo in today's weekly news :-) 21:35
s/Rake userbase/Raku userbase/g
sjn still has the perl regexes in his fingers :-P 21:36
rypervenche I hadn't even thought to replace my "I made a typo" syntax with Raku regexes, haha. 21:39
21:43 natrys left 21:44 finanalyst left 21:58 andrzejku left
lizmat sjn++ # thanks, fixed! 22:00
unclechu hey, is there something in raku to handle managed resourse? like auto close of an opened file?
lizmat unclechu: there is no automatic destruction of objects on scope exit 22:01
one way to fix this is to use a LEAVE phaser
LEAVE .disconnect with $dbh;
unclechu like if i’d do `with open 'file', :r { smth; .close }` but without a need of manually calling `close`? 22:02
lizmat LEAVE .close with $handle 22:03
or maybe the modules.raku.org/dist/FINALIZER module is something for you?
rypervenche You could also use slurp, which would take care of the closing, no?
[Coke] nice thing about LEAVE is that it covers exceptional cases too
lizmat rypervenche: yes, indeed, "slurp" will take care of closing 22:06
unclechu lizmat: i’m trying to do `LEAVE .close with 'file'.IO.open: :a { .get.say }` but it fails with `Unexpected block in infix position (missing statement control word before the expression?)` 22:09
is it supposed to work with this kind of syntax? 22:11
lizmat I'm not sure what you're trying to achieve here? 22:12
say the first line of a given file, and make sure it gets closed ?
unclechu lizmat: yes, more or less 22:13
define the resource in the first line which will be automatically released after the block evaluation is done 22:14
lizmat with "file".IO.open { say .get; .close } 22:15
lizmat just realized that IO::Path doesn't have a .get method
Altai-man lizmat, but it shouldn't have one, no? 22:16
lizmat why not? it does have .slurp / .lines / .words ?
unclechu lizmat: it doesn’t define everything i described in the first line
lizmat if you're only interested in the first line ?
unclechu i have to not forget to close it as well as i have to handle exceptions 22:17
Altai-man lizmat, because there is a semantic difference between Path and Handle?
unclechu lizmat: no, i’m aware of all of those, first line was just an example
i need this for more complex scenarios
lizmat with "file".IO.open { say .get; LEAVE .close }
that would close the file whichever way you leave that scope, also with execution errors 22:18
unclechu well, still not the first line, this is more or less what i want: `with 'file'.IO.open: :r { LEAVE { .close; 'closed'.say } .get.say; .get.say; }`
lizmat Altai-man: well, for me it was a WAT just now :-) 22:19
unclechu but i’d really prefer this syntax: `LEAVE .close with stuff ...`
lizmat I'd expected it to be there
Altai-man unclechu, LEAVE just as other phasers can take blocks.
22:19 aluaces left
lizmat Altai-man: I think unclechu already got that :-) 22:19
unclechu Altai-man: okay, i know, what does it change here? 22:20
Altai-man Sorry, I'm sleepy, shouldn't have interrupted you...
lizmat Altai-man: I know the feeling, no worries :-) 22:21
unclechu Altai-man: np 22:22
Altai-man lizmat, if you ask me, a path is a path. It allows you not to worry about directory separators, get content and all that. A handle is a handle. It allows you to stream input/output. Slurp handies are handies, because you can say "Ok, give me everything at this path", I think, but if you start to treat paths like handles, it becomes somewhat weird. 22:23
Like, why even handles in the first place. Just throw more stuff into paths, god objects and all that.
unclechu lizmat: you said “you’d expect it to be there”, expect what? or it isn’t related to my question?
22:23 rindolf left
Altai-man s/directory separators/path separators/ 22:24
lizmat unclechu: no, that was about my discussion with Altai-man, sorry for the confusion
Altai-man: "file".IO.slurp is short for with "file".IO.open(:r) { .slurp; LEAVE .close } right ? 22:25
same for "lines" and "words"
so why not for "get" ? 22:26
Altai-man lizmat, I'd clarify. Do you found absence of getc, say, read for paths odd? 22:28
s/found/find/ 22:29
Ok, just ignore me now, going afk, I guess.
lizmat no 22:30
say would be strange on IO::Path
Altai-man Why?
lizmat I could see usefulness on getc , read
Altai-man It's just a shortcut for `"file".IO.open(:a) { .say "hehe"; LEAVE .close }`
lizmat because they would relieve you from having to worry about closing the handle
the .say (as would a .write or a .put) are write actions, *that* I don't see happening on IO::Path 22:31
but anything that's a read action, totally
IO::Path.read could be handy for checking on magic file markers 22:32
without having to worry about .close
Altai-man lizmat, I don't think we should treat IO::Handle as some unwanted child just because someone can forget something possibly. If that is a real trouble, add a weak warning if DESTROY is called and handle was not closed. Or remove it completely, because it is too dangerous to be left alive. 22:33
Hmmmm. 22:34
OTOH, I can understand your concern.
Less bugs is better than more. What I see odd here is lifting the burden from one concept to something which is kind of not really related to that. 22:35
Paths are paths, abstractions over strings, with handy methods for extensions and all that. They should not bear weight of the world of some different classes.
lizmat well, by that definition, we should probably deprecated IO::Path.lines and the like ? 22:39
Altai-man E.g., say there is a class Divisor which divides numbers and it can cry when a division by zero is asked for. Instead of doing something where the problem applies, we can add method `safe-division` to Int, `42.safe-division(20)` and it kind of resolves the problem, except that now numbers know something they probably should not know.
22:40 zakame left
lizmat Altai-man: I totally understand your point 22:40
it's just that with IO::Path having .lines / .words I sorta expected it also to have .get, and when thinking about also a .read 22:41
that's all
Altai-man lizmat, I appreciate the convenience it has, so it is rather hard to judge here (considering I am not a language designer and just a stranger who thinks aloud too much). 22:42
lizmat Altai-man: but it's late here as well... so I'll sleep on it :-)
Altai-man: you're not a stranger, and you definitely do *not* think aloud too much
vrurg Anyone to share the wisdom of adding a repo to Geth? 22:43
lizmat if anything, too little!
Altai-man lizmat, sure, have a nice rest, you deserve it!
lizmat Altai-man: good night!
(as do you!)
Altai-man vrurg, github.com/Raku/geth ? 22:44
vrurg lizmat: have a good rest!
Geth ¦ problem-solving: landyacht assigned to samcv Issue Coercing a string with a Roman numeral throws an error github.com/Raku/problem-solving/issues/228
vrurg Altai-man: added a webhook but lizmat reported it didn't work. 22:45
22:46 roguelazer left 22:47 roguelazer joined
Altai-man vrurg, dunno, I'd check server logs? 22:49
22:50 Guest21 joined
vrurg Altai-man: I don't have access to Geth server. I never remember who does. 22:52
22:54 Guest21 left
vrurg Heh, github reported 'Internal Server Error!' from Geth side... 22:54
22:55 Guest21 joined, Guest21 left 23:08 aborazmeh joined, aborazmeh left, aborazmeh joined 23:10 fooist joined 23:13 mowcat left 23:17 Altai-man left
guifa vrurg++ 23:22
(for Coercion considerations) 23:23
also lizmat++ for weekly
23:33 pecastro left