[00:45] *** sena_kun left [01:01] *** sena_kun joined [02:46] *** sena_kun left [03:00] *** sena_kun joined [03:19] *** tobs left [03:23] *** tobs joined [04:46] *** sena_kun left [05:00] *** sena_kun joined [06:00] *** nativecallable6 joined [06:00] *** notable6 joined [06:00] *** greppable6 joined [06:01] *** linkable6 joined [06:01] *** releasable6 joined [06:01] *** coverable6 joined [06:01] *** benchable6 joined [06:01] *** unicodable6 joined [06:01] *** sourceable6 joined [06:01] *** quotable6 joined [06:02] *** statisfiable6 joined [06:02] *** evalable6 joined [06:02] *** bisectable6 joined [06:02] *** reportable6 joined [06:02] *** tellable6 joined [06:02] *** squashable6 joined [06:03] *** shareable6 joined [06:03] *** bloatable6 joined [06:03] *** committable6 joined [06:45] *** sena_kun left [06:59] *** sena_kun joined [07:31] *** domidumont joined [07:32] *** domidumont left [07:34] *** domidumont joined [07:49] *** AlexDaniel joined [07:49] *** AlexDaniel left [07:49] *** AlexDaniel joined [08:46] *** sena_kun left [08:47] Files=1302, Tests=109837, 207 wallclock secs (28.85 usr 7.43 sys + 2929.64 cusr 244.88 csys = 3210.80 CPU) [08:47] 4 secs less than the last one! [09:01] *** sena_kun joined [10:16] *** Kaiepi joined [10:46] *** sena_kun left [11:01] *** sena_kun joined [11:45] Versioning of native libraries is a mess. File names of shared libraries contain a version, e.g. libssl.so.1.1. A change in that version by definition means a change in the API. So ostensibly NativeCall users should explicitly state the version of the native library they want to access, e.g. is native('ssl', v1.1) [11:46] Now to stay with OpenSSL, the module actually supports two version: 1.0 and 1.1. That's not something NativeCall supports so we'd need a workaround like trying v1.1. first, call a function from that library (because NativeCall will only then actually load the lib) and fall back to the older version on failure. [11:46] perhaps warn if no version is specified ? [11:47] But hold on! On openSUSE Tumbleweed for exapmle I do not have a libssl.so.1.0 but a libssl.so.1.0.0 instead! [11:48] Best case, OpenSSL really did change their stance on what version level constitutes an API change and the docs tell you to use 1.0.0 or 1.1. Have to check that. [11:49] Worst case, they don't and there's just no way to know what the library is actually called. [11:49] So how does this work in C? [11:50] For compiling sources from C, you need to have the libopenssl-devel package installed. That package contains a symlink libopenssl.so -> libopenssl.so.1.1. So that's what your program will link against. [11:54] For a packager this means that we'd need a BuildRequires: libopenssl-devel and a Requires: libssl.so.1.1()(64bit), but we can only determine the latter when libopenssl-devel is installed [11:57] Packaging such C programs works nicely because rpm contains dependency generators. It will automatically create that Requires dependency by scanning the compiled libraries and binaries. [11:57] Btw. it actually also contains a dependency generator for Perl, but that's disabled because presumably the hacky way it parses Perl code for use-lines didn't work all that well [12:03] *** AlexDaniel left [12:05] At least the thing is pluggable. You essentially drop a little description file in a directory telling rpmbuild that for .rakumod files it should call a certain script for getting the dependencies [12:43] WRT OpenSSL I really don't know how to continue. I do have a working patch for trying 1.1 and 1.0 at compile time. It would fix https://github.com/sergot/openssl/issues/59 and https://github.com/sergot/openssl/issues/54 and https://github.com/sergot/openssl/issues/16 [12:44] But I'm not sure that's actually the right way, as like I said, building C code requires that -devel or -dev package to be installed, too. Things are basically confused by our build and runtime phases being much closer [12:45] *** sena_kun left [12:50] OTOH [12:52] Ironically it is so confusing exactly because we go a step further than C. With C code there's simply no formalized way to say "I need library X in version Y or above". That's left for the configuration system (e.g configure.sh) or ultimately the documentation or even experimentation to handle. [12:54] If we didn't have the possibility to specify versions, we'd just require those symlinks (from the -devel packages) and confuse the user with failures if the version is inappropriate. [12:55] But since we do support specifying versions, we now face the question on when it is actually appropriate to do so. Something I think no one has really answered before. [12:58] *** lucasb joined [13:01] Webhost (*.raku*.org/*.perl6.org) VM migration this evening (~20:00 Europe/Vienna TZ), expect up to 30 minutes downtime. [13:01] *** sena_kun joined [13:07] i'm super tired and my brain doesn't seem to really work yet, so i'll just toss this out there: anybody want to look into making class/role/whatever bodies not be called during deserialization if they are empty? could be something the static optimizer can do, could be something we can already figure out during stage parse [13:17] ¦ rakudo: 4df7472db5 | (Elizabeth Mattijsen)++ | src/core.c/Str.pm6 [13:17] ¦ rakudo: Extract Str.comb(Regex) logic into private method [13:17] ¦ rakudo: [13:17] ¦ rakudo: And in the process, lose a Str.comb candidate. Prepatory work to [13:17] ¦ rakudo: using this private method at other places. [13:17] ¦ rakudo: review: https://github.com/rakudo/rakudo/commit/4df7472db5 [13:17] ¦ rakudo: c87f5df969 | (Elizabeth Mattijsen)++ | src/core.c/IterationBuffer.pm6 [13:17] ¦ rakudo: Add IterationBuffer.Seq method [13:17] ¦ rakudo: [13:17] ¦ rakudo: To easily turn an IterationBuffer into a Seq [13:17] ¦ rakudo: review: https://github.com/rakudo/rakudo/commit/c87f5df969 [13:17] ¦ rakudo: 931f5ae0c9 | (Elizabeth Mattijsen)++ | src/core.c/Str.pm6 [13:17] ¦ rakudo: Make Str.split(Regex) about 15% faster [13:17] ¦ rakudo: [13:17] ¦ rakudo: - by bypassing the Str.match antics [13:17] ¦ rakudo: - accessing match attributes directly [13:17] ¦ rakudo: - splitting named arg handling into separate private methods [13:17] ¦ rakudo: review: https://github.com/rakudo/rakudo/commit/931f5ae0c9 [14:28] notable6: weekly [14:28] lizmat, 3 notes: https://gist.github.com/0d41b7c53790975b096e2eb25e5f0c5d [14:30] lizmat: did you have a chance to look at https://github.com/rakudo/rakudo/pull/3453? I think it squares up the whole matter. [14:31] vrurg: it fell through the FOSDEM cracks... will get back to it after the RWN is out [14:31] np :) [14:42] *** AlexDaniel joined [14:42] *** AlexDaniel left [14:42] *** AlexDaniel joined [14:44] *** sena_kun left [14:56] *** AlexDaniel left [15:01] *** sena_kun joined [15:44] bisectable: my @a = 1,2; @a ,= 3; dd @a [15:44] lizmat, Bisecting by output (old=2015.12 new=931f5ae) because on both starting points the exit code is 0 [15:44] lizmat, bisect log: https://gist.github.com/8ba39ae7a109338d743e8ddd8d235391 [15:44] lizmat, (2015-12-25) https://github.com/rakudo/rakudo/commit/07fecb52eb1fd07397659f19a5cf36dc61f84053 [15:44] lizmat, The result looks a bit unrealistic. Most probably the output is different on every commit (e.g. 「bisect: say rand」) [15:45] Array @a = ((my @Array_94083170548128) = [@Array_94083170548128, 3]) [15:45] use `say` instead of dd? [15:45] m: my @a = 1,2; @a ,= 3; say @a[0].^name [15:45] rakudo-moar 931f5ae0c: OUTPUT: «Array␤» [15:45] bisectable: my @a = 1,2; @a ,= 3; say @a[0].^name [15:45] lizmat, On both starting points (old=2015.12 new=931f5ae) the exit code is 0 and the output is identical as well [15:45] lizmat, Output on both points: «Array␤» [15:46] m: my @a = 1,2; @a = @a,3; say @a[0].^name [15:46] rakudo-moar 931f5ae0c: OUTPUT: «Array␤» [16:04] *** hungrydonkey joined [16:15] *** hungrydonkey left [16:15] *** hungrydonkey joined [16:15] *** hungrydonkey left [16:16] *** hungrydonkey joined [16:47] *** sena_kun left [17:00] *** sena_kun joined [17:09] notable6: weekly reset [17:09] lizmat, Moved existing notes to “weekly_2020-02-03T17:09:25Z” [18:02] *** hungrydonkey left [18:04] and another Rakudo Weekly News hits the Net: https://rakudoweekly.blog/2020/02/03/2020-05-releasalot/ [18:10] *** domidumont left [18:31] *** patrickb joined [18:37] o/ [18:46] *** sena_kun left [18:58] lizmat++ [19:01] *** sena_kun joined [19:29] ¦ rakudo: ba2c58a329 | (Elizabeth Mattijsen)++ | src/core.c/Str.pm6 [19:29] ¦ rakudo: Handle the Str.split(Regex,1) case faster [19:29] ¦ rakudo: [19:29] ¦ rakudo: Don't bother trying to match anything, as the result is going to be [19:29] ¦ rakudo: the whole string anyway. [19:29] ¦ rakudo: review: https://github.com/rakudo/rakudo/commit/ba2c58a329 [19:38] GSoC project idea: An Apache mod_moar implementation. [19:40] some NGINX plug in would be more useful nowadays ? [19:41] * sena_kun agrees [19:41] I got the idea from a friend of mine who works at a very large company. Each software people use has to be approved first. Apache is on the list of approved software, raku isn't. [19:42] So if there would be an mod_moar he'd be able to use raku. [19:42] *** domidumont joined [19:42] nginx might work just as well [19:42] patrickb: if there would be a person willing to mentor, a proposal sounds nice. [19:43] *** domidumont left [19:43] It's very well possible I remember wrong, but didn't mod_parrot also happen as part of a GSoC? [19:44] brrt? [19:45] https://github.com/bdw/mod_parrot Jup! :-) [19:48] timotimo: where does that deserialization happen? [19:51] Do enough builds and repl.t will fail: https://build.opensuse.org/package/live_build_log/home:niner9:rakudo-git/rakudo/openSUSE_Leap_15.2/x86_64 [19:57] I thought we are way past trying to put arbitrary programs into web servers. [20:09] *** b2gills left [20:09] *** b2gills joined [20:11] ¦ rakudo: 052133155c | (Elizabeth Mattijsen)++ | src/core.c/Supply-coercers.pm6 [20:11] ¦ rakudo: Supply.repeated should have .unique semantics [20:11] ¦ rakudo: [20:11] ¦ rakudo: - so once seen, it will be emitted [20:11] ¦ rakudo: - not if just the previous had the same value (squish semantics) [20:12] ¦ rakudo: - spotted by stoned75++ [20:12] ¦ rakudo: review: https://github.com/rakudo/rakudo/commit/052133155c [20:12] ¦ roast: 3bc2ca7512 | (Elizabeth Mattijsen)++ | S17-supply/repeated.t [20:12] ¦ roast: Adapt tests to changes from https://github.com/rakudo/rakudo/commit/052133155c [20:12] ¦ roast: review: https://github.com/perl6/roast/commit/3bc2ca7512 [20:21] nine: just got this after running t/02-rakudo/repl.t in a loop with stresstests running in the background for a while: https://gist.github.com/MasterDuke17/ce0047d59af6519a06b25cab43621a9e [20:27] MasterDuke: that's...very strang [20:27] e [20:30] lizmat++ # weekly [20:30] 2020-02-03T16:05:53Z #moarvm jnthn that I'm aware, and have a theory on how to fix it [20:44] ¦ rakudo: 32bd4ed839 | (Elizabeth Mattijsen)++ | src/core.c/Supply-coercers.pm6 [20:44] ¦ rakudo: Make Supply.unique a bit faster [20:44] ¦ rakudo: [20:44] ¦ rakudo: - using the primitives just developed for Supply.repeated [20:44] ¦ rakudo: review: https://github.com/rakudo/rakudo/commit/32bd4ed839 [20:45] *** sena_kun left [20:49] * lizmat is feeling a bit under the weather and calls it a day& [20:49] <[Coke]> Get some rest! [20:49] .oO( fresh FOSDEM viruses ) [20:51] <[Coke]> I apparently have a viral infection IN MY EYE. whee. [21:00] *** sena_kun joined [21:27] MasterDuke:we generate a frame called or so, find it in moar --dump [21:30] i see it [21:44] *** patrickb left [21:45] timotimo: but i'm not seeing where any of the method referenced in that frame execute anything [21:54] sorry, what exactly are you missing? [21:57] you were saying something about making deserialization not execute compunits with empty bodies? [21:58] yeah, it's about 15kb into the frame where it starts doing The Thing [21:59] it looks like "prepargs Callsite_4", "invoke_v loc_4495_obj", line number annotation, prepargs, invoke_v, annotation, prepargs, invoke_v, annotation, etc etc [22:00] Scalar.pm6:1, Scalar.pm6:36, Scalar.pm6:37, Scalar.pm6:38, Scalar.pm6:39, Scalar.pm6:39, ... [22:00] those lines are all "my class XYRef { }" [22:00] IntLexRef, NumLexRef, etc [22:01] oh, maybe your --dump output is getting cut off; you may have to redirect it to a file i think? [22:02] hm. there aren't any invoke_v in my output [22:02] ah, right [22:02] it's actually in , not in [22:03] fwiw, i was running `moar --dump perl6.moarvm -e ''` in my rakudo folder [22:03] oh, and that doesn't have any [22:04] oh [22:04] i was talking about the core setting [22:04] what you have there is actually code compiled with nqp i think? [22:05] heh, that would make sense [22:06] oh, also the number at the start isn't bytes, it's just instruction number [22:07] there's also one frame that's got above 32k instructions that are just getcode and push_o over and over [22:08] this could shrink slightly in bytecode size if a pushcode op were introduced [22:08] it'd go from instruction + register + frame + instruction + register + register to just instruction + register + frame [22:09] it's 6 bytes each for getcode and push_o, and it'd be 6 for pushcode, so it'd go down to roughly half [22:11] now, pushing one code will cost 6 then, instead of 12, but if there's a push16code op that takes 16 frames, it'd cost 2 + 2 + 16 * 2, which divided back by 16 is 16 1/16th or so? [22:11] what could be even better is just serializing an array that has the frame numbers in the right order and do all the work with just a single op; that'd also allow using the sligthly better int array serialization for this task [22:13] i must admit i'm slightly distracted by trying to turn my new RPi 3b+ into an access point [22:13] hmm, we've got the numbers 0 through roughly 16.5k [22:13] no problem; also perhaps i should move the rambling to #moarvm [22:46] m: my $a; for ^1_000_000 -> $i { $a = "abdefghijklmnopq " ~ $i ~ " rstuvwxyz" }; say now - INIT now; say $a [22:46] rakudo-moar 32bd4ed83: OUTPUT: «0.42804801␤abdefghijklmnopq 999999 rstuvwxyz␤» [22:46] m: my $a; for ^1_000_000 -> $i { $a = "abdefghijklmnopq {$i} rstuvwxyz" }; say now - INIT now; say $a [22:46] rakudo-moar 32bd4ed83: OUTPUT: «0.8609107␤abdefghijklmnopq 999999 rstuvwxyz␤» [22:47] benchable6: compare HEAD my $a; for ^1_000_000 -> $i { $a = "abdefghijklmnopq " ~ $i ~ " rstuvwxyz" } ||| my $a; for ^1_000_000 -> $i { $a = "abdefghijklmnopq {$i} rstuvwxyz" } [22:47] MasterDuke, starting to benchmark the 1 given commit [22:47] MasterDuke, https://gist.github.com/958aa2587c11f8d4adfe7d0a10d9212b [22:47] *** sena_kun left [22:48] AlexDaniel`: ^^^ Bench isn't installed on your server anymore? or maybe it just had to be in the directory [22:51] timotimo: ^^^ see above numbers. interpolating with {} is twice as slow as concatenating strings [22:57] m: my $a; for ^1_000_000 -> $i { $a = "abdefghijklmnopq {~$i} rstuvwxyz" }; say now - INIT now; say $a [22:57] rakudo-moar 32bd4ed83: OUTPUT: «0.9406794␤abdefghijklmnopq 999999 rstuvwxyz␤» [23:02] *** sena_kun joined [23:46] it's nice that it's much faster, but i was thinking more about the overhead in frame number and size [23:46] *** hungrydonkey joined [23:49] m: class B { method foo (B:U: --> Str) { return "Bee" } }; say B.foo; my B $b; try { say $b.foo}; $b .= new; say $b.foo; [23:49] rakudo-moar 32bd4ed83: OUTPUT: «Bee␤Invocant of method 'foo' must be a type object of type 'B', not an object instance of type 'B'. Did you forget a 'multi'?␤ in method foo at line 1␤ in block at line 1␤␤Bee␤» [23:49] why? I'd think the first (B:U) and second (B:U) should work and the third (B:D) should barf [23:50] m: class B { method foo (B:U: --> Str) { return "Bee" } }; say B.foo; my B $b; try { say $b.foo }; [23:50] rakudo-moar 32bd4ed83: OUTPUT: «Bee␤Bee␤» [23:51] you're getting tricked by stdout and stderr not being in sync [23:51] oops [23:51] m: class B { method foo (B:U: --> Str) { return "Bee" } }; say B.foo; my B $b; try { say $b.foo }; say "before re-assigned an instance"; $b .= new; say $b.foo; [23:51] rakudo-moar 32bd4ed83: OUTPUT: «Bee␤Invocant of method 'foo' must be a type object of type 'B', not an object instance of type 'B'. Did you forget a 'multi'?␤ in method foo at line 1␤ in block at line 1␤␤Bee␤before re-assigned an instance␤» [23:51] hilarious, isn't it? [23:52] well, I was trying to duplicate an issue in a file that's identical to that but for normal newline and indentation and it just happile prints "Bee" three times [23:53] is your perl6 --version (or raku --version) new-ish? does committable do the same thing as your local p6 with this code when supplied with the exact version? [23:55] it's 2020.01-41-g59cf387d4 [23:56] Maybe I've got a typo my eyes keep sliding over? https://gist.github.com/treyharris/67816b7d12531bba6ec02e665ce7dba9 [23:56] m: https://gist.github.com/treyharris/67816b7d12531bba6ec02e665ce7dba9 [23:56] rakudo-moar 32bd4ed83: OUTPUT: «Bee␤Bee␤Bee␤» [23:56] yeah [23:56] you're not assigning the result of $b.new [23:57] d'oh! [23:57] that'll do it :) :) [23:58] And one last question: is there a DRY way to declare type methods? `method foo (::?CLASS:U:)`, or is there another way?