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 |