š¦ 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. |
|||
00:04
zacts left
00:07
zacts joined
00:08
zacts left
00:13
zacts joined
|
|||
[Coke] | I'm about 75% done on my article - is there pressure to get it done before midnight? | 00:20 | |
00:25
aborazmeh joined,
aborazmeh left,
aborazmeh joined
00:35
Doc_Holliwood joined
00:39
Kaeipi joined,
Kaiepi left
00:52
epony left
00:53
epony joined
01:00
__jrjsmrtn__ joined
01:01
_jrjsmrtn left
01:14
Altai-man joined
01:17
sena_kun left
01:28
aborazmeh left
01:33
Doc_Holliwood left
|
|||
Geth | doc: 99a5f62f16 | Coke++ | doc/Language/quoting.pod6 fix spelling |
01:40 | |
linkable6 | Link: docs.raku.org/language/quoting | ||
01:42
MilkmanDan left
01:43
molaf left
01:44
MasterDuke left
01:56
telex left,
molaf joined
01:58
telex joined
|
|||
guifa | Is there anyway a module can insert a dynamic variable into the same scope as the āuseā statement so it can have lexically scoped values? | 02:21 | |
02:26
AlexDaniel joined,
AlexDaniel left,
AlexDaniel joined
02:27
aborazmeh joined,
aborazmeh left,
aborazmeh joined
02:29
fooist joined
02:35
fooist left
02:38
fooist joined
02:43
fooist left
02:44
fooist joined
|
|||
fooist | guifa: is this what youāre looking for? docs.raku.org/language/modules#EXPORT | 02:44 | |
02:55
fooist left
02:57
MilkmanDan joined
03:08
zacts left
03:13
zacts joined
03:15
aborazmeh left
04:15
unicodable6 left,
benchable6 left,
quotable6 left,
coverable6 left,
notable6 left,
linkable6 left,
bloatable6 left,
releasable6 left,
nativecallable6 left,
reportable6 left,
statisfiable6 left,
evalable6 left,
shareable6 left,
sourceable6 left,
committable6 left,
greppable6 left,
bisectable6 left,
tellable6 left,
squashable6 left,
coverable6 joined,
benchable6 joined
04:16
sourceable6 joined,
linkable6 joined,
releasable6 joined,
unicodable6 joined,
shareable6 joined,
evalable6 joined,
nativecallable6 joined,
bisectable6 joined,
greppable6 joined,
tellable6 joined,
bloatable6 joined,
quotable6 joined
04:17
ensamvarg3 joined,
statisfiable6 joined,
squashable6 joined,
reportable6 joined
04:18
notable6 joined,
committable6 joined,
cpan-raku left
04:19
cpan-raku joined
04:20
cpan-raku left,
cpan-raku joined
05:15
sena_kun joined
05:16
Altai-man left
05:27
gnufr33dom joined
05:46
bocaneri joined
05:48
ab5tract left,
ab6tract left
05:59
Grauwolf_ is now known as Grauwolf
06:11
Doc_Holliwood joined
06:19
ab5tract joined,
ab6tract joined
|
|||
ab6tract | hey timotimo, great! except I have the complete edition of Comma so was planning to use the opportunity to explore the extended profiling options there :D | 06:20 | |
I just want to take a bit of a break from the rational topic, definitely planning to post a follow-up on the personal blog | 06:21 | ||
06:23
sjm_uk joined
06:26
skids left
06:34
JJMerelo joined
06:36
zacts left
06:37
zacts joined
06:47
zacts left
07:16
MilkmanDan left
07:17
MilkmanDan joined
|
|||
Geth | advent: eb7f7bd6fa | (JJ Merelo)++ | 20th/articles/rfc307.html Starting RFC 307, just in case |
07:22 | |
07:35
Sgeo left
07:36
leont joined
|
|||
Geth | advent: 691fb5732d | (JJ Merelo)++ | 20th/articles/rfc307.html Finishing draft |
07:55 | |
JJMerelo | OK, finished this draft which I'll hold as reserve, or schedule it for today if nothing shows up earlier. Comments and suggestions are welcome. | ||
08:00
JJMerelo left
08:35
Doc_Holliwood left
08:39
squashable6 left,
squashable6 joined
08:41
kensanata joined
08:43
wamba joined
08:51
Doc_Holliwood joined
09:04
molaf left
|
|||
Geth | advent: taboege++ created pull request #60: 20th: Write about RFC 190 |
09:11 | |
09:14
Altai-man joined
09:16
sena_kun left
09:47
molaf joined
09:49
ab6tract left,
ab5tract left
09:57
wamba left
09:59
molaf left
10:03
bocaneri left,
Doc_Holliwood left
10:06
wamba joined,
rindolf joined,
ab5tract joined,
ab6tract joined
10:07
ab5tract_ joined
|
|||
Geth | advent: c49ded740b | (Tobias Boege)++ | 2 files 20th: Write about RFC 190 |
10:11 | |
advent: 51b45d72de | (Tobias Boege)++ | 20th/articles/rfc190.md Linkify RFC 190 |
|||
advent: fb27f4443a | (Tobias Boege)++ (committed using GitHub Web editor) | 2 files Merge pull request #60 from taboege/master 20th: Write about RFC 190 |
|||
10:11
ab5tract left,
ab6tract left
10:12
ab5tract joined
10:14
molaf joined
10:18
cpan-raku left
10:19
cpan-raku joined,
cpan-raku left,
cpan-raku joined
10:34
molaf left
10:42
dolmen joined
|
|||
Geth | advent: 538971c610 | (Tobias Boege)++ | 20th/articles/rfc190.md Add halfsentence to article |
10:42 | |
10:44
Black_Ribbon left
10:48
JJMerelo joined
11:02
JJMerelo left
11:09
stoned75 joined
|
|||
Geth | doc/setbagmix-op: c032704ed8 | (Stoned Elipot)++ | 6 files Simplify and uniformize sections on set operators While here tweak examples' output to match current rakudo behavior and remove (now?) inaccurate mention about results' type with SetHash operands. |
11:36 | |
doc: stoned++ created pull request #3557: Simplify and uniformize sections on set operators |
11:37 | ||
11:39
wamba left
11:51
wamba joined
12:14
rindolf left
12:16
Doc_Holliwood joined
12:23
molaf joined
12:31
stoned75 left
12:34
rindolf joined
12:40
dolmen left
12:51
molaf left
13:00
dolmen joined
13:04
Doc_Holliwood left
13:06
skids joined
13:10
stoned75 joined
13:15
sena_kun joined
13:17
Altai-man left
13:28
keutoi joined
|
|||
keutoi | Is there a reference manual for raku? | 13:28 | |
codesections | keutoi: I'm not quite sure what you mean by "reference manual". The language documentation is at docs.raku.org If that isn't what you're looking for, can you be a bit more specific about what you'd like? | 13:30 | |
keutoi | This is what I am looking for, docs.raku.org/language.html. Thanks. | 13:32 | |
Is there any offline pdf version of it? | |||
13:36
squashable6 left
|
|||
codesections | I'm not aware of a PDF version. The p6doc tool (which I believe is installed by default with the toolchain?) has an offline plaintext version | 13:36 | |
I'm pretty sure that tool is in the process of being upgraded/rewritten as rakudoc, but I'm not positive of the status of that process | 13:37 | ||
13:37
squashable6 joined
|
|||
codesections | You can also build the HTML documentation locally using github.com/Raku/Documentable | 13:39 | |
(which is how it's built for the site) | |||
keutoi | Things would be a lot easier if these were available for default: github.com/Raku/doc/tree/master/doc/Language | 13:40 | |
something like perldoc | |||
13:40
molaf joined
13:42
molaf left
|
|||
codesections | I'm not quite sure I follow (others probably would ā many people have experience with perl that I lack). But my understanding was that p6doc/rakudoc were intended to be direct equivalents to perldoc | 13:42 | |
keutoi | codesections: So rakudoc/p6doc is equivalent to perldoc? Is it packaged separately or does it come with raku itself? | 13:45 | |
tobs | I only know that once upon a time I `zef install p6doc`d and got the pod files for offline documentation in the perldoc manner. | 13:46 | |
But there have been changes. I don't know how it works nowadays and I couldn't find out tracing these repositories. | |||
codesections | I *thought* it was came with Raku, but I can't remember 100% (it might be packaged with Rakudo Star, which is Rakudo + some helpful packages, but doesn't release as often) | ||
s/was came/came/ | 13:47 | ||
tobs | In any case, in your stead I would try to install the new rakudoc with zef and see if it brings the documentation files with it, and if not open an issue. | ||
codesections | Oh, if tobs had to install it with zef (the raku package manager) then it must not have come with Raku | ||
tobs | this was in 2017 :) | 13:48 | |
codesections | My (maybe wrong) understanding is that rakudoc isn't really released yet, and you should still use p6 doc | ||
*p6doc | |||
keutoi | I found p6doc using zef. Let me try install and see... | 13:49 | |
rypervenche | p6doc should work for you. rakudoc is not yet ready. | 14:00 | |
codesections | rypervenche: do you know what advantages rakudoc will provide (other than the updated name, I mean :D) | 14:02 | |
? | |||
rypervenche | codesections: What I know is the current documentation roadmap here: github.com/Raku/doc/issues/2983 | 14:06 | |
keutoi | Hmm, `zef install p6doc` fails with permissions requiring /usr/share/perl6/doc/site: mkdir failed. A defaulting to home directory installation would have been nice. | ||
codesections | hmm, agreed, keutoi. I'm not sure if that's a p6doc issue or a zef one | 14:07 | |
rypervenche | keutoi: Yes, that's unfortunately the current state of p6doc, it needs to be run as root. I'm also a fan of keeping things inside my home directory. | ||
codesections | rypervenche: thanks, I'd seen that roadmap but wasn't sure if it was still the current plan. So it's helpful to hear that it is :) | 14:08 | |
tbrowder | leont: you here? | 14:21 | |
14:22
Sgeo joined
|
|||
leont | Busy with $work, but otherwise yes | 14:26 | |
tellable6 | 2020-08-12T17:10:30Z #raku <JJMerelo> leont still nothing scheduled for today. I'm gonna upload your article. Please accept the invitation and I'll assign authorship to you. | ||
2020-08-13T06:45:37Z #raku-dev <JJMerelo> leont I still need you to accept the invitation so that the article carries your byline (and you can edit it if necessary) | |||
tbrowder | .ask leont how can i, using Path::Finder, limit a base :name to the dos glob "[A-Z]*"? | ||
tellable6 | tbrowder, I'll pass your message to leont | ||
leont | I'm here ;-) | ||
tbrowder | ok! i'm trying out path::finder for first time and all is well except the globbing prob ^^ | 14:27 | |
i live the depth restiction File::Find doesn't have | 14:28 | ||
*love | |||
*restriction | |||
leont | Passing it like that should work, it will convert a Str argument to an IO::Glob | ||
tbrowder | but it seems IO::Glob has the same problem | 14:29 | |
i see no test in either module for that case, or how to implement it | 14:30 | ||
i can do it after the fact but thought you could show how to do it | 14:32 | ||
if we could "use module" here (hint, hint) it would be "usefu" | 14:33 | ||
14:33
dogbert17 joined
14:34
skids left
|
|||
tbrowder | maettu: is there any way to load more modules into camelia? | 14:35 | |
codesections | tbrowder: the other day AlexDaniel showed a way to load modules into one of the other evalbots (evalable?) | 14:37 | |
tbrowder | m: use IO::Glob | ||
camelia | 5===SORRY!5=== Error while compiling <tmp> Could not find IO::Glob in: inst#/home/camelia/.raku inst#/home/camelia/rakudo-m-inst-2/share/perl6/site inst#/home/camelia/rakudo-m-inst-2/share/perl6/vendor inst#/home/camelia/ā¦ |
||
codesections | You can search the logs for the details | ||
AlexDaniel | I should make it simpler :) | ||
tbrowder | but we were told that would be a security problem for the bots to do it | ||
AlexDaniel | no? Who told you that? You can already run arbitrary code x) | 14:38 | |
codesections | Well, it's a security *concern* certainly. And I think whoever maintains camelia said they didn't want the maintainence burden of adding that feature | 14:39 | |
but I guess that's why we have multiple bots :) | |||
AlexDaniel | huh? where have you all heard all that weird stuff? x) | ||
14:39
Doc_Holliwood joined
14:40
Sgeo left
|
|||
tbrowder | well go look back at the log. i then asked why most all the modules couldn't be available on the server and... | 14:40 | |
AlexDaniel | the current situation is that all bots allow you to do a bit too much. Respect them and don't break them. That's about it. | ||
all except perlbot, that one is sandboxed properly, but then you get all the limitations | 14:42 | ||
codesections | AlexDaniel: the conversation tbrowder mentioned was at colabti.org/irclogger/irclogger_lo...08-05#l501 | ||
guifa | Letās say I have a dynamic variable | 14:43 | |
Is there a way I can get a (pref ordered) list of all matching ones up the call chain? | 14:44 | ||
AlexDaniel | āI don't want camelia's build process to get any more complicatedā ā I don't see anything about security | ||
and that's right, because the bot is not secure by itself | |||
14:45
molaf joined
|
|||
lizmat | guifa: not without the use of nqp ops | 14:46 | |
afaik | |||
codesections | Yeah, you're right. I guess it was a bit later (colabti.org/irclogger/irclogger_lo...08-05#l651 ) when _rba speculated about security issues. But I guess that isn't quite right. Thanks for the correction :) | ||
tbrowder | ok, so how do we use a module with camelia? | 14:47 | |
guifa | lizmat: ah okay. I was experimenting around with scoping overrides/fallbacks for UserLanguage and UserTimezone, and things work perfectly ā¦Ā until an override is cleared and then it goes to the normal setting, rather than grabbing any enclosing override. | 14:48 | |
that said, thatās probably a much more manageable quirk than having fallback/overrides be global only | |||
lizmat | dynamic variables have been good enough to make parsing Raku actually work... so I guess you need to look at what you're trying to achieve | 14:49 | |
guifa | lizmat: no doubt. I think actually I should probably include the whole override chain with each use * :override statement instead of trying to do a single variable | 14:52 | |
When you add a custom operator, that scope basicallt gets a cloned copy of the grammar, plus the new operator, yeah? | 14:53 | ||
codesections | guifa: I'm slightly confused ā I thought CALLERS did what you're asking about? | ||
or OUTERS | 14:54 | ||
Oh, I guess they don't return a list? Just the first match? That's a shame | 14:55 | ||
guifa | CALLERS and OUTERS go up the chain but will only return the first value āĀ at least in my first implementation attempt, the issue would be when one of them was undefined, Iād want to progress to the *next* one up, and if it...... | ||
yeah that :-) | 14:56 | ||
lizmat | guifa: did you try CALLERS::CALLERS:: ? | 14:57 | |
vrurg | CALLERS flatten down the call stack contexts. It's CALLER which gives exactly one. | ||
codesections | vrurg: that's what I thought too. But actually, CALLERS gives exactly one result from any number of stacks | 14:58 | |
guifa | m: my $a = 1; {Ā my $a = 2; {Ā my $a = 3; {Ā my $a = 4; { say $OUTERS::a } } } }; | ||
camelia | 4 | ||
guifa | (as opposed to (4, 3, 2, 1) ) | ||
vrurg | Besides, I had to rewrite the PseudoStash for 6.e because in 6.c there was too many flaws. | 14:59 | |
guifa agrees that 4 is the best DWIM result, for the record | |||
vrurg | codesections: I didn't follow the whole discussion, just was passing by. What one result do you mean? | 15:00 | |
guifa | vrurg: basically, getting just scalar 4, as opposed to listy (4,3,2,1) in the above example | ||
codesections | yeah, that | ||
I would have thought this would work, but it seems not to: | 15:02 | ||
m: {my $*a = 1; { my $*a is default(CALLERS::<$*a>) = 2; $*a = Nil; { say OUTERS::('$*a')}}} | |||
camelia | Nil | ||
15:02
MilkmanDan left
|
|||
vrurg | Any pseudostash is looking for the first occurence only. I.e. it gives you the symbol visible in a particular context. To get a list one would have to traverse the contexts manually. | 15:02 | |
15:02
MilkmanDan joined
|
|||
guifa | Iāll probably do something akin to my @*override .= append: CALLERS::<@*override>, $new-override; | 15:06 | |
at each level | |||
codesections | Any idea why the `is default(OUTERS::<@*override>)` approach doesn't seem to work? | 15:07 | |
Will traits just not work with dynamic variables? | |||
Or variables at all, I guess. | 15:10 | ||
vrurg | I guess the confusion comes from the plural for of CALLERS/OUTERS names. But the point of it is to make distinction between CALLER/OUTER which give exactly and only the requested scope contrary to collecting data from all upstream frames. | ||
codesections | m: {constant $a=1; {my $b is default(OUTERS::<$a>); say $b}} | ||
camelia | 1 | ||
vrurg is afk for a while. | |||
guifa | Having an ALL-CALLERS and ALL-OUTERS could be cool, but would probably be of very limited used and definitely has workarounds | 15:11 | |
15:12
aluaces left
15:14
stoned75 left
15:18
MilkmanDan left,
squashable6 left
|
|||
lucs | Does having 'use v6.e' mean "This code requires at least version 6.e of Raku to run correctly" or rather "This code can only use features that are present in version 6.e (although I'm running 6.f for example)"? | 15:19 | |
15:20
squashable6 joined
|
|||
[Coke] | if something is only defined in 6.f, and you are in a block that has 6.e, it is expected to fail. | 15:22 | |
(if you use the aforementioned something) | |||
if you don't specify, you get latest, which in your example, I assume is 6.f | 15:23 | ||
15:23
ab5tract_ left,
ab5tract left
|
|||
lucs | So more the latter, eh. Thanks. | 15:26 | |
By the way, that sounds painful to maintain for the developers. | 15:27 | ||
[Coke] | "torture the implementors on behalf of the users" was a motto | ||
lucs | :) | ||
15:27
molaf left,
MilkmanDan joined
|
|||
AlexDaniel | [Coke]: I think language switching can only be done in files, not in blocks | 15:28 | |
[Coke] | m: use v6.d; say "hi"; {use v6.c; say "I think it works, maybe it doesn't restrict?"} | 15:32 | |
camelia | Don't know setting RESTRICTED at gen/moar/ModuleLoader.nqp:249 (/home/camelia/rakudo-m-inst-2/share/perl6/lib/Perl6/ModuleLoader.moarvm:previous_setting_name) from gen/moar/ModuleLoader.nqp:254 (/home/camelia/rakudo-m-inst-2/share/perl6/lib/ā¦ |
||
[Coke] | oops. | 15:33 | |
so, s/block/file/ in my statement. | 15:34 | ||
AlexDaniel++ | |||
lucs | Okiedoke | ||
AlexDaniel | e: use v6.d; say "hi"; {use v6.c; say "I think it works, maybe it doesn't restrict?"} | ||
evalable6 | (exit code 1) 04===SORRY!04=== Erā¦ | ||
AlexDaniel, Full output: gist.github.com/e062001407aaa70c68...92ca5833f4 | |||
AlexDaniel | āToo late to switch language version. Must be used as the very first statement.ā | ||
Geth | doc: a0e2aa0fb3 | stoned++ (committed using GitHub Web editor) | 6 files Simplify and uniformize sections on set operators (#3557) While here tweak examples' output to match current rakudo behavior and remove (now?) inaccurate mention about results' type with SetHash operands. |
15:38 | |
linkable6 | DOC#3557 [closed]: github.com/Raku/doc/pull/3557 Simplify and uniformize sections on set operators | ||
15:39
keutoi left
|
|||
codesections | m: my &*a= {1}; { my &*a is default( { say CALLER::CALLER::<&*a>()}) = { 2 }; say &*a(); &*a = Nil; say &*a() } | 15:41 | |
camelia | 2 1 True |
||
codesections | guifa: ^^^^ works (I realize I spent far too long thinking about that, esp. considering it's not even my code, it doesn't generate an elegant solution, and you already have a (probably better) workaround) | 15:42 | |
*but* it was helpful in understanding what Raku is doing at compile time vs runtime, so not *entirely* a waste :) | 15:43 | ||
er, there's any extra `say` I didn't mean to have | |||
m: my &*a= {1}; { my &*a is default( { CALLER::CALLER::<&*a>()}) = { 2 }; say &*a(); &*a = Nil; say &*a() } | 15:44 | ||
camelia | 2 1 |
||
Geth | advent: cf33725412 | (Elizabeth Mattijsen)++ (committed using GitHub Web editor) | 20th/README.md Claim #159 Turns out that the intro to #200 is worth a blog post of its own |
15:46 | |
15:54
demostanis joined
|
|||
demostanis | Hello everyone! I am trying to install GPGME module, but it is failing with this error: ===> Failed to find dependencies: gpgme:from<native> | 15:54 | |
What does this mean? | |||
15:54
Chi1thangoo left
|
|||
codesections | demostanis: it means that it expected you to have a non-Raku package `gpgme` installed, but you don't | 15:55 | |
(e.g., though your package manager) | |||
s/you don't/it can't find it/ | |||
demostanis | I did as they adviced, sudo apt install libgpgme11, but it doesn't change anything. | 15:56 | |
Or do I need libgpgme-dev? | |||
codesections | I'm not sure. I can interpret the error msg, but that's about it :) | 15:57 | |
demostanis | I believe that was the error. | 15:58 | |
They should change their README, but it has been 2 months seen the project had a change. | 15:59 | ||
codesections | 2 months isn't that long :) | 16:01 | |
Geth | doc/mix-op-ref: 0a9d217b35 | (Stoned Elipot)++ | 2 files More on { } and < > operators for Mix and MixHash - mention <> postcircumfix - add ref to operators' description |
||
16:01
stoned75 joined
|
|||
tbrowder | e: use IO::Glob; | 16:01 | |
evalable6 | (exit code 1) 04===SORRY!04=== Erā¦ | ||
tbrowder, Full output: gist.github.com/619b0a2d065cd30b5b...68de84d102 | |||
Geth | doc: stoned++ created pull request #3558: More on { } and < > operators for Mix and MixHash |
||
tbrowder | e: use NativeCall; | 16:02 | |
evalable6 | |||
tbrowder | m: use NativeCall; | 16:03 | |
camelia | ( no output ) | ||
tbrowder | e: require IO::Glob | ||
evalable6 | (exit code 1) Could not find IO::Glob in: fā¦ |
||
tbrowder, Full output: gist.github.com/c2e8f5fb5eb40ccc16...3738bd0df4 | |||
guifa | codesections: hmm thatās a really creative solution. I wonder though if upper levels change if the default there will change as well (e.g. if theyāre bound or not, and if not if they can be) | 16:04 | |
tbrowder | i still haven't heard why more published modules can't be made available. need volunteers? need resources? security? | 16:05 | |
codesections | tbrowder, I thought we established that they could be, as shown here: colabti.org/irclogger/irclogger_lo...08-12#l189 | 16:07 | |
AlexDaniel | tbrowder: for whateverable, it just needs code to make that process ā easier | 16:08 | |
tbrowder | ok, so i should fork and take a look. thanks, AlexDaniel | 16:09 | |
sena_kun | releasable6, status | ||
releasable6 | sena_kun, Next release in ā9 days and ā2 hours. 1 blocker. Changelog for this release was not started yet | ||
sena_kun, Details: gist.github.com/e357de4caf55a3fd29...7cc2cfa9f5 | |||
sena_kun | ouch, that's close | ||
AlexDaniel | tbrowder: for example: detect use statements automatically, build the dependency tree, find the required modules in perl6-all-modules, create a PERL6LIB string | ||
tbrowder: you can prototype this without forking, I'll help to bring your code into whateverable | 16:10 | ||
there are easier approaches but they might not exactly work. For example, we can ask `zef` to install detected modules into a separate directory | |||
that's very easy to implement | 16:11 | ||
ā¦ but then it'd probably take minutes before it can actually run anythingā¦ | |||
16:11
gnufr33dom left
|
|||
AlexDaniel | that said, we can perhaps cache some stuff to make further commands faster | 16:11 | |
actually, try it? | |||
tbrowder | to me, though, looking at the path, someone running the server could have them loaded already. why that can't be done is a mystery to me. | 16:12 | |
AlexDaniel | tbrowder: no no | ||
that'd mean having 1000+ modules in your PERL6LIB | |||
I doubt that's going to work well | |||
tbrowder | ok, that's what i don't understand is where this is all happening. where is home? | 16:14 | |
16:14
Doc_Holliwood left
|
|||
AlexDaniel | tbrowder: what exactly? | 16:14 | |
tbrowder | well, everytime i do a use i see evidence that the code is looking in all the usual places and can't find. so where is the file system it's looking at? | 16:16 | |
m: use IO::Glob | |||
camelia | 5===SORRY!5=== Error while compiling <tmp> Could not find IO::Glob in: inst#/home/camelia/.raku inst#/home/camelia/rakudo-m-inst-2/share/perl6/site inst#/home/camelia/rakudo-m-inst-2/share/perl6/vendor inst#/home/camelia/ā¦ |
||
AlexDaniel | e: use IO::Glob | 16:17 | |
evalable6 | (exit code 1) 04===SORRY!04=== Erā¦ | ||
AlexDaniel, Full output: gist.github.com/d2e4f8218850cdb365...131805ba1b | |||
tbrowder | see the paths? where are they? | ||
AlexDaniel | tbrowder: on the server | ||
I don't really understand the question :( | 16:18 | ||
tbrowder | so what does PERL6LIB have to do with it? color me dumb, but i don't understand why the modules can't be installed there. | 16:19 | |
Geth | doc: f547ef406f | stoned++ (committed using GitHub Web editor) | 2 files More on { } and < > operators for Mix and MixHash (#3558) - mention <> postcircumfix - add ref to operators' description |
||
linkable6 | DOC#3558 [closed]: github.com/Raku/doc/pull/3558 More on { } and < > operators for Mix and MixHash | ||
AlexDaniel | tbrowder: as I said, because we can't really install 1612 modules there | ||
tbrowder | in camelia's home dir unless it's ephemeral or something. | 16:20 | |
16:20
Doc_Holliwood joined
|
|||
AlexDaniel | you can try it on your own machine and then tell us if this affects anything in a negative way :) | 16:20 | |
preferably in a vmā¦ | |||
I doubt it's going to work well, but maybe somebody can share their experience and let me know if it should be ok | 16:21 | ||
for example, will it affect startup time? | 16:22 | ||
tbrowder | ok, i asked why couldn't we get or vote for a subset, anything | ||
AlexDaniel | I have a hunch that it will | ||
tbrowder: OK, I can give you very actionable steps: detect use statements in code, run `zef` to install detected modules into a specific directory (preferably in /tmp), construct a PERL6LIB string so that these modules are included, send me the code for all that and all whateverable bots will support modules | 16:23 | ||
codesections | re: subset: isn't that basically how the current manual approach works? Just the "subset" is "any modules people have bothered to install manually" | ||
and by "people" I just mean "anyone who understands the (slightly involved, but not hard) process for doing it" | |||
tbrowder | i'll stop bugging y'all about this--seems to be too hard to do, but it could be very useful. | 16:24 | |
AlexDaniel | you've got to be kidding me | ||
ātoo hard to doā I gave you three freaking steps | |||
which translate toā¦ actually about three lines of code give or take | 16:25 | ||
tbrowder | AlexDaniel i know, but you indicated that that was temporary and would't last. i'm happy to load a bunch of modules here. | ||
AlexDaniel | what do you mean wouldn't last | ||
where have I said that | 16:26 | ||
I said that the idea of loading hundreds of modules isn't going to fly, but installing the ones you can autodetect and including just them is perfect | |||
16:26
dolmen_ joined
16:27
dolmen left
|
|||
tbrowder | we obviously are talking around each other, sorry. i'll just do what you said when it's quiet. | 16:27 | |
AlexDaniel | not sure about the each other part. When it comes to whateverable, I tend to provide very clear actionable tasks. See my first reply in this discussion. | 16:29 | |
I can expand on any specific one if you want. For example, for the first part you don't need to have a very accurate parser, just a regex to find āuse ā¦ā¦;ā in text is going to be OK. Perfect is the enemy of good in this case. | 16:32 | ||
for zef to install into a specific location use `--to` parameter when running zef | 16:33 | ||
btw /tmp is isolated for every bot, so it sounds like a good location to use for now | 16:34 | ||
here's example usage: github.com/Raku/Blin/blob/9ad9b7d2...g.pm6#L405 | |||
and for the last part just `run <perl6>` with a modified ENV | 16:35 | ||
16:36
molaf joined
|
|||
AlexDaniel | after that's done, give me an hour or two and we'll be able to test it on the bots | 16:36 | |
16:43
Xliff joined
|
|||
Xliff | \o | 16:43 | |
codesections | o/ | 16:44 | |
Xliff | Any thoughts on the best way to package up a Raku module distribution? Particularly if I want to convert that to something digestable to the major Linux distro package managers? | ||
deb, rpm, etc | 16:45 | ||
timotimo | nine has implemented stuff for packaging raku modules on suse with rpm | 16:51 | |
so i guess steal all of that :) | |||
AlexDaniel | Xliff: yeah, see OBS and nine's efforts. Ideally it shouldn't even be something you'd do, that is we can just build all modules | 16:55 | |
tbrowder | AlexDaniel: thank you | 17:00 | |
17:00
skids joined
|
|||
codesections | AlexDaniel: when you say "not something you do" do you mean "you don't do it, distro maintainers do" or "no one needs to do it, users just install with zef or something similar?" | 17:01 | |
AlexDaniel | codesections: my hope is that OBS will be able to build all modules automatically | ||
codesections: so as a module author you'd just go to obs and see your module already built for at least one distro, hopefully more | 17:02 | ||
that is, it shouldn't be your worry | |||
module author's worry I mean | |||
nine: feel free to correct me if I'm wrong :) | 17:03 | ||
codesections | But how do you go from there to "can be installed with apt/yum/pacman/etc"? Unless I'm missing something, *someone* still has to do the packaging work (even if it's much easier at that point) and approve the package, right? | ||
AlexDaniel | codesections: well, we can provide packages. Each distro has its own rules for what's included and how | 17:04 | |
codesections | Fair enough. I'm with you now. Thanks for clarifying :) | ||
AlexDaniel | Xliff: my understanding is that the question is āhow do I generate .deb .rpm etc. of my modulesā, and that's something we should do with OBS for all modules | 17:05 | |
codesections: ā :) | |||
El_Che | I think it's a terrible idea | ||
AlexDaniel | El_Che: honest and direct, I like it :) | 17:06 | |
El_Che: why | |||
El_Che | best to leave debs/rpms for modules packages and used by the OS itself | ||
for starters, it requires root to install | |||
AlexDaniel | so? All system packages require root on most distros? | 17:07 | |
El_Che | packaged modules can not just be upgraded as they are used as dependencies | 17:08 | |
those modules are global | |||
and one of the nice things of raku is local as default | |||
(in constrast with other dynamic languages where you get global as default) | 17:09 | ||
AlexDaniel | I don't understandā¦ you're against modules being packaged altogether? | ||
El_Che | not at all | ||
I think modules should be packaged by distros | |||
and their upgrades within their rules | 17:10 | ||
also security | |||
AlexDaniel | that's true, but if you need a module that's not in your distro? | ||
Xliff | AlexDaniel: OK. So I need to read up on OBS. Is that the same thing timotimo was talking about? | ||
El_Che | and for regular apps, I would like to see their deps in their repo | ||
AlexDaniel | Xliff: yes | 17:11 | |
El_Che | as a vendor dir | ||
for for now, zef-able will do | |||
Xliff | AlexDaniel++ timotimo++ | ||
El_Che | Xliff: OBS is very capable | ||
Xliff: too capable for me. I tried it and stopped somewhat with a 1994 feeling | |||
very non intuitive | 17:12 | ||
17:14
Altai-man joined
|
|||
Xliff | El_Che: 1994 or 1984? Huge difference. :) | 17:16 | |
17:17
sena_kun left
|
|||
El_Che | hehe | 17:17 | |
I don't think they are evil :) | 17:18 | ||
17:18
timlegge left
17:20
Sgeo joined
|
|||
Xliff | AlexDaniel: What about RakuDist? | 17:29 | |
AlexDaniel | Xliff: I don't know | 17:30 | |
Xliff | Where can I read up on Raku OBS? | 17:31 | |
AlexDaniel | Xliff: for RakuDist, get in contact with melezhik. For OBS, talk to nine | 17:34 | |
17:56
bocaneri joined
18:03
stoned75 left,
bocaneri left
18:14
xinming joined
18:16
xinming_ left
|
|||
demostanis | How do I merge two hashes in Raku? Something like Object.assign() in JavaScript | 18:17 | |
Nevermind, I've found | |||
stackoverflow.com/questions/608741...-hash-raku | 18:18 | ||
18:21
dolmen_ left,
dolmen_ joined
|
|||
AlexDaniel | demostanis: which of the answer did you choose? :) | 18:31 | |
answers* | |||
18:32
dolmen_ left
18:35
Xliff left
18:36
skids left
18:39
vrurg left
18:43
squashable6 left
18:46
squashable6 joined
18:50
xinming left,
Kaiepi joined
18:52
Kaeipi left
|
|||
codesections | I really like the %(|%h1, |%h2) approach. It shows off a bit of how well-designed Raku is: because we have the Pair concept, a Hash is built on top of a List of pairs. (I'm not saying it *really* is implemented that way, but it is semantically). | 18:52 | |
18:53
xinming joined
|
|||
codesections | That means it makes perfect sense that %h.List gives you a List of Pairs. And that %h.Slip (or `|%h`, which is the same thing) gives you a Slip of Pairs | 18:53 | |
and, *of course* concatinateing two Slips of Pairs gets you a List of Pairs. | 18:54 | ||
And, a List of Pairs is all you need to build a new Hash out of | |||
And all that *just falls out* of Raku's basic semantics | 18:55 | ||
Compare to JavaScript, which had to add a bunch of hard-to-remember APIs to do the same thing (Object.entries(hash) is `|%h`, Object.assign(hash) is %(|%h, |$h), etc) | 18:56 | ||
18:58
wamba left
|
|||
codesections | Also, minor note: the first `|` isn't required. `%(%a, |%b)` works just as well (which, again, makes semantic sense) | 18:59 | |
19:04
vrurg joined
|
|||
tobs | I like the flustered face operator too: | 19:08 | |
AlexDaniel | codesections: but it's slower compared to `my %c = %a, %b` | ||
tobs | m: my %foo = :42a, :50b; my %bar = :10b, :12d, :1c; say %foo Ā»//Ā« %bar | ||
camelia | {a => 42, b => 50, c => 1, d => 12} | ||
AlexDaniel | tobs: yeah I can kinda guess the performance of that | 19:09 | |
AlexDaniel measures | |||
tobs | note that in this case %foo's keys win over %bar's | ||
AlexDaniel | actually, it's pretty fast! | ||
nice | |||
as fast as |%a, |%b is | 19:10 | ||
codesections | AlexDaniel: When I care enough about performance to sacrifice good/ergonomic semantics for perf, I write Rust (my other main language) :D | 19:12 | |
(Mostly joking) | |||
19:12
molaf left
|
|||
codesections | By the way, what's a good way to micro-benchmark things like that? | 19:12 | |
You measured Ā»//Ā« super quickly :) | 19:13 | ||
tobs: I had to think through the semantics of Ā»//Ā« for a minute but, after giving it some thought, I like it too. It also makes perfect semantic sense | 19:17 | ||
19:24
ensamvarg3 left
19:30
sjm_uk left
19:32
rindolf left
19:34
seanrobert joined
|
|||
AlexDaniel | codesections: it's not about microbenchmarking, most perf differences in rakudo are very significant and require no accurate tooling | 19:38 | |
which is why you can even bisect for perf regressions and stuff like that | |||
m: my %a = (1..200000); my %b = (1..200000); say %(|%a, |%b).keys.elems; say now - INIT now | 19:41 | ||
camelia | 100000 2.4014804 |
||
AlexDaniel | m: my %a = (1..200000); my %b = (1..200000); my %c = %a, %b; say %c.keys.elems; say now - INIT now | ||
camelia | 100000 1.812962 |
||
AlexDaniel | keep in mind though that a lot of that time is spent on constructing the hashes | ||
codesections | I see, thanks. (I didn't know INIT worked in a REPL; interesting) | 19:43 | |
AlexDaniel: And you're not worried about misleading results from Rakudo optimizing out operations in a simple loop yet because that level of optimization work hasn't yet been done? | 19:44 | ||
AlexDaniel | codesections: yeah, it rarely does anything that smart | 19:49 | |
codesections: camelia is not REPL, it's just executing a file | |||
codesections | Fair enough. I'm sure we'll get there. | 19:50 | |
AlexDaniel | codesections: also note that in this case I *am* using the result, it can't exactly just optimize it away | ||
well, maybe something built on llvm can, I'm not sure | 19:51 | ||
codesections | (INIT now works in the local REPL too. Which also isn't quite as statefull as it could be, e.g., with not persisting syntax changes, so I guess I shouldn't be too surprised) | ||
Yeah, things built on LLVM definitely do ā it's a real issue with Rust benchmarks. But Rakudo has an optimizer, and I'm pretty sure it could do the same sort of tricks. It's just a matter of investing the time in writing it (and making sure the code complexity doesn't get out of hand ā it's easy for that sort of code to turn into special-case spaghetti | 19:53 | ||
) | |||
AlexDaniel | everything is a matter of investing the time | 19:58 | |
codesections | Well, I plan to do so :) | ||
AlexDaniel | question is, will it be wiser to just rebuild it on top of llvm, or spend time trying to optimize it for all architectures and stuffā¦ | 19:59 | |
codesections | I guess that *is* a question. Has anyone proposed rebuilding on LLVM? That seems likeā¦ not a great fit for how dynamic Raku is | 20:00 | |
AlexDaniel | codesections: why? Seems to be no problem for Rust and Julia | 20:01 | |
ok maybe Rust is not the best example, but Julia is | 20:02 | ||
20:03
seanrobert left
|
|||
codesections | AlexDaniel: Yeah, that's a fair point ā I hadn't really thought about the Julia example. They compile to LLVM but also run code via an interpreter. I guess the idea you're floating would be to do something similar for Raku? Have the LLVM output replace the precompiled bytecode, but still have non-modules run via the existing interpreter? | 20:04 | |
20:05
xinming left
|
|||
AlexDaniel | codesections: I don't know what's the easiest approach. Forking Julia is probably going to be faster | 20:06 | |
20:06
xinming joined
|
|||
AlexDaniel | codesections: note that it already has most of the cool features, multiple dispatch, rats, etc. | 20:06 | |
codesections | I could see that working, though it would be a big undertaking that wouldn't have any payoff until it's complete. I'd prefer to be more incremental and follow a similar model to the Dyalog APL interpreter. They've build up a list of commonly used idioms that get optimized by the compiler (they keep the same semantics, just run faster) | ||
AlexDaniel | idioms is exactly the problem. You step outside and suddenly it's a lot slower | 20:07 | |
rypervenche | Question here: What is the logic of: say now - INIT now; ? | ||
AlexDaniel | for example, a lot of Raku functionality is available through both methods and subs at the same time | ||
it's not uncommon to have sub vs method to be twice or more times faster/slower | 20:08 | ||
and depending on which sub we're talking about it's can be other way around | |||
s/it's/it/ | |||
codesections: the immediate downside of forking Julia is that the startup time is actually worse. It's close, but it's worse. | 20:09 | ||
rypervenche: INIT blocks run as soon as possible during execution | |||
rypervenche: is INIT { now } is executed immediately and it's value is placed into the expression, pretty much | 20:10 | ||
s/is/so | |||
rypervenche: it looks cool because you can avoid the brackets in this case :) | |||
codesections | Yeah, that's the sort of idiom work I'm talking about. If two forms have exactly the same meaning but one is faster, there's no reason at all for the optimizer not to be able to replace the slower one with the faster one. It's just a matter of building/maintaining that list | ||
AlexDaniel | codesections: well, it's more complicated | 20:11 | |
rypervenche | AlexDaniel: Ahhh, that makes much more sense now. Thanks. | ||
AlexDaniel | codesections: for example, when'd be that I'd be able to write some Raku code and have the compiler use SIMD instructions? | ||
codesections: looking at the current development pace I'd say in 5 years or later. Probably later | 20:12 | ||
codesections: for example, we don't even have JIT for arm or other archs | |||
codesections | AlexDaniel: Ohhh, I was confusing INIT for $*INIT-INSTANT! Which is why I was surprised it worked. rypervenche, thanks for asking about that ā you saved me from some confusion later | 20:13 | |
AlexDaniel | codesections: and then compare it to Julia which can do it right nowā¦ | ||
it's not very nice from what I can see, but it's a lot better than nothing | |||
codesections | Those are all fair points. I'd still prefer the more incremental approach but (luckily for all concerned!) that's not my call to make :) | 20:15 | |
20:16
MilkmanDan left,
MilkmanDan joined
20:17
aluaces joined
|
|||
demostanis | Due to a lot of testing for HubToDate, it looks like GitHub rate limited me... | 20:17 | |
==> Fetching sharkdp/bat on github... | |||
[!!!] Failed to fetch: (HANDLED) Error 403: 403 Forbidden | |||
y | |||
API rate limit exceeded for 134.19.189.190. (But here's the good news: Authenticated requests get a higher rate limit. Check out the documentation for more details.) | 20:19 | ||
jdv79 | why are you hitting github so hard? i don't get it. | 20:23 | |
20:24
demostanis left
20:27
demostanis joined
20:30
skids joined
20:31
wamba joined
|
|||
AlexDaniel | demostanis: yea I see that a lot | 20:31 | |
demostanis: if you authenticate then you can do more requests, yeah | |||
jdv79: I think it's just 500 unauthenticated requests per hour or so | 20:34 | ||
that's like 1 request per ā7 seconds? Very small number | 20:35 | ||
codesections: well, it's a taboo topic around here x) | 20:36 | ||
jdv79 | what endpoints have this rate limit? | 20:37 | |
i guess i've never hit it that hard but with composer (php) we do hit github a lot for builds and stuff | |||
AlexDaniel | jdv79: the whole api | ||
or so I think | 20:38 | ||
jdv79 | but we're probably using auth since some of the repos are private so that makes a little more sense | ||
AlexDaniel | it feels like they've been changing a lot of stuff, possibly related to their switch to GraphQL | ||
so maybe my experience is no longer relevant | |||
jdv79 | ugh, GraphQL. i think all the stuff i've ever hit is not that thank god | 20:39 | |
AlexDaniel | jdv79: on the upside, you'd be able to get everything in a single request when using their new GraphQL API | 20:40 | |
codesections: you'll often see people talking about a ā100-Year Programming Languageā, but nobody really puts an asterisk with a note saying that it's the amount of years it'll take to create that language x) | 20:42 | ||
codesections: so my question really is how to avoid that | |||
jdv79 | i guess. ignoring the fact that GraphQL is stupid and most of hte interactions i do with gh's endpoints aren't complicated. | 20:44 | |
AlexDaniel | jdv79: I haven't tried using it for my own APIs yet, but so far it makes sense. It's very hard to create a predictable API, so being able to ask for what you really need sounds great | 20:45 | |
jdv79 | i think its reasonable to think it would take extraordinarily longer to procure a "100y lang";) | ||
El_Che | AlexDaniel: it sounds like a huge change in the way of thinking of APIs | ||
AlexDaniel | jdv79: for example, it's a common practice to return the request in your response, for whatever reason. Github does that consistently, including when you send a few megabytes of data in a gist | ||
jdv79 | i would have never guess 20-30 but in hindsight it makes sense i guess | ||
AlexDaniel | jdv79: so that's why whateverables sometimes get in trouble when they try to decode the responseā¦ | 20:46 | |
jdv79 | parroting the req has nothing to do with graphql vs anything else | ||
codesections | AlexDaniel: Well, I haven't been involved *nearly* long enough to have a real say in the strategic issues at play in the pace of development. But, personally, I plan roll up my sleeves and get to work :) I really like how accessible the Raku/Rakudo src is, and already have some ways I think I can help (I'm starting with docs and tooling, but that's just the start) | ||
AlexDaniel | El_Che: yeah, but it's probably better than the typical āWe have REST API! ā¦ Oh it's actually not exactly REST, it's a bit of RPC andā¦ whatever, just be glad we have an API!ā | 20:47 | |
:) | |||
jdv79 | graphql is more of an rpc itself | 20:48 | |
El_Che | AlexDaniel: yeah, API design is hard | ||
at least, for me :) | |||
jdv79 | anwyay, its a fad that's likely here to stay. whatever. | ||
AlexDaniel | it is | ||
20:48
vrurg left
|
|||
moritz | API design is hard, and implementing the features behind the APIs can also be hard :D | 20:48 | |
codesections | jdv79: I *generally* dislike GraphQL ā it seem over-built for most use cases. However, GitHub does seem like the perfect fit for it ā so many different people use their API for different things (including things they didn't imagine when writing it) that having a REST API that's decent for everyone is a tall order | 20:49 | |
AlexDaniel | jdv79: I dunno, I'm actually more optimistic about it | ||
maybe because of my previous experiences with APIsā¦ | |||
jdv79 | having a decent rest-ish service offering isn't impossible but its not terribly common ime | 20:50 | |
AlexDaniel | ārest-ishā :) | 20:51 | |
jdv79 | i guess graphql gives an easier way to paper over crappy backends under the guise of "optmized for mobile" or whatever you want to call it | ||
20:51
Black_Ribbon joined
|
|||
jdv79 | and if fb is doing it shoudln't we all;) | 20:52 | |
AlexDaniel | codesections: that sounds wonderful | ||
codesections: yeah, well, the strategic issuesā¦ it's a bit of an echo chamber. I guess those who don't like what they see just leave, so don't expect any radical changes | 20:55 | ||
codesections: it's a bit more complicated when you dive into the details | |||
SmokeMachine | Talking about API, JSON:API is an option... and I donāt know if thatās interesting for any body else, but Iām playing into a Cro plugging for serving Red models using JSON:API. github.com/FCO/CroX-Red-JsonAPI/bl...t.raku#L32 | ||
jdv79 | codesections: docs as in pod stuff or docs.raku.org? | 20:56 | |
AlexDaniel | codesections: let's try this example. Say you're remaking the compiler to make sure it's really really fast. How would you implement strings? | ||
codesections: see, it's where the lines start to blur between the language design decisions and the compiler stuff | 20:57 | ||
jdv79 | restql seemed like a neat idea but i haven't looked into it as i haven't been in that biz for a whilte | ||
*whilte | |||
*while | |||
codesections | AlexDaniel: How *do* we implement strings right now? I've actually been curious about it, but I didn't see it documented anywhere and the Str src doesn't really lay it out (because Str comes from Bootstrap, and I wasn't *that* curious!) | 20:58 | |
AlexDaniel | codesections: see, when you get your string it's probably just a bunch of bytes. Most languages do nothing or close to nothing with it, so they don't waste any time on touching any character | 21:00 | |
codesections: now, Raku wants to get unicode right, which is great. Except that it does that by going through the string and forming graphemes and stuff | 21:01 | ||
jdv79 | i feel a NFG coming up | ||
AlexDaniel | codesections: Swift does that too, but differently. Counting the amount of characters there is O(n), same as indexing I believe | 21:02 | |
jdv79 | is that a real issue? | ||
codesections | jdv79: Both, actually. My current (almost done!) project is to overhaul/significantly expand the `list-missing-methods` script that docs.raku.org uses to check for undocumented methods. Once that's done, that should unlock a good bit of low-hanging fruit for docs.raku.org. But I also have ideas/plans related to Pod. In particular, I'd really like the docs to be usable from inside emacs, which | ||
will take a bit of doing | |||
21:02
demostanis left
|
|||
AlexDaniel | codesections: so people here say āoh hey look, we have O(1) indexing, isn't it great!ā yeah it would've been great if the performance in general didn't suck that much :) | 21:02 | |
it's hard to beat another language in terms of performance when that other language does **nothing**. No operations | 21:03 | ||
or at least that's my basic understanding of things, I could be wrong | |||
21:04
MasterDuke joined
|
|||
jdv79 | you could just not use a full out string, no? a Buf or a ascii/latin-1 rep? | 21:04 | |
AlexDaniel | jdv79: yeah, but the context here is about making things fast by design | ||
jdv79 | kinda the same sort of deal with Rats | ||
AlexDaniel | sure you can force the user to use some workaround | 21:05 | |
jnthn | All the extra work Raku does is why if you benchmark looping over the lines of a million line UTF-8 file, then Raku comes out a good bit faster than Perl 5 with :encoding(UTF-8). :P | ||
jdv79 | default is "correct" but you can do perf if you want... | ||
codesections | AlexDaniel: Yeah, Rust does something similar to what you're talking about preferring. A Rust String is (internally) an Array of bytes + a length + a capacity, but the only API exposed deals with Unicode chars. So you can't index directly at all, and doing so through the API is O(n) | 21:06 | |
AlexDaniel | jdv79: well, in some sense Swift is correct also | ||
jnthn: have a quick link to that benchmark? | 21:07 | ||
codesections | It's all about perf tradeoffs. Rust's approach works for them ā it makes it really fast to create Strings and keeps mem usage down, but means accessing them may be slower. A good tradeoff for their realtime use-cases (where good perf is important, but *predictable* perf is just as important) | 21:08 | |
But we aren't playing in that space ā we already have a stop-the-world GC, for one thing. So it *might* make sense for us to have Str that are slower to build and take more memory but that are faster to access | 21:09 | ||
jnthn | AlexDaniel: It's in my private benchmark suite, but here: gist.github.com/jnthn/cdeb48138018...e0d66bca50 | 21:10 | |
AlexDaniel | jnthn: nice, thanks | 21:11 | |
codesections: well, most people will agree with you. But what others handwave as perf tradeoffs I call āslow by designā :S | |||
codesections | (But I still don't know how Raku Strs work ā I get that they're more than an Array of bytes in a way that makes working with unicode easier, but I don't know the details. Are they an Array of pointers to Unicode grapheimes? Or what? | 21:12 | |
) | |||
jnthn | codesections: They are an array, but when there's a sequence that NFC doesn't have a precomposed for, the char is represented as a negative integer and there's a lookup table for those. For many operations, though, such as substr, you don't ever need to resolve them. | 21:13 | |
Those are interned also, so string comparisons can just do a memory comparison | |||
Stuff like case transitions or char class lookups have to chase them, as well as encoding to, say, utf-8 for output | 21:15 | ||
codesections | jnthn: Thanks, that makes sense and seems like a reasonable design. But how does that allow O(1) indexing, given that not all unicode chars have the same size? | ||
21:15
sena_kun joined,
mowcat joined
|
|||
jnthn | codesections: 32-bit array (for stuff in latin-1 range without any need of synthetics an 8-bit array is used, though) | 21:15 | |
So the classic time vs. memory trade-off | 21:16 | ||
AlexDaniel | jnthn: that benchmark is faster with perl5 | ||
codesections | Ah, so it's basically like we're using utf32 + a lookup table? | ||
jnthn | AlexDaniel: Not on my $dayjob box (Ubuntu 16.04 native) nor (by a smaller margin) the same thing virtualized on a Windows box. | 21:17 | |
21:17
Altai-man left
|
|||
AlexDaniel | jnthn: I get 0m1.285s for perl5 and 0m1.819s for perl6 | 21:17 | |
jnthn | (I ran it this morning on the former, when checking the consequences of the hash changes) | ||
codesections | Agreed re: time vs memory. And also agreed that it makes sense for Raku to be on the "use more memory, take less time" side of that tradeoff most of the time | ||
AlexDaniel | rakudo 2020.05.1-304-ge231558c4, perl v5.30.3 | 21:18 | |
jnthn | No idea what perl version (not at either of those boxes right now) | ||
Though surely an Ubuntu from a few years ago doesn't have 5.30 :) | 21:19 | ||
21:19
kensanata left
|
|||
AlexDaniel | fwiw it's very consistent and is in that ballpark, <1.3s vs ā1.8s | 21:19 | |
21:21
melezhik joined
|
|||
melezhik | El_Che - "packaged modules can not just be upgraded as they are used as dependencies" second that , it's just one of the consequences of installing thins as native packages | 21:22 | |
tellable6 | 2020-08-08T10:56:19Z #raku <demostanis> melezhik: I was just checking some existing projects written in Raku, but I don't plan on using Sparrowdo. Also security doesn't seem to be that important as it's supposed to be running locally. | ||
2020-08-09T16:19:53Z #raku <demostanis> melezhik: What I meant is that the sparrowfile is executed locally, and isn't being fetched from an untrusted somewhere else? Am I right? | |||
melezhik | in all linux distros native / aka system packages are "global" ones and implies a privileged user to install | 21:23 | |
the idea of distributing A language packages (raku/perl/ruby/python) is not new | |||
there is also native package manager install method VS language package manager competition | 21:24 | ||
both approaches have pros and cons | |||
_usually_ it's linux distribution maintainers responsibility to maintain native packages alternatives for a language pakages | 21:26 | ||
they do it based on their consideration of security, stability, whatever coming from OS/distribution point of view rather then A language perspective | 21:27 | ||
rypervenche | Hmmm, I'm getting 0.865s for perl v5.30.3 and 1.068s for Raku 2020.07 for those benchmarks. | 21:28 | |
melezhik | and that is fine, because when/if a developers or whoever needs to play/install the latest/unstable version of a module they use a language package manager (zef for Raku) giving them all the flexibility | ||
including local installations | |||
cc AlexDaniel El_Che Xliff: | 21:29 | ||
codesections | rypervenche: and, to throw one more set of numbers in the mix, I'm getting 711.4 Ā± 8.2 ms for Perl v5.30.0 vs 870.0 Ā± 12.1 ms for Raku 2020.07 | 21:31 | |
melezhik | .tell Xliff: RaluDist is not for packaging Raku modules but for testing them against various Rakudo versions and Linuxes | ||
tellable6 | melezhik, I'll pass your message to Xliff | ||
melezhik | it uses zef to install modules dependecies | ||
21:32
Henry151 joined
|
|||
melezhik | however RakuDist uses Sparrow scenarios (I call it pacthes ) to manage none Raku dependencies if a module requires ones | 21:32 | |
one can find examples here - github.com/melezhik/RakuDist/tree/...es/patches | 21:33 | ||
the process is explained here - sparrowdo.wordpress.com/2020/06/22...g-sparrow/ | 21:34 | ||
AlexDaniel | jnthn: also beating perl5 is not even a high bar. I present to you the same benchmark in julia: gist.github.com/AlexDaniel/be99d9f...27d53271a7 | 21:35 | |
jnthn: gives the same result in 0m0.703s | |||
jnthn: which is probably 2x as fast compared to perl5 (julia has slow startup time, similar to rakudo) | |||
my understanding is that everything is UTF8, so encoding not specified | 21:36 | ||
codesections | AlexDaniel: Why is Julia a better comparison than perl 5? You could get even bigger perf numbers from C/C++/Rust ā but we're not playing in that space (that's what NativeCall is for :D). Which isn't to say that we don't need to focus on perf/have areas for improvement. I'm sure we do. But I'd be happy with speed without it winning any abosolute benchmarks | 21:38 | |
melezhik | .tell Xliff: sorry the last link described another method of managing none Raku dependencies through META6 "interface" ))) though it could be of interest too | 21:39 | |
tellable6 | melezhik, I'll pass your message to Xliff | ||
AlexDaniel | codesections: well, Julia feels a lot like Raku. It's completely different, but also very similar | 21:40 | |
codesections: also I'm not sure why you don't want to play in that space. It's very trendy | 21:41 | ||
codesections: machine learning and stuff, processing a lot of data where performance actually matters | |||
jnthn: also, that benchmark looks a bitā¦ incomplete to me. Sure, we optimzed ascii strings. Great. Wonderful. | 21:43 | ||
jnthn: now do `$fh.say("JuĪ»" x 60);` | |||
codesections | Because I *already* play in that space when I write Rust :) To give a less flippant answer, that level of perf requires some *real* tradeoffs, many of which I'd hate to see Raku make. Trying to fit *all* use cases is a good way for a language to be mediocre at them all, and I'm happy to see Raku focus on some use cases over others | 21:44 | |
jnthn | AlexDaniel: You're nicely illustrating why I have private benchmark suite. :) | ||
AlexDaniel | 0m0.846s vs 0m1.656s vs 0m7.714s, you can guess which one is which | ||
jnthn: then don't bring it up as an argument for raku tradeoffs | 21:45 | ||
codesections | Which - again - doesn't mean avoiding work to improve performance. I bet there are ways we can make speed gains *without* losing anything. But I'm also sure that those gains won't make us the fastest language in the world. Which is fine with me :) | ||
jnthn | AlexDaniel: Don't worry, I won't bother engaging with you on anything else in the future. I only wish I hadn't each time I do. :/ | 21:47 | |
afk | |||
AlexDaniel | jnthn: it doesn't matter, no argument will pull you out of the bubble :P | ||
21:48
MasterDuke left
|
|||
AlexDaniel | codesections: yeah, well, we can try Swift's way maybe | 21:48 | |
codesections: but again that will completely change the language | 21:49 | ||
wellā¦ ācompletelyā, actually most people might not even notice | 21:50 | ||
codesections | And, again, I'm more a fan of incremental changes. And again, we're both lucky that I don't make those decisions :) | ||
AlexDaniel | codesections: we're not, no. Raku needs fresh minds like you who don't operate on presuppositions and sunk cost reasoning | 22:03 | |
codesections: it's not about being right or wrong, it's about looking back, admitting mistakes and planning on how to move forward | 22:04 | ||
lizmat suggests AlexDaniel opens up a problem solving issue with a list of mistakes that need admitting to | 22:05 | ||
22:06
molaf joined
|
|||
AlexDaniel | lizmat: and then what? Get a few pages of text about things that I already explained, just beacuse it's fun to debate people? And then get shit for refusing to engage in this improvised debate club? | 22:08 | |
lizmat | you seem to enjoy debating? | 22:10 | |
AlexDaniel | I enjoy identifying issues and finding a way to solve them | ||
the fact that I typically get āNO! Not an issue!!ā in response is a different storyā¦ | 22:11 | ||
El_Che | AlexDaniel, lizmat, jnthn: I hope we can keep discussing without the edgy tone? | 22:12 | |
lizmat | so the joy is in "finding a way", not to reach a solution, then? | ||
codesections | El_Che++ | ||
lizmat | El_Che: yeah, you're right. I should not engage AlexDaniel | 22:13 | |
afk& | |||
nicholatian | ANSI C, anyone? :P | ||
El_Che | maybe letÅ cool off and do engage later? | ||
ignoring is the passive-aggressive variant of edgy discussions | 22:14 | ||
AlexDaniel | El_Che: well, I actually think we had a reasonably useful discussion, until jnthn decided to leave a passive aggressive comment that he thought invalidated my point. | ||
which is fine, I don't mind that | |||
El_Che | yes, that's why I metioned him as well. | ||
let go for cooling off and reset, for everyone | 22:15 | ||
melezhik | El_Che++ | 22:17 | |
22:24
vike left
22:30
vike joined
|
|||
jdv79 | aw, i was about to get some popcorn | 22:31 | |
22:34
mowcat left
|
|||
AlexDaniel | codesections: btw stop-the-world GC doesn't necessarily mean slow performance, just stutters. Surely affects games, and unfortunately some realtime-ish processes, so I can relate to that issue. But I don't think it's a big deal by itself unless you're creating objects unnecessarily | 22:44 | |
codesections | I never said stop-the-world GC meant slow. I said it meant "unpredictable", which is why it's OK to have Str creation take longer (which can cause bumpy performance) in return for speedups in using Strs. | 22:46 | |
AlexDaniel | not really, just because something causes stutters doesn't mean you should be making decisions that result in less than awesome performance everywhere else | 22:48 | |
āin return for speedupsā assumes that we win performance in the end, but I don't think that's the case | 22:49 | ||
the switch from O(n) to O(1) is not by itself a speedup, it just defines how you should and shouldn't work with Strs as a user | 22:50 | ||
or rather how you can | |||
22:56
melezhik left
|
|||
gfldex | lolibloggedalittle: gfldex.wordpress.com/2020/08/14/gu...-dynamics/ | 22:57 | |
AlexDaniel | codesections: but anyway, that's just one example, you can pick anything else. For example, you bring up GC, well, you can avoid GC runs if you want to write realtime(ish) code. But for that you need to be able to comfortably work with preallocated data without creating a bunch of new objects. Something that I think is impossible with rakudo right now, but it's hard for me to tell because I never got to the point where stutters mattered | 22:59 | |
(it was always the performance itself in the first place). | |||
codesections: maybe it doesn't make much sense, but you can play with Julia for a slap back to reality of your own :) | 23:01 | ||
gfldex: have you seen github.com/Raku/doc/issues/3497 ? :) | 23:05 | ||
gfldex | how i do | 23:06 | |
*now | |||
AlexDaniel | gfldex: in whateverable I did something like this: github.com/Raku/whateverable/commi...ec8d7c5R28 | ||
gfldex: basically switched to process variables instead. They're still accessible with $*foo I think so they can be used like dynamic vars | 23:07 | ||
23:07
robm joined
|
|||
codesections | AlexDaniel: well, I don't know your use case, but it's starting to seem like a language like Julia might be a better fit for what you want out of a language. As for me, I'm very happy with the tradeoffs Raku has made. I'm still going to write Rust when I need speed, but I'm happy to have the power Raku provides at other times (and, again, will work to improve speed to the extent it can be done | 23:08 | |
without losing power/ergonomics) | |||
gfldex | AlexDaniel: dynvars exist on the stack, so it is not surprising they don't mix well with threads | ||
AlexDaniel | codesections: yeah, Two-Language Programming Problem :) | 23:09 | |
23:09
cpan-raku left
23:10
cpan-raku joined
23:11
cpan-raku left,
cpan-raku joined
|
|||
AlexDaniel | gfldex: yes, you're right. I was still surprised though :) | 23:11 | |
23:32
seanrobert joined
|
|||
gfldex | raku: sub check-dynvar(Mu \dynvar) is raw { dynvar ~~ Mu or die("{dynvar.VAR.name} wrong type!"); dynvar }; my $*d = Mu.new; dd check-dynvar($*d); | 23:34 | |
evalable6 | Mu $*d = Mu.new | ||
gfldex | Today I learded that subs can be is raw. | ||
23:35
wamba left
23:39
seanrobert left
23:47
MilkmanDan left,
MilkmanDan joined
|