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. |
13:44 | |
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. |
13:47 | ||
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 |
14:55 | |
[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 |
15:25 | |
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 myat /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. |
18:49 | |
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:00 | |
21:07
ZoffixWin left
|