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, notable6 joined, greppable6 joined 06:01 linkable6 joined, releasable6 joined, coverable6 joined, benchable6 joined, unicodable6 joined, sourceable6 joined, quotable6 joined 06:02 statisfiable6 joined, evalable6 joined, bisectable6 joined, reportable6 joined, tellable6 joined, squashable6 joined 06:03 shareable6 joined, bloatable6 joined, 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, AlexDaniel left, AlexDaniel joined 08:46 sena_kun left
lizmat 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
nine 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:45
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
lizmat perhaps warn if no version is specified ?
nine 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:47
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:48
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?
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:50
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:54
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
nine 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:05
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 github.com/sergot/openssl/issues/59 and github.com/sergot/openssl/issues/54 and github.com/sergot/openssl/issues/16 12:43
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:44
12:45 sena_kun left
nine OTOH 12:50
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:52
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:54
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:55
12:58 lucasb joined
rba Webhost (*.raku*.org/*.perl6.org) VM migration this evening (~20:00 Europe/Vienna TZ), expect up to 30 minutes downtime. 13:01
13:01 sena_kun joined
timotimo 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:07
Geth rakudo: 4df7472db5 | (Elizabeth Mattijsen)++ | src/core.c/Str.pm6
Extract Str.comb(Regex) logic into private method

And in the process, lose a Str.comb candidate. Prepatory work to using this private method at other places.
13:17
rakudo: c87f5df969 | (Elizabeth Mattijsen)++ | src/core.c/IterationBuffer.pm6
Add IterationBuffer.Seq method

To easily turn an IterationBuffer into a Seq
rakudo: 931f5ae0c9 | (Elizabeth Mattijsen)++ | src/core.c/Str.pm6
Make Str.split(Regex) about 15% faster

  - by bypassing the Str.match antics
  - accessing match attributes directly
  - splitting named arg handling into separate private methods
lizmat notable6: weekly 14:28
notable6 lizmat, 3 notes: gist.github.com/0d41b7c53790975b09...b25e5f0c5d
vrurg lizmat: did you have a chance to look at github.com/rakudo/rakudo/pull/3453? I think it squares up the whole matter. 14:30
lizmat vrurg: it fell through the FOSDEM cracks... will get back to it after the RWN is out 14:31
vrurg np :)
14:42 AlexDaniel joined, AlexDaniel left, AlexDaniel joined 14:44 sena_kun left 14:56 AlexDaniel left 15:01 sena_kun joined
lizmat bisectable: my @a = 1,2; @a ,= 3; dd @a 15:44
bisectable6 lizmat, Bisecting by output (old=2015.12 new=931f5ae) because on both starting points the exit code is 0
lizmat, bisect log: gist.github.com/8ba39ae7a109338d74...dd8d235391
lizmat, (2015-12-25) github.com/rakudo/rakudo/commit/07...dc61f84053
lizmat, The result looks a bit unrealistic. Most probably the output is different on every commit (e.g. 「bisect: say rand」)
sena_kun Array @a = ((my @Array_94083170548128) = [@Array_94083170548128, 3]) 15:45
use `say` instead of dd?
lizmat m: my @a = 1,2; @a ,= 3; say @a[0].^name
camelia Array
lizmat bisectable: my @a = 1,2; @a ,= 3; say @a[0].^name
bisectable6 lizmat, On both starting points (old=2015.12 new=931f5ae) the exit code is 0 and the output is identical as well
lizmat, Output on both points: «Array␤»
lizmat m: my @a = 1,2; @a = @a,3; say @a[0].^name 15:46
camelia Array
16:04 hungrydonkey joined 16:15 hungrydonkey left, hungrydonkey joined, hungrydonkey left 16:16 hungrydonkey joined 16:47 sena_kun left 17:00 sena_kun joined
lizmat notable6: weekly reset 17:09
notable6 lizmat, Moved existing notes to “weekly_2020-02-03T17:09:25Z”
18:02 hungrydonkey left
lizmat and another Rakudo Weekly News hits the Net: rakudoweekly.blog/2020/02/03/2020-...eleasalot/ 18:04
18:10 domidumont left 18:31 patrickb joined
patrickb o/ 18:37
18:46 sena_kun left
vrurg lizmat++ 18:58
19:01 sena_kun joined
Geth rakudo: ba2c58a329 | (Elizabeth Mattijsen)++ | src/core.c/Str.pm6
Handle the Str.split(Regex,1) case faster

Don't bother trying to match anything, as the result is going to be the whole string anyway.
19:29
patrickb GSoC project idea: An Apache mod_moar implementation. 19:38
lizmat some NGINX plug in would be more useful nowadays ? 19:40
sena_kun agrees 19:41
patrickb 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.
So if there would be an mod_moar he'd be able to use raku. 19:42
19:42 domidumont joined
patrickb nginx might work just as well 19:42
sena_kun patrickb: if there would be a person willing to mentor, a proposal sounds nice.
19:43 domidumont left
patrickb It's very well possible I remember wrong, but didn't mod_parrot also happen as part of a GSoC? 19:43
brrt? 19:44
github.com/bdw/mod_parrot Jup! :-) 19:45
MasterDuke timotimo: where does that deserialization happen? 19:48
nine Do enough builds and repl.t will fail: build.opensuse.org/package/live_bu...5.2/x86_64 19:51
I thought we are way past trying to put arbitrary programs into web servers. 19:57
20:09 b2gills left, b2gills joined
Geth rakudo: 052133155c | (Elizabeth Mattijsen)++ | src/core.c/Supply-coercers.pm6
Supply.repeated should have .unique semantics

  - so once seen, it will be emitted
  - not if just the previous had the same value (squish semantics)
  - spotted by stoned75++
20:11
roast: 3bc2ca7512 | (Elizabeth Mattijsen)++ | S17-supply/repeated.t
Adapt tests to changes from github.com/rakudo/rakudo/commit/052133155c
MasterDuke nine: just got this after running t/02-rakudo/repl.t in a loop with stresstests running in the background for a while: gist.github.com/MasterDuke17/ce004...ab43621a9e 20:21
nine MasterDuke: that's...very strang 20:27
e
jnthn lizmat++ # weekly 20:30
tellable6 2020-02-03T16:05:53Z #moarvm <brrt> jnthn that I'm aware, and have a theory on how to fix it
Geth rakudo: 32bd4ed839 | (Elizabeth Mattijsen)++ | src/core.c/Supply-coercers.pm6
Make Supply.unique a bit faster

  - using the primitives just developed for Supply.repeated
20:44
20:45 sena_kun left
lizmat is feeling a bit under the weather and calls it a day& 20:49
[Coke] Get some rest!
lizmat
.oO( fresh FOSDEM viruses )
[Coke] I apparently have a viral infection IN MY EYE. whee. 20:51
21:00 sena_kun joined
timotimo MasterDuke:we generate a frame called <deserialization+dependencies> or so, find it in moar --dump 21:27
MasterDuke i see it 21:30
21:44 patrickb left
MasterDuke timotimo: but i'm not seeing where any of the method referenced in that frame execute anything 21:45
timotimo sorry, what exactly are you missing? 21:54
MasterDuke you were saying something about making deserialization not execute compunits with empty bodies? 21:57
timotimo yeah, it's about 15kb into the frame where it starts doing The Thing 21:58
it looks like "prepargs Callsite_4", "invoke_v loc_4495_obj", line number annotation, prepargs, invoke_v, annotation, prepargs, invoke_v, annotation, etc etc 21:59
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 { }"
IntLexRef, NumLexRef, etc
oh, maybe your --dump output is getting cut off; you may have to redirect it to a file i think? 22:01
MasterDuke hm. there aren't any invoke_v in my output 22:02
timotimo ah, right
it's actually in <unit>, not in <dependencies+deserialize>
MasterDuke fwiw, i was running `moar --dump perl6.moarvm -e ''` in my rakudo folder 22:03
oh, and that doesn't have any <unit>
timotimo oh 22:04
i was talking about the core setting
what you have there is actually code compiled with nqp i think?
MasterDuke heh, that would make sense 22:05
timotimo oh, also the number at the start isn't bytes, it's just instruction number 22:06
there's also one frame that's got above 32k instructions that are just getcode and push_o over and over 22:07
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
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:09
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
MasterDuke i must admit i'm slightly distracted by trying to turn my new RPi 3b+ into an access point 22:13
timotimo hmm, we've got the numbers 0 through roughly 16.5k
no problem; also perhaps i should move the rambling to #moarvm
MasterDuke m: my $a; for ^1_000_000 -> $i { $a = "abdefghijklmnopq " ~ $i ~ " rstuvwxyz" }; say now - INIT now; say $a 22:46
camelia 0.42804801
abdefghijklmnopq 999999 rstuvwxyz
MasterDuke m: my $a; for ^1_000_000 -> $i { $a = "abdefghijklmnopq {$i} rstuvwxyz" }; say now - INIT now; say $a
camelia 0.8609107
abdefghijklmnopq 999999 rstuvwxyz
MasterDuke 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
benchable6 MasterDuke, starting to benchmark the 1 given commit
MasterDuke, gist.github.com/958aa2587c11f8d4ad...0a10d9212b
22:47 sena_kun left
MasterDuke AlexDaniel`: ^^^ Bench isn't installed on your server anymore? or maybe it just had to be in the directory 22:48
timotimo: ^^^ see above numbers. interpolating with {} is twice as slow as concatenating strings 22:51
m: my $a; for ^1_000_000 -> $i { $a = "abdefghijklmnopq {~$i} rstuvwxyz" }; say now - INIT now; say $a 22:57
camelia 0.9406794
abdefghijklmnopq 999999 rstuvwxyz
23:02 sena_kun joined
timotimo it's nice that it's much faster, but i was thinking more about the overhead in frame number and size 23:46
23:46 hungrydonkey joined
TreyHarris 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
camelia 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 <tmp> line 1
in block <unit> at <tmp> line 1

Bee
TreyHarris why? I'd think the first (B:U) and second (B:U) should work and the third (B:D) should barf
timotimo m: class B { method foo (B:U: --> Str) { return "Bee" } }; say B.foo; my B $b; try { say $b.foo }; 23:50
camelia Bee
Bee
timotimo you're getting tricked by stdout and stderr not being in sync 23:51
TreyHarris oops
timotimo 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;
camelia 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 <tmp> line 1
in block <unit> at <tmp> line 1

Bee
before re-assigned an instance
timotimo hilarious, isn't it?
TreyHarris 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:52
timotimo 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:53
TreyHarris it's 2020.01-41-g59cf387d4 23:55
Maybe I've got a typo my eyes keep sliding over? gist.github.com/treyharris/67816b7...665ce7dba9 23:56
timotimo m: gist.github.com/treyharris/67816b7...665ce7dba9
camelia Bee
Bee
Bee
timotimo yeah
you're not assigning the result of $b.new
TreyHarris d'oh! 23:57
timotimo that'll do it :) :)
TreyHarris And one last question: is there a DRY way to declare type methods? `method foo (::?CLASS:U:)`, or is there another way? 23:58