timotimo interesting. the total heap size of nqp-m -e 'nqp::force_gc()' is only ~3 megabytes 00:02
disabling spesh (and jit along with it) only reduces the memory usage by half a megabyte, so that's not too bad 00:19
psch i'm unsure what hint to follow next 00:21
like, the linked ticket from earlier has jnthn stating that signature compilation elides containers
and today jnthn said that the Binder might be missing a decont 00:22
both of those seem like possible valid fixes for the FIRST issue
the former is probably lots harder :P
...and probably neither of those fixes the actual r-j build blocker /o\ 00:23
youtu.be/2SY6PlbJz0Q?t=321 00:43
timotimo there's *everything* on the internets 00:49
perfect accent, too 00:50
psch heh yeah 00:51
the slingshot channel is similarly amazing
timotimo oooh! 00:52
psch www.youtube.com/user/JoergSprave
i think he's a schwabe or something?
the slingshot guy that is
timotimo i was made aware of that channel by the application to microsoft for the condom thing
psch oh right i think i remember that 00:54
timotimo there's still a kilobyte or two in total that i can save with an optimization that i've got in my back-hand
psch didn't he build some kind of condom applicator
timotimo yes, that's the one 00:55
psch with like half a kilo joule of force behind it or something insane like that
timotimo only for the MANLIEST OF MEN, obviously
psch haha
timotimo which ... yeah, right
moar might never reach the point where i could build a game simulation where each of maybe three thousand agents all have their own kind of script running to control what they do 00:57
psch i can't judge that, at all 00:58
timotimo well, as long as the compiler sticks around in memory when the user program already runs ... :\
that's not a moar thing in and of itself, but i'm not sure how good the other languages we could put on there would necessarily be vastly better 00:59
psch isn't moar at least somewhat suited to output a platform-specific executable? 01:00
timotimo hm, how do you mean?
psch i mean, i don't know if that actually helps enough
timotimo oh, right, if you make your program fully separate from the compiler, that ought to totally work!
psch ...i'm not sure that's not sarcasm :P 01:01
timotimo well, i've forgotten about that possibility because of how we currently do "compile script to moarvm and invoke it"
because that's -MMyCompiledScript -e ''
which invokes the compiler to compile the empty program
and then the compiler sticks around, probably :)
psch ah, i see
i was thinking a step further, but not sure that really could work 01:02
timotimo please elaborate?
psch as in, have moar write a platform-specific executable
timotimo i'm not sure what you mean by that
psch well, the nqp compiler builds moar bytecode
timotimo yah
psch and with that moar bytecode we could potentially statically see which parts of interp.c we actually need 01:03
timotimo oh, huh
psch that's buckets of static analysis and whatelsehaveyou of course
but in principle that's what we're doing when we're writing java .class files
timotimo interp.o is only 887 kilobytes big, though 01:04
psch hmm 01:05
well, the thing i'm thinking of is
timotimo turn the JIT into an AOT? :)
psch to build a self-contained .jar that's compiled from Perl 6 code we have to bundle... probably, yeah
timotimo of course, a very big part of interp.c is just calling into other things
psch AOT is "ahead of time [compiler]", isn't it 01:06
timotimo yes
psch yeah, then that's what i was thinking
probably mostly because it's late :P
timotimo so if we're able to throw out parts of the interp.c and we no longer consider all those functions to be API, we'd in theory be able to reduce the size of the moar executable
psch it's not really something i'd like to suggest
timotimo however, if i have the theoretical situation of using a full moar process for thousands of agents, the moar executable would ideally be shared in memory by the OS anyway 01:07
psch oh
well, it all depends on the design then, doesn't
timotimo we should have discussed thin in #perl6, since at least me isn't terribly serious about most of this, but #p6dev is the "everybody should backlog this only"
psch ...right :/
timotimo oopsie 01:08
04:35 Woodi joined
nine_ Well it was interesting anyway :) 06:24
06:30 stmuk_ joined 07:29 brrt joined, RabidGravy joined 09:24 cognominal joined 10:35 ZoffixWin joined 10:51 sno joined
lizmat nine: looking at github.com/rakudo/rakudo/blob/nom/...on.pm#L170 10:52
am I missing some hidden meaning of my $a //= "foo"
nine_ lizmat: no, none that I would know :) 10:53
lizmat ok :-) so an "=" should be enough, right ?
nine_ absolutely
lizmat ok :-) 10:54
dalek kudo/nom: f03564e | lizmat++ | src/core/CompUnit/Repository/Installation.pm:
Fix thinko
lizmat was looking at why install-core-dist failed after a patch of mine 10:56
nine_ Any way I could help?
lizmat gist.github.com/lizmat/b312048a759...215df66e1d 10:58
was hoping to improve performance of flat
I guess this is tickling some optimizer issue or so 10:59
afaics, the diff is functionally identical to the original 11:00
ah well, I'll keep it around for a rainy day 11:01
nine_: did you ever consider storing perl_wrapper and windows_wrapper as text files somewhere, and then slurp them when installing? 11:08
nine_: instead of having them in memory every time we start rakudo ?
jnthn lizmat: fwiw, Moar deserializes the string heap lazily these days, and mmap's bytecode files so they're shared between all running instances 11:09
lizmat: So I doubt that'd be a real saving :)
lizmat ok
just checking :-) 11:10
jnthn About 2 months ago we didn't do that. ;)
So fairly recent improvement :)
lizmat ah, ok, so my idea wasn't too strange :-)
anyways, I've been prototyping really threading Junctions 11:11
specifically Junction.Bool
and have found some interesting things, (at least on a Mac)
it appears that it takes several seconds before OS X switches on all cores, when you have 8 threads started running full blast 11:12
jnthn Hm, CPU power management?
lizmat probably
so, in the case of .Bool, you need to have a junction of 10M entries before it starts taking shorter in wallclock 11:13
actually, more like 1G entries 11:15
jnthn o.O 11:16
lizmat fwiw, one of my test scripts that shows the CPU rampup behaviour clearly: gist.github.com/lizmat/60961c6cbcb...d3bd81eec3 11:19
jnthn lunch, bbiab 11:21
lizmat fwiw, at 1M it's about even 11:49
gist.github.com/lizmat/5b14702303f...23fb4441be # for those interested 11:51
timotimo o/ 11:57
[Coke] Need a volunteer to do the May compiler release. 13:03
13:16 skids joined 13:42 pmurias joined
dalek p: 3df4f12 | (Pawel Murias)++ | src/vm/js/Operations.nqp:
[js] Stub is_inlinable.
p: 5c053c3 | (Pawel Murias)++ | src/vm/js/Operations.nqp:
[js] Mark inlinability of ops.
p: c9cf904 | (Pawel Murias)++ | src/vm/js/nqp-runtime/runtime.js:
[js] Fix signature.
p: 4490a41 | (Pawel Murias)++ | src/vm/js/Operations.nqp:
[js] Expose some things to code defining custom ops.
p: 0d63a88 | (Pawel Murias)++ | t/nqp/44-try-catch.t:
Test rethrowing of exceptions from outside of CATCH.
psch jnthn: inside Any.map, iscont(&block) == 1 on r-j, but 0 on r-m 14:13
jnthn: that's for e.g. 'for ^2 { FIRST { say "hi" }; say "ok" }' 14:14
jnthn: i've looked through the Binder, but the only spot that does cont stuff is identical in Binder.java and BOOTSTRAP/Binder, around the "if it's a scalar ..." comment 14:16
and we are dilligent enough to pass only the decontValue to actual callsite, afaics 14:17
jnthn psch: Ahhh... Seems the slow-path binder (in both backends) miss this trick: github.com/rakudo/rakudo/blob/nom/....nqp#L8188 14:23
dalek kudo/nom: 376f50e | hoelzro++ | docs/release_guide.pod:
Add Rob Hoelz for May rakudo release
jnthn Which lowering does. But no reason not to do it in the slow-path binder also... 14:24
psch jnthn: ah. i'll read that bit over and see where it has to go
well, unless you don't have anything else at the moment... ;) 14:25
jnthn Nothing to add really. The comment I think explains what's going on. 14:27
pmurias Will github.com/perl6/nqp/pull/283 get merged? I could implement/test those ops while waiting to recompile rakudo.js ;) 14:29
nine_ [Coke]: how much work is such a release? Would I need to do anything rakudo-j related? 14:30
psch still curious how missing the same trick in two backends has different behavior over the backends...
nine_: github.com/rakudo/rakudo/blob/nom/..._guide.pod looks like the only r-j specific thing is checking if it builds and can be included 14:31
pmurias psch: why is the coerce op named differently on the jvm backend? 14:32
nine_ psch: which from what I've read here is probably not the case currently?
psch pmurias: because they already were different before
pmurias: moar exposes e.g. coerce_si, while jvm exposes coerce_s2i, which incidentally lead to timotimo++ confusing the direction... :) 14:33
nine_: yeah, currently it breaks during install-core-dist.pl
pmurias: well, "exposes" isn't quite right i guess. the vm-level op is named coerce_s2i on r-j, but i suspect we expose it as coerce_si if that's what moar had before already 14:34
i didn't check, though
pmurias: fwiw, QASTOperationsMAST exposes e.g. coerce_Is as tostr_I 14:36
and jvm/QAST/Compiler.nqp doesn't seem to expose them at all...
pmurias psch: isn't exposing allowing the MoarVM op to be used as nqp::coerce_ni? 14:39
psch nqp/src/vm/moar/QAST/QASTOperationsMAST.nqp:2169:QAST::MASTOperations.add_core_moarop_mapping('tostr_I', 'coerce_Is'); 14:40
pmurias: ^^^ that's what i mean. the nqp op tostr_I maps to coerce_Is
on nqp-j, tostr_I would have to map to coerce_i2s, i suppose
well, plus unboxing probably
dalek kudo/nom: e3dd039 | moritz++ | docs/release_guide.pod:
ZoffixW++ does the June release
[Coke] nine_: r-j is not part of the release process at the moment. 15:18
dalek kudo/nom: 9c89890 | coke++ | docs/release_guide.pod:
add note about moarvm release
nine_ psch: any chance we can get an mmap op on jvm? 15:26
psch nine_: i have no idea what that would mean for a managed vm 15:27
nine_ psch: I guess this would be it: docs.oracle.com/javase/8/docs/api/...uffer.html 15:28
psch: OTOH I have no idea if that could be used to load byte code on the JVM. The minimum we're gonna need is a loadbytecodebuffer op 15:29
psch nine_: well, we have LibraryLoader.loadNew(byte[] bytes, byte[] serial), see github.com/perl6/nqp/blob/master/s....java#L108 15:31
nine_ psch: ah, so I'd just have to hook it up to the op. Great :) 15:32
pmurias nine_: why do you want to load byte code on the JVM? 15:34
nine_ pmurias: precompiled modules? 15:35
pmurias nine_: you want to load JVM bytecode? 15:36
psch hm, how do i get Iterable into GlobalExt..? :/ 15:37
nine_ pmurias: I'm working on storing dependency information and precompiled bytecode in a single file that can be atomically replaced by just rename()ing over it. I've got it working on MoarVM using a new loadbytecodebuffer op and am now working on a version that uses mmap for improved memory usage. 15:39
pmurias needs to figure out how library loading should work in rakudo-js soon 15:41
nine_ pmurias: wouldn't this just be eval()ed JS code? 15:42
timotimo what about serialized objects? 15:43
nine_ Ah, of course, those 15:44
pmurias nine_: I have the ability to load arbitrary code from a path using require(pathname) 15:45
nine_: the hard part is how much should I integrate with the way node.js handles modules (which is to have a relative node_modules directory with a copy of the deps)
timotimo MadcapJake: i'm a bit uneasy about how parsing of input data and calculation of result data is so interleaved in your "basic graph statistics" solution. though i've written code much like this in the past, too ... 15:47
MadcapJake so you'd prefer it be two routines? I was going for condensed but not one-liner condensed :P 15:49
timotimo i dunno, i'm just outputting my innermost thoughts on the code 15:50
i don't know why i don't like it
nine_ must be personal ;) 15:51
MadcapJake timotimo has it out for me :P 15:52
pmurias nine_: the hard part is how much should I integrate with the way node.js handles modules (node.js has a relative node_modules directory with a copy of the deps) 15:58
[Coke] Hey, release in under 2 weeks. We need to decide how to proceed with 128069; it's a behavior change on 6.c errata; we need to decide how to resolve this. (I think we can : revert the change | finally introduced support for something other than 6.c, and have it behave differently between the two | update 6.c-errata because it's a small change). I don't have any strong feelings yet about which of these is the 15:59
right thing, but we need to talk about it this week and come to a decision. 16:00
RT #128069
synopsebot6 Link: rt.perl.org/rt3//Public/Bug/Displa...?id=128069
MadcapJake pmurias: I'm doing something similar with CUR::GX (as it was modeled after node.js) and it's mostly going to be like CURFS
pmurias: will r-js work in the browser?
[Coke] I think the default action, if we don't come to concensus, is to move that change to a branch and change this to an RFC ticket. But I'd rather decide than fail to decide. 16:01
nine_ jnthn: now that I'm trying to implement an mmap op, I see that for mmap a file has to be open()ed anyway. So it should be enough to implement a loadbytecodefh op that takes an open file handle and mmaps. Essentially a MVM_cu_map_from_fh that just skips the uv_fs_open that MVM_cu_map_from_file does. 16:02
[Coke] RT: 1288; CONC: 6; GLR: 6; JVM: 69; LHF: 2; LTA: 68; OSX: 3; PATCH: 3; PERF: 15; POD: 3; PRECOMP: 3; SEGV: 22; STAR: 1; TESTNEEDED: 19; UNI: 5; WEIRD: 2 16:03
pmurias MadcapJake: yes, having the code rakudo-js generates run in the browser is the main goal 16:10
MadcapJake ok so are you looking at using RequireJS, CommonJS? I personally think you should consider SystemJS. 16:12
pmurias I'm developing on node.js
MadcapJake How would that work in the browser then?
pmurias I have used webpack to pack stuff for running in the browser
MadcapJake ohh, I see.
SystemJS can do that too 16:13
nine_ SystemJS' README uses the word "transpiler". Not a good sign...
MadcapJake nine_: that's how the JS world calls languages that compile to their sacred cow :P 16:14
nine_ I do not shy away from calling the JS world incompetent for creating and using such words... 16:15
[Coke] I rejected the 3 [PATCH] tickets because none of them applied cleanly.
MadcapJake pmurias: github.com/systemjs/systemjs/blob/...plugins.md
nine_: well I don't see the harm, COMpile says "down to byte or machine code" TRANSpile says "across to another language" 16:16
if anything it's humble ;) 16:17
psch so rakudo and nqp are both transpilers too?
java too i suppose
well, javac
pmurias nope
nine_ "A compiler is a computer program (or a set of programs) that transforms source code written in a programming language (the source language) into another computer language (the target language), with the latter often having a binary form known as object code.[1]"
pmurias a transpiler is a source-to-source compiler 16:18
MadcapJake nine_: the last condition is exactly what transpile is supposed to differentiate on
nine_ That's no condition. Hence the word "often"
pmurias a design goal of moar was that it will be no pir equivalent ;)
psch per the definition above, compilers are a superset of transpilers 16:19
geekosaur there is a conceptual thing where a compiler translates from a higher expressivity level to a lower one, and a transpiler translates between similar expressivity levels
MadcapJake it's not but human language is fical nine_ , people consider COMpile to mean something and TRANSpile fills the void for non-bytemachine compilation
psch and there's no name for the complement to transpilers in the set of compilers
except, well, overloading "compiler" with that meaning
[Coke] anyone else see the request recently to hide from-json & to-json? trying to find a ticket for it.
psch which is where this discussion starts... :) 16:20
MadcapJake notices this topic is quite the bikeshedding haven :)
geekosaur ...expressiveness. does it show I just woke from a nap? >.> 16:21
MadcapJake still recovering from excess levels of sleepitudinousness? ;)
pmurias nine_: I'm not really sure there is such a thing as a javascript world/community ;) 16:22
MadcapJake pmurias: really? Not understanding the winky face there. 16:23
geekosaur multiple communities, each with its own notions of how everything fits together? (and likely each one believing it is normative...) 16:24
MadcapJake largely I'd say the communities hinge around bower/npm/requirejs
pmurias with something like perl 5 there is a set of unifying standards (using TAP, having a way to use docs) 16:25
MadcapJake: node.js seems to be a community
jnthn nine_: On mmap and JVM< seems docs.oracle.com/javase/7/docs/api/...g,%20long) is the (or a) API
MadcapJake TAP is standard for pretty much the entire js community
jnthn nine_: So may want to consider that into the nqp:: op API we want
nine_ They do have in common that they show underwhelming levels of competence. Just like with not understanding what a compiler is and feeling the need for creating a redundant word like "transpiler", 30 years after source-to-source compilation has been introduced
geekosaur um, they borrowed that word 16:26
MadcapJake pmurias: npm is the node.js community I say npm though because it's a central authority for node.js packaging, downloading, authoring etc. largely any authorship/module-management tool typically becomes the foundation for community interaction
geekosaur "transpiler" was intruduced when a source-to-source translator went commercial and wanted to highlight its differences
pmurias nine_: is a square a redundant word compared to a rectangle?
nine_ pmurias: a square has a very precise definition. 16:27
But if we want to continue the bikeshed, we should really take it over to #perl6
MadcapJake nine_: I don't doubt that it's largely borne out of lack of knowledge of the system, but that doesn't necessarily invalidate their competency in programming
pmurias nine_: ok
geekosaur (the specific one I'm thinking of also emphasized the write-once-run-anywhere that Java later made its hallmark. it didn't work back then either >.> )
nine_ jnthn: do you see a general need for an mmap op? If not, I'll probably go with the loadbytecodefh op idea that I mentioned. 16:28
16:29 ilmari joined
[Coke] [NYI] and [TODO] seem redundant (rt subject tags). which should we keep? 16:31
nine_ Isn't every ticket kind of TODO? 16:32
[Coke] as compared to a BUG 16:35
it's a "we haven't even started on this", not "there is a problem that needs fixing"
e.g. the type 'rat' is mentioned in the syn. but it's never been implemented yet, so TODO/NYI, vs. "I used rat and it's broken" 16:36
m: my rat $a;
camelia rakudo-moar 9c8989: OUTPUT«===SORRY!===␤Type 'rat' is not declared. Did you mean 'Rat'?␤at /tmp/lbsYI20lfm:1␤------> my rat⏏ $a;␤Malformed my␤at /tmp/lbsYI20lfm:1␤------> my⏏ rat $a;␤␤»
ugexe thats how i've always thought of it. NYI being something you could probably find a code example for in the design, and TODO being a more general concept of something to add 16:37
[Coke] ugexe: no, that's RFC. :)
ah. we have a ton of "NYI"s that are not spelled [NYI]. I'll go with NYI. 16:38
ugexe tagging intensifies
[Coke] but yes, NYI and RFC can be conflated at this point, because we're post christmas. the syn aren't what they used to be. 16:39
geekosaur Id go with that, yes 16:44
I would classify NYI as spec and TODO as not-spec (e.g. optimizing how something is done while keeping it to spec is TODO, as is something not part of the spec like how rakudo maps perl6 to nqp ops) in general though 16:45
[Coke] geekosaur: that's fair. but there's also [PERF], btw. :) 16:54
updated a few tickets: RT: 1285; CONC: 6; GLR: 6; JVM: 69; LHF: 2; LTA: 68; NYI: 27; OSX: 3; PERF: 15; POD: 3; PRECOMP: 3; RFC: 16; SEGV: 22; STAR: 1; TESTNEEDED: 21; TODO: 10; UNI: 5; WEIRD: 2 16:55
... what would a "rat" or "complex" type look like, anyway? we could use more compact storage, but we'd still to box it all the time; not like an int where we can at least add something to it. 16:59
jnthn: is there still a place for "rat" and "complex" vs. their uppercase variants? 17:47
jnthn [Coke]: I'd say so, though I don't see them arriving in the short term 17:52
[Coke] that's fine, just trying to find tickets that can be rejected. 18:01
jnthn [Coke]++ 18:02
18:05 tomboy64 joined
dalek kudo/precomp-store-redesign: 9a71e40 | niner++ | src/core/CompUnit/ (3 files):
Give the VM back the chance to mmap the bytecode file

We use the new loadbytecodefh op to pass the open file handle to the VM for loading the bytecode. Should reduce our memory footprint to the levels before the bytecode/dependency info merge. This also brings back the file name to the VM's compunit.
nine And it even passes all spectests :) 18:50
19:02 sno joined 20:42 sno joined 20:53 sortiz joined
dalek kudo/precomp-store-redesign: ec12fb1 | niner++ | src/core/CompUnit/Precompilation (2 files):
Move assembling the precomp file into the PrecompilationStore

This makes PrecompilationRepository::Default less dependent on a certain store layout. It also brings serialization and deserialization code for PrecompilationDependencys closer together.
21:07 ZoffixWin left