BenGoldberg | When the user types 'perl6', we read the serialized setting from disk, then deserialize that data into objects. Then we compile/run the user's code. | 00:00 | |
Zoffix | That's my understanding of the process too, with the addition that we lazily deserialize the setting. We don't load it all at the start | 00:01 | |
BenGoldberg | What if, when the setting is loaded to be serialized, we change how memory is allocated; specifically, use mmap, but NOT anonymous -- all allocations are file backed -- and skip serialization completely. When the user types 'perl6', we use mmap to load that same file (using MAP_PRIVATE and MAP_FIXED flags), and skip *deseralization* | 00:03 | |
You can call me mad, if you like, I won't be offended ;) | 00:05 | ||
Zoffix | That flew right over my head, so it won't be me calling you mad :) | 00:07 | |
BenGoldberg | mmap is one of the (main?) ways for a program to get memory from the operating system. | 00:08 | |
geekosaur | made sense to me, but beware of things like portability and things not being mappable to the same addresses (so all addresses in the mapped file end up wrong) | ||
also be aware that major distributions plan to move to ASLR in the future and then this won't work at all | 00:09 | ||
timo | many things in the serialized blob are also "mutable", though things like "augment" | 00:12 | |
there's a mechanism called "repossession" where an object derived by a different comp unit will essentially "own" the object and include its changes | |||
not sure what reasons would speak against just mmapping stuff directly into memory for the core setting apart from what was mentioned | |||
timo goes tob ed | |||
BenGoldberg | When the MAP_FIXED flag is present, ASLR is not going to mess with that chunk of memory. The only issue to worry about here is that if some mysterious chunk of code mapping stuff into the byte range where we want to go, before we get a chance to do so ourselves. | 00:13 | |
geekosaur | timo, in that case I think you can map it copy-on-write and then you get a baseline and can modify it which will make it a local image | ||
BenGoldberg | By mysterious, I mean a debugger or antivirus ;) | ||
MAP_PRIVATE would make it copy-on-right, afaik. | 00:14 | ||
geekosaur | BenGoldberg, if it references e.g. libc, libc may be in a different location | ||
BenGoldberg | Oh, that could be a problem. | ||
Hmm... | |||
geekosaur | or libuv | ||
BenGoldberg | Or any library which is dynamically loaded before the setting is loaded. | 00:15 | |
s/copy-on-right/copy-on-write/ ;) | |||
I suppose that fixing up pointers is inevitable with this approach :( But it still might be faster than deserialization. | 00:17 | ||
What if, after the setting is loaded (when we're creating the data), and before exiting, we scan through the entire chunk of memory, looking for pointers into our *currently loaded* libc, libuv, etc; For each such pointer we find, we mutate the pointer so it's an integer relative to the base of libc, libuv, etc., and record it into a separate file. | 00:22 | ||
japhb | BenGoldberg: It's sounding suspiciously like time to review the state of the art for linkers and loaders | 00:23 | |
geekosaur | ^ | ||
BenGoldberg | When the user types 'perl6', we mmap the main file, then read through the second file, and transform all of those relative integers into proper pointers to functions in our new process's libc, libuv, etc ;) | ||
geekosaur | this is more or less dlopen(). you'd need to arrange a relocations table so it can update all such when it attaches it, then save it as a shared object | 00:24 | |
but! I do not know how portable this will be. remember you have more than just Linux to deal with | |||
Windows and OS X have their own shared objects and relocations (and rules associated with both) | 00:25 | ||
BenGoldberg | Hmm... I guess it *is* a mad idea... I don't know enough to suggest any sort of three-OS solution. | 00:32 | |
geekosaur | libbfd, in theory | 00:33 | |
in practice, the edge cases will likely drive you nuts | |||
BenGoldberg | How much stuff in the setting contains pointers to library functions, anyway? | 00:35 | |
BenGoldberg had previously thought all of those were in moarvm, actually. | 00:36 | ||
Geth | roast: skids++ created pull request #317: RT#126540 RT#130773 RT#130502 RT#131846 RT#131409 RT#126984 tests |
02:11 | |
synopsebot6 | Link: rt.perl.org/rt3/Public/Bug/Display...?id=126540 | ||
Link: rt.perl.org/rt3/Public/Bug/Display...?id=130773 | |||
Link: rt.perl.org/rt3/Public/Bug/Display...?id=130502 | |||
Link: rt.perl.org/rt3/Public/Bug/Display...?id=131846 | |||
Link: rt.perl.org/rt3/Public/Bug/Display...?id=131409 | |||
Link: rt.perl.org/rt3/Public/Bug/Display...?id=126984 | |||
Geth | roast: 693bff1c37 | skids++ | S02-types/whatever.t RT#126540 RT#130773 RT#130502 RT#131846 RT#131409 RT#126984 tests ...fudged, but for RT#126540 |
||
synopsebot6 | Link: rt.perl.org/rt3/Public/Bug/Display...?id=126540 | ||
Link: rt.perl.org/rt3/Public/Bug/Display...?id=130773 | |||
Link: rt.perl.org/rt3/Public/Bug/Display...?id=130502 | |||
Link: rt.perl.org/rt3/Public/Bug/Display...?id=131846 | |||
Link: rt.perl.org/rt3/Public/Bug/Display...?id=131409 | |||
Geth | roast: 4b2fef409c | skids++ (committed using GitHub Web editor) | S02-types/whatever.t Merge pull request #317 from skids/rt126540 RT#126540 RT#130773 RT#130502 RT#131846 RT#131409 RT#126984 tests |
||
synopsebot6 | Link: rt.perl.org/rt3/Public/Bug/Display...?id=126984 | ||
Link: rt.perl.org/rt3/Public/Bug/Display...?id=126540 | |||
synopsebot6 | Link: rt.perl.org/rt3/Public/Bug/Display...?id=126540 | ||
Link: rt.perl.org/rt3/Public/Bug/Display...?id=130773 | |||
Link: rt.perl.org/rt3/Public/Bug/Display...?id=130502 | |||
Link: rt.perl.org/rt3/Public/Bug/Display...?id=131846 | |||
Link: rt.perl.org/rt3/Public/Bug/Display...?id=131409 | |||
Link: rt.perl.org/rt3/Public/Bug/Display...?id=126984 | |||
[Coke] | GAH | 02:27 | |
Geth | roast: skids++ created pull request #318: Fix RT number... RT#131502 not 130502 |
02:28 | |
synopsebot6 | Link: rt.perl.org/rt3/Public/Bug/Display...?id=131502 | ||
roast: 9ed6c9cec6 | skids++ | S02-types/whatever.t Fix RT number... RT#131502 not 130502 |
|||
roast: 25d8538c1a | skids++ (committed using GitHub Web editor) | S02-types/whatever.t Merge pull request #318 from skids/rt126540 Fix RT number... RT#131502 not 130502 |
|||
synopsebot6 | Link: rt.perl.org/rt3/Public/Bug/Display...?id=131502 | ||
synopsebot6 | Link: rt.perl.org/rt3/Public/Bug/Display...?id=131502 | ||
skids | yeah synopsebot6 could use a "just did that one" cache. Also maybe some "don't interrupt pastes/bots" logic. | 02:34 | |
[Tux] | This is Rakudo version 2017.08-134-g627de7833 built on MoarVM version 2017.08.1-165-gf042d9eb | 06:17 | |
csv-ip5xs 1.352 - 1.397 | |||
test 9.766 - 10.129 | |||
test-t 3.564 - 3.598 | |||
csv-parser 11.248 - 11.292 | |||
nine | lizmat: yes, it does | 06:51 | |
yoleaux | 05:32Z <AlexDaniel> nine: FWIW RT #132088 | ||
synopsebot6 | Link: rt.perl.org/rt3/Public/Bug/Display...?id=132088 | ||
lizmat | Files=1223, Tests=67791, 289 wallclock secs (11.08 usr 4.53 sys + 1951.17 cusr 206.48 csys = 2173.26 CPU) | 08:44 | |
jnthn | morning o/ | 09:09 | |
Geth | rakudo/nom: 4e3f0fcad7 | (Jonathan Worthington)++ | tools/build/Makefile-Moar.in Fix non-installed gdb/valgrind runners The paths were in the wrong order, meaning a ./perl6-gdb-m or ./perl6-valgrind-m before `make install` would not work |
09:45 | |
rakudo/nom: b30ac08a13 | (Jonathan Worthington)++ | src/core/Channel.pm Fix race in Channel awaiter Fixes an occasional crash with "cannot call close on a null object" in S17-promise/nonblocking-await.t |
09:49 | ||
Skarsnik | releasable6, status | 09:59 | |
releasable6 | Skarsnik, Next release in 1 day and ā9 hours. 2 blockers. 122 out of 136 commits logged | ||
Skarsnik, Details: gist.github.com/9e928ad437f5aa12f7...dba124bfcb | |||
Geth | nqp: c20511799d | (Jonathan Worthington)++ | tools/build/MOAR_REVISION Bump MOAR_REVISION for threadlockcount op |
10:54 | |
nqp: version bump brought these changes: github.com/MoarVM/MoarVM/compare/2...1-gcf95892 507a94d678 | (Jonathan Worthington)++ | src/vm/moar/QAST/QASTOperationsMAST.nqp |
|||
nqp: version bump brought these changes: github.com/MoarVM/MoarVM/compare/2...1-gcf95892 b12ea726f3 | (Jonathan Worthington)++ | 3 files |
|||
nqp: f3b0f0c04a | (Jonathan Worthington)++ | src/vm/jvm/runtime/org/perl6/nqp/runtime/Ops.java Corret a thinko in JVM threadlockcount |
11:20 | ||
rakudo/nom: 1818de980f | (Timo Paulssen)++ | lib/NativeCall.pm6 nativecall: don't try to compile sigs with optional parameters it's currently NYI, and default values would just be ignored. |
11:50 | ||
rakudo/nom: 69dae1f3be | (Elizabeth Mattijsen)++ | src/core/Enumeration.pm Give Enumeration its own .WHICH So that we can distinguish between enums that happen to have the same value. |
12:29 | ||
Zoffix | m: More.^roles.say | 12:30 | |
camelia | No such method 'roles' for invocant of type 'Perl6::Metamodel::EnumHOW'. Did you mean any of these? does roll in block <unit> at <tmp> line 1 |
||
Zoffix | No, I didn't | ||
bah, lizmat++ is way faster than me :) | |||
Zoffix mops up by writing the tests | 12:32 | ||
lizmat | Zoffix++ | 12:33 | |
nine | timo: oooh, thanks for the nativecall fix! | ||
timo | no prob :) | 12:34 | |
may also want to check if things like named parameter aliases and such are problematic, too | |||
nine | But native subs cannot have named parameters anyway? | 12:35 | |
timo | oh | ||
yeah, that's true | |||
m: use NativeCall; sub test($a, :$b) is native(Str) { * } | 12:36 | ||
camelia | Potential difficulties: In 'test' routine declaration - Not an accepted NativeCall type for parameter [1] $a : Any --> For Numerical type, use the appropriate int32/int64/num64... at <tmp>:1 ------> 3; sub test($a, :$b) is nativā¦ |
||
timo | m: use NativeCall; sub test(int8 $a, int8 :$b) is native(Str) { * } | ||
camelia | ( no output ) | ||
timo | look, they can! :P | ||
nine | And they work exactly as much as with the optimization ;) | 12:39 | |
With that taken care of, I can return to turning nativecallinvokejit into a real invoke op. | 12:40 | ||
Though I may need some time to fully recover from Cassini's mission end :) | |||
Geth | rakudo/nom: cc64a75842 | (Elizabeth Mattijsen)++ | src/core/Enumeration.pm Give enums an iterator - e.g. "for Order" will show Less/Same/More - e.g. "for Less" will still just show Less |
12:43 | |
lizmat | this is spectest clean, although maybe a bit too much magic | ||
afk for a few hours& | |||
Zoffix | m: for Bool { .say } | 12:44 | |
camelia | (Bool) | ||
Zoffix | I guess now that'll give True, False | 12:45 | |
timo | hopefully False, True :) | 12:46 | |
Zoffix | Well, yeah | 12:47 | |
But the question is whether that's desired :) | 12:48 | ||
m: my Bool $x; say $x.map: *.^name | |||
camelia | (Bool) | ||
timo | oh, you mean the enum type object now being iterable or so? | ||
hm, it's not marked iterable, though? | 12:49 | ||
masak | lizmat: re "maybe a bit too much magic" -- `for Order` strikes me as maybe one word over-Huffmanized | 12:51 | |
timo | at least our post-GLR semantics will prevent a change like this from causing e.g. a list [Bool, Int, Order] to suddenly become more elements | 12:52 | |
Zoffix | timo: it still iterates | ||
masak | (in that as an uninitiated reader, even when I'm aware it's an Enum, I wouldn't be 100% sure what `for Order` did -- but something like `for Order.enums` makes it clearer) | ||
Zoffix | m: for Order { .say } | ||
camelia | Less Same More |
||
Zoffix | m: for Bool { .say } | ||
camelia | (Bool) | ||
Zoffix | Looks like Bool has its own iter too | ||
timo | is Bool now fully doing the Enumeration role? | 12:53 | |
Zoffix | m: my Order $x; say $x.map: *.pair.key | ||
camelia | (Less Same More) | ||
Zoffix | timo: ah, I guess that's why it don't got that problem | ||
Zoffix votes too-magical on that last eval | |||
timo | "problem"? i thought that was the feature ā¦ | 12:54 | |
Zoffix | Non-Iterable type objects producing numerous values when iterated over are a problem in my book :/ | 12:56 | |
timo | yeah, i find that quite a bit surprising | ||
m: for (Bool, Order, Int) -> $x { .perl.say } | |||
camelia | Any Any Any |
||
Zoffix | m: my PromiseStatus $status; for $status { .say } | ||
camelia | (PromiseStatus) | ||
timo | m: for (Bool, Order, Int) -> $x { $x.perl.say } | ||
camelia | Bool Order Int |
||
Zoffix | m: my PromiseStatus $status; for @$status { .say } | ||
camelia | (PromiseStatus) | ||
Zoffix | m: my PromiseStatus $status; for PromiseStatus { .say } | ||
camelia | Planned Kept Broken |
||
Zoffix | So it only works that way when typed literally? | 12:57 | |
masak | ah, yes. "it's the type object" is a good description of what feels un-easy about it being iterable... :) | ||
Geth | rakudo/nom: 2ad51a0f5b | (Zoffix Znet)++ | src/core/Enumeration.pm Constrain Enumeration.succ/.pred to instances pre- github.com/rakudo/rakudo/pull/1156 type objects would just die with X::Parameter::InvalidConcreteness but now they return weird results. Constrain to instances, to restore the ::InvalidConcreteness throwage we had before. |
13:07 | |
Zoffix | ZOFVM: Files=1273, Tests=144768, 138 wallclock secs (15.74 usr 2.24 sys + 2827.19 cusr 223.59 csys = 3068.76 CPU) | ||
m: enum Foo (a => 1, b => 1); say a.WHICH; say b.WHICH; say a === b | 13:28 | ||
camelia | Foo|a|Int|1 Foo|b|Int|1 True |
||
Zoffix | (writing tests)++ | ||
s: &infix:<===>, \(Kept, Broken) | 13:29 | ||
SourceBaby | Zoffix, Sauce is at github.com/rakudo/rakudo/blob/2ad5...nt.pm#L329 | ||
Zoffix fixes | 13:33 | ||
with multi infix:<===> (Enumeration:D \a, Enumeration:D \b) { a.WHICH === b.WHICH } | 13:34 | ||
Skarsnik | What this supposed to do? x) | 13:35 | |
Zoffix | make === on enums work | 13:36 | |
timo | without trying, i landed at about the same amount of time tinita suggested for the yaml project (in my grant application) | ||
Skarsnik | m: enum Foo (A, B, C); enum Bar (C, D, E); say Foo === Bar; | 13:37 | |
camelia | 5===SORRY!5=== Error while compiling <tmp> Undeclared names: A used at line 1 B used at line 1 C used at line 1 |
||
Skarsnik | m: enum Foo (A => 1, B => 2, C => 3); enum Bar (C => 1, D => 2, E => 3); say Foo === Bar; | ||
camelia | Potential difficulties: Redeclaration of symbol 'C' at <tmp>:1 ------> 3=> 3); enum Bar (C => 1, D => 2, E => 3)7ā5; say Foo === Bar; False |
||
timo | i'm already estimating ~171h but i haven't put any estimates in for writing the user-facing documentation about using and interpreting the profilers :| | ||
Skarsnik | m: enum Foo (A => 1, B => 2, C => 3); enum Bar (F => 1, D => 2, E => 3); say Foo === Bar; | 13:38 | |
camelia | False | ||
Skarsnik | I don't even get what === supposed to mean between 2 enumeration x) | ||
Zoffix | Skarsnik: it's object identity test | ||
perlpilot | timo: What is this yaml project? | 13:39 | |
Zoffix | m: enum Foo (a => 1, b => 1, c => 2); say a === b | ||
camelia | True | ||
Zoffix | Skarsnik: ^ that's supposed to say False | ||
timo | news.perlfoundation.org/2017/08/gra...amlpp.html perlpilot | ||
perlpilot | ah. cool | ||
Skarsnik | dunno a is an element of en enumeration in this, not an enumeration | 13:40 | |
timo | docs.google.com/document/d/102h_Nl...sp=sharing - i need some guidance | ||
Zoffix | Skarsnik: call it whatever you want. It's still just an object :) | ||
jnthn back | 13:41 | ||
Geth | rakudo: book++ created pull request #1157: Avoid mistaking two enumeration elements with the same value |
||
rakudo/nom: 8d442a5232 | (Philippe Bruhat (BooK))++ | src/core/Enumeration.pm Avoid mistaking two enumeration elements with the same value This is a fix for this issue: enum Animal (Cat => 0, Dog => 0, Human => 42); say Dog.succ; # OUTPUT: Ā«Dogā¤Ā» With this change, the behaviour becomes: say Dog.succ; # OUTPUT: Ā«Humanā¤Ā» |
13:42 | ||
Skarsnik | m: enum Foo (A => 1, B => 2, C => 3); enum Bar (F => 1, D => 2, E => 3); say A.WHAT; | ||
camelia | (Foo) | ||
rakudo/nom: 6601561469 | (Zoffix Znet)++ (committed using GitHub Web editor) | src/core/Enumeration.pm Merge pull request #1157 from book/book/enum-pred-succ Avoid mistaking two enumeration elements with the same value |
|||
Zoffix | ZOFFLOP: t/spec/S17-procasync/kill.t t/spec/S11-modules/nested.t t/spec/S17-supply/supplier-preserving.t | 13:43 | |
jnthn | I think a type object should always iterate as if it's a list containing one element, which is the type object itself | 13:44 | |
If we need a method in the Enumerator role that gets a list of the values without having to do .^something then we I guess could | 13:45 | ||
Geth | rakudo/nom: 8d938461a9 | (Zoffix Znet)++ | src/core/Enumeration.pm Fix Enumeration:D === Enumeration:D An earlier fix[^1] to .WHICH fixed the method, but the issue with the operator remained, because there exists an Int:D === Int:D candidate that simply unboxes the Ints. Fix by adding Enumeration:D === Enumeration:D candidate for infix:<===> [1] github.com/rakudo/rakudo/commit/69...b3223e2f62 |
||
Zoffix | (I realize the PR I merged was unnessesary since === now got fixed, but I plan to optimize the methods a bit anyway and didn't want to create more confusion to the PR author, since this morning I suggested the nqp::eqaddr instead of fixing the ====) | 13:47 | |
Geth | roast: dfbbd70d46 | (Zoffix Znet)++ | S12-enums/basic.t Add tests for Enumeration.pred/.succ and === - methods fixed in [^1] and [^2] - operator fixed in [^3] and [^4] [1] github.com/rakudo/rakudo/pull/1156 [2] github.com/rakudo/rakudo/pull/1157 [3] github.com/rakudo/rakudo/commit/69dae1f3be [4] github.com/rakudo/rakudo/commit/8d938461a9 |
13:50 | |
Zoffix | timo: briefly skimming it, looks good to me. What sort of guidance you need? | 13:52 | |
stmuk | is there any documentation about the difference between roast master and 6.c-errata? | 13:58 | |
Zoffix | Oh god. I merged a boo-boo :P | ||
oh *phew* no, I didn't :) Just a flaw in my code here :P | 13:59 | ||
stmuk: what sort of differences? | 14:00 | ||
stmuk | I mean high level docs explaining why the two branches exist | 14:02 | |
Zoffix | README/CONTRIBUTING don't mention errata. But well, the differences can be summed up in one sentence: 6.c-errata is a released language version we don't change other than to fix errors in tests (the "errata"); master is the unreleased work-in-progress that will become the next language version; though its current state is not prescriptive of the next language version's behaviour: all the new additions will | ||
be reviewed for inclusion into the release | |||
ā¦ a long, run-on, but still one, sentence :P | |||
stmuk | ok I may stick that (or something similar) in the FAQ together with "why does the test run complain about missing files" | 14:04 | |
Zoffix | stmuk: oh. I was meant to take care of that actuallyā¦ back in like February | ||
And will actually take care of it during prep for 6.d stuff, so perhaps FAQ entry isn't needed. | 14:05 | ||
Actually, *will* take care of it before next R* release | |||
huggable: star | |||
huggable | Zoffix, Estimated Rakudo Star releases for 2017: .01, .04, .07 & .10 | ||
Zoffix | .in 15d make separate t/spectest.data for each language version, bruh | 14:06 | |
yoleaux | Zoffix: I'll remind you on 30 Sep 2017 14:06Z | ||
Zoffix | .in 28d make separate t/spectest.data for each language version, bruh | ||
yoleaux | Zoffix: I'll remind you on 13 Oct 2017 14:06Z | ||
stmuk | ++Zoffix | 14:07 | |
so 2017.10 should pass against 6.c-errata and a new 6.d-errata? | 14:08 | ||
timo | Zoffix: i'm not happy with the hour numbers in the schedule | ||
Zoffix | timo: so remove them and ask for the amount of money you think the entire work is worth, instead of per-hour | 14:09 | |
timo | how the hell am i supposed to come up with a sensible number then? :D | 14:10 | |
Zoffix | timo: well, use the numbers you got, but don't publish them. | ||
Zoffix also lives by the "multiply the number of hours you think it'll take you by $n" rule | |||
stmuk | Fibonacci sequence story points! | 14:11 | |
Zoffix | 'cause it always seems to take longer for me than what I estimate it to be :) | ||
timo | i think most people experience that | ||
the yaml grant has a bit less than my hour amount and requested 2.5k usd | 14:12 | ||
Geth | rakudo/nom: f26d1e24f9 | (Jonathan Worthington)++ | src/core/ThreadPoolScheduler.pm Don't attempt non-blocking await if holding locks Locks are tied to a particular OS thread. Non-blocking await may move code between OS threads. Therefore, if a lock is being held, then we fall back on a real blocking await, so things work. At present, various bits of the Supply internals rely on locks; this thus fixes a lot of things that are broken, but also means that we can't yet get all the benefit we'd like from non-blocking await. Upcoming changes to various affected aspects of supplies will fix this issue. |
||
timo | i think i'd request more than that, but my impostor syndrome is asking me to STFU :) | ||
roast: bd141e2f9d | (Jonathan Worthington)++ | S17-promise/nonblocking-await.t Add test for RT #130692 Plus a test that more precisely covers the underlying issue |
14:14 | ||
synopsebot6 | Link: rt.perl.org/rt3/Public/Bug/Display...?id=130692 | ||
stmuk | is 6.d-errata going to be a modified full copy of roast master or a smaller number of files like a delta? | 14:16 | |
timo | because why would anybody give me 3k usd? | ||
Zoffix | timo: I'd still be +1 if the proposal listed 3k | 14:17 | |
stmuk: I'd say full copy. I imagine at some point will end-of-life 6.c and 6.d will be the oldest supported release | |||
s/will/we'll/;l | 14:18 | ||
jnthn | timo: So that you'll build nice things :) | ||
timo | anyway, i can *totally* make use of more monies after the bits outlined in my schedule | 14:19 | |
not just because documentation can eat any amount of time you're willing to give it | |||
dogbert17_ | Stage mast : No registered operation handler for 'threadlockcount' wazzup with that | 14:27 | |
timo | dogbert17_: needs a newer nqp | 14:28 | |
Geth | rakudo/nom: a4ce97cacb | (Jonathan Worthington)++ | tools/build/NQP_REVISION Bump NQP_REVISION for threadlockcount op |
||
rakudo/nom: version bump brought these changes: github.com/perl6/nqp/compare/2017....1-gf3b0f0c a137c0de12 | (Jonathan Worthington)++ | 2 files |
|||
stmuk | how is 6.d.2 (for example) handled in roast? | 14:29 | |
dogbert17_ | timo: looks like a new version just showed up, jnthn++ | ||
timo | well, the version was already there, but now configure will force you to get it :) | 14:30 | |
jnthn | Yeah, forgot that | ||
timo | well, i'm one of those "i grab master from moar and nqp all the time" folks | ||
dogbert17_ configuring ... | |||
stmuk | grrr I suppose I should convert Zoffix's "behaviour" into "behavior" even although I don't really want to :/ | 14:31 | |
jnthn | Why change it to the wrong spelling? ;-) | 14:32 | |
timo | wroung | 14:33 | |
Zoffix | :D | 14:34 | |
perlpilot | stmuk: I wouldn't change it. | ||
roast: e5c50ae935 | (Jonathan Worthington)++ | S17-promise/nonblocking-await.t Test to cover RT #132091 |
|||
synopsebot6 | Link: rt.perl.org/rt3/Public/Bug/Display...?id=132091 | ||
jnthn | How convenient for that to be discovered on the day I'm working on non-blocking await anyway :) | 14:51 | |
timo | <3 | ||
i'm not sure why there's two of them | 14:52 | ||
jnthn | Blocking awaiter, thread pool awaiter | ||
Pondering if we can factor out some of the commonalities though | |||
timo | ah | ||
Zoffix notices a drawback of learning C | 14:59 | ||
nqp code looks a lot less messy now | |||
Geth | roast: 82a1e10ad8 | (Jonathan Worthington)++ | S17-supply/syntax.t Test to cover RT #126842 |
15:03 | |
synopsebot6 | Link: rt.perl.org/rt3/Public/Bug/Display...?id=126842 | ||
Geth | rakudo/nom: 55aa7f28d3 | (Zoffix Znet)++ | src/core/Enumeration.pm Make Enumeration.pred 8.4x faster / .succ 6x faster Closes RT#132093: rt.perl.org/Ticket/Display.html?id=132093 |
15:04 | |
synopsebot6 | Link: rt.perl.org/rt3/Public/Bug/Display...?id=132093 | ||
jnthn | Zoffix: Yeah, that's a lot of why we try to write what we can in Perl 6 / NQP rather than C :) | ||
timo | NQP does all our MVMROOT for us, too :) | ||
Zoffix | I meant it's harder to tell for me now if that ^ commit looks a bit over the top with all the nqp stuff. | 15:06 | |
:) | |||
Dunno, didn't think the perf was a real concern with these methods, but the ticket was created, so I guess it was. | |||
jnthn | m: react whenever Supply.interval: 1 { .say }; sleep 5 | ||
timo | i wonder if someone would be down to write a slang for just in the setting that lets us write nqp-equivalent code more prettily | ||
Zoffix & for the weekend | |||
\o | 15:07 | ||
timo | have a good one, Zoffix | ||
camelia | (timeout)0 | ||
jnthn | oh duh, it was react, so no need for sleep ;) | ||
m: react whenever Supply.interval: 1 { .say; done if $++ = 5 }; | |||
camelia | 0 Tried to get the result of a broken Promise in block <unit> at <tmp> line 1 Original exception: Cannot modify an immutable Int (0) in block <unit> at <tmp> line 1 |
||
jnthn | m: react whenever Supply.interval: 1 { .say; done if $++ == 5 }; | ||
camelia | 0 1 2 3 4 5 |
||
nine | Why does NativeCall box the return value in the VM instead of letting the high level code handle that? | 15:13 | |
timo | probably because the nativecall op is defined to return into an object register | ||
you could probably build multiple, one per return primitive type | 15:14 | ||
jnthn | Because an op can only have one register result type | ||
nine | Like the invoke_* ops? | ||
timo | yup | ||
jnthn | But we could do something like invoke_[osin] yes | ||
nine | Would save me from figuring out a way to pass the return value type to the op. At the cost of even more refactoring... | 15:15 | |
jnthn | Yeah, but think of the potential extra performance! ;) | 15:16 | |
nine | I know. It really feels like the right way to do this | ||
It's just hard, because this is a "change everything at the same time" kinda refactor. I dread the debugging... | 15:17 | ||
Geth | roast: 7c39b04256 | (Zoffix Znet)++ (committed using GitHub Web editor) | S12-enums/basic.t Fix typo in test description |
15:18 | |
jnthn | m: use Test; my $i = 0; react whenever Supply.from-list(1..5) { $i += $_ }; is $i, 15 | ||
camelia | ok 1 - | ||
jnthn | c: 2015.12 use Test; my $i = 0; react whenever Supply.from-list(1..5) { $i += $_ }; is $i, 15 | 15:19 | |
committable6 | jnthn, Ā¦2015.12: Ā«Method 'phasers' not found for invocant of class 'Code'ā¤ in block <unit> at /tmp/QysrlZ9VPn line 1ā¤ Ā«exit code = 1Ā»Ā» | ||
jnthn | yay | ||
Geth | roast: 4d64c02e58 | (Jonathan Worthington)++ | S17-supply/syntax.t Test to cover RT #128717 |
15:21 | |
synopsebot6 | Link: rt.perl.org/rt3/Public/Bug/Display...?id=128717 | ||
lizmat | .tell Zoffix re 8d938461 , I think the nqp::eqaddr is enough. Or am I missing something? | 17:08 | |
yoleaux | lizmat: I'll pass your message to Zoffix. | ||
Zoffix | . | 17:10 | |
yoleaux | 17:08Z <lizmat> Zoffix: re 8d938461 , I think the nqp::eqaddr is enough. Or am I missing something? | ||
Zoffix | lizmat: I think so too, but I wasn't 100% sure :) | ||
OK, I'll change it now :) | |||
lizmat | Zoffix: also, I would bind $values to $!reified directly, so you can use the much cheaper nqp::elems on $values, than the relatively expensive .elems | 17:16 | |
a gettatr is really cheap | |||
Zoffix | lizmat: thanks. I'll change that too. I was just unsure whether .^enum_list_values would always be guaranteed to be fully reified (and .elems reifies) | 17:17 | |
lizmat | yes, it's guaranteed to be reified | ||
Zoffix | Sweet | ||
lizmat | it's an nqp::list underneath | ||
timo | could also be an IterationBuffer without much more cost | 17:18 | |
lizmat | the whole gettatr stuff is only needed because rakudo auto-HLLizes the nqp::list on the return from ^enum_value_list | ||
timo: IterationBuffer is a HLL concept | |||
that doesn't exist insude EnumHOW afaik | 17:19 | ||
Zoffix | m: use nqp; class Foo {}; my $x = Foo; sub x (\a, \b) { dd nqp::eqaddr(a,b) }(Foo, $x) | ||
camelia | 0 | ||
Zoffix | m: use nqp; class Foo {}; my $x = Foo; sub x (\a, \b) { dd nqp::eqaddr(nqp::decont(a),nqp::decont(b)) }(Foo, $x) | ||
camelia | 1 | ||
timo | oh, right, not early enough | ||
Zoffix | Should we stick deconts over here? github.com/rakudo/rakudo/blob/2ad5...ny.pm#L485 | ||
lizmat | looks like it's needed for the eqaddr | 17:20 | |
so yes | |||
Zoffix++ # good catch | 17:21 | ||
Zoffix | cool, I'll add 'em | ||
lizmat | I wonder if we should be able to store the index of an Enum in the Enum itself | 17:35 | |
so we could bypass the whole O(n) discussion | |||
it would only need to be a native int | 17:36 | ||
assuming we won't see more than 2**32 elements in an enum | 17:37 | ||
Zoffix | ZOFVM: Files=1273, Tests=144780, 140 wallclock secs (15.82 usr 2.55 sys + 2845.90 cusr 237.88 csys = 3102.15 CPU) | 17:38 | |
Geth | rakudo/nom: 43e41ec683 | (Zoffix Znet)++ | src/core/Enumeration.pm Apply lizmat++'s improvements From irclog.perlgeek.de/perl6-dev/2017-...i_15169665 Makes .pred 2.8x faster still and .succ 80% faster |
17:40 | |
rakudo/nom: 880b33e2e6 | (Zoffix Znet)++ | 2 files Add deconts to nqp::eqaddr() tests There are more places where this is needed. Will try to remember to fix up those later, unless someone beats me. Per: irclog.perlgeek.de/perl6-dev/2017-...i_15169706 |
17:41 | ||
Zoffix | grep -FRn 'nqp::eqaddr' src/ shows up several other places that likely need it, but my editor on this box sucks so I left those for now | ||
lizmat: my view on that is: whom are we helping? If the changelog reads "- All enums now use $n extra bytesā¤ - Enums with more than a few elements are now a few microseconds faster" will people rejoyce? Currently you can do a million .succ's in 4 seconds on Order enum. Who's doing so many .succ's/.pred's on enums that the current performance would be problematic? | 17:46 | ||
m: for ^1000_000 { $ = More.succ }; say now - INIT now | |||
camelia | 4.2706098 | ||
Zoffix | Prolly be faster still after the last commit | ||
To me this looks like a case of premature optimization (including the speed improvements commits I pushed). The methods aren't that slow to begin with and they're not commonly used. It's O(n), but so what? | 17:47 | ||
timo | most use cases for many succs in a row would more easily be served by just iterating over the elements of the map themselves | 17:51 | |
AlexDaniel | FWIW I'm fine with documenting it as a trap and moving on, even though everything about it is distasteful | 17:54 | |
Zoffix | What's the trap? | 17:55 | |
If any algo that's not O(1) needs to be put into traps, we're in serious trouble :) | 17:56 | ||
AlexDaniel | I would never expect .succ to be O(n) | ||
Zoffix | I see | 17:57 | |
AlexDaniel | but in general the trap is using .succ on enums, it doesn't really DWIM | ||
Files=3, Tests=14, 18 wallclock secs ( 0.05 usr 0.01 sys + 19.60 cusr 2.33 csys = 21.99 CPU) | 17:58 | ||
Result: PA | |||
SS | |||
PAā¦ SS? :-/ | |||
Zoffix | .in 29d see if nqp::eqaddr deconting stuff needs to be done anywhere in core | 18:00 | |
yoleaux | Zoffix: I'll remind you on 14 Oct 2017 18:00Z | ||
lizmat | FWIW, having an enum element know it's own index, would also make for a much cheaper .WHICH | 18:03 | |
that would be independent on the complexity of the value of the enum | 18:04 | ||
Zoffix | Sweet. | 18:06 | |
I'm gonna switch my position. I don't like this code and it'd be much nicer if the enum knew its index: github.com/rakudo/rakudo/blob/nom/...pm#L47-L78 | 18:09 | ||
lizmat | working on that :-) | 18:10 | |
Zoffix | \o/ | 18:11 | |
lizmat | running spectest now | 18:15 | |
samcv | releasable6, status | 18:19 | |
releasable6 | samcv, Next release in 1 day and ā0 hours. 2 blockers. 122 out of 149 commits logged | 18:20 | |
samcv, Details: gist.github.com/49ffe0a2ec5e8ccc83...03edd8c105 | |||
Geth | rakudo/nom: f925c64826 | (Elizabeth Mattijsen)++ | 3 files Streamline Enum.succ|pred|WHICH - facilitated by an Enum knowing its index in the ^enum_value_list - make Enum.succ|pred about 7x faster, and O(1) (testing with Order) - use index to make Enum.WHICH completely agnostic about its contents |
18:22 | |
AlexDaniel | ^ native int thingy is probably not an issue, and the buffering fallout seems to be minor | 18:23 | |
so not exactly blockers but more eyeballs on these won't hurt | 18:24 | ||
lizmat | eyeballs welcome :-) | 18:25 | |
samcv | good * everyone | 18:28 | |
lizmat | samcv o/ | 18:29 | |
Zoffix | lizmat++ looks great | ||
AlexDaniel: I don't get where "the reasoning for keeping O(n) kinda contradicts itself." | 18:32 | ||
Nor do I see where your "very fucking close" enums use .pred or .succ | 18:34 | ||
AlexDaniel | Zoffix: doesn't really matter anymore I guess, but my understanding was: 1) we're just trading more RAM for performance 2) n is very small āāā so why do we care if it's going to use more RAM or whatever, if n is small? | 18:38 | |
lizmat | anyways, it's O(1) now | ||
AlexDaniel | you could of course argue that we may potentially have lots of small enums, so my logic is flawedā¦ but oh well :) | 18:39 | |
and some examples from the ecosystem were just showing that big-ish enums definitely exist | 18:41 | ||
although these are still small, I'd agree | |||
Zoffix | But none of them use .succ/.pred. They don't match the usecase you are trying to (prematurely) optimize for., | 18:42 | |
geekosaur | seems to me .WHICH covers that one | ||
AlexDaniel | well we didn't have working .succ/.pred before, so yeah they are not using it | ||
Zoffix | Yeah, which is why I switched my position :) | 18:43 | |
AlexDaniel: We have working .combinations and .permutations. They're not O(1) | 18:45 | ||
AlexDaniel | not O(1) in what way? You mean besides what you're explicitly asking for when you use these? | 18:47 | |
lizmat | afk& | 18:48 | |
Zoffix | AlexDaniel: they're not O(1) in that they depend on N. | 18:49 | |
AlexDaniel | well, if you want to get the elements out of it, then sure? | 18:50 | |
but at the same time this is fine: | |||
m: say +combinations(30000, 5) | |||
camelia | 202432507874625006000 | ||
Zoffix | Why are you OK with getting elements out of it being O(1)? You could pre-generate that list and return it faster. | 18:51 | |
And surely more people use these methods than .succ and .pred on Enumeration:D | |||
*not being | 18:52 | ||
Does it need to be "very fucking close" for it to be worthy of a ticket? | |||
Zoffix & | |||
AlexDaniel | I dunno, I just think that .succ being O(n) is exceptional (and is unexpected), while I guess most people know that combinations/permutations can blow up with high n's | 18:53 | |
if we can optimize for some common combinations/permutations, then it can be worth a ticket, yeah. But so far I don't see this opportunity though | 18:55 | ||
Geth | rakudo: dwarring++ created pull request #1158: add isa method to SubsetHOW |
19:47 | |
rakudo/nom: 0704cd9722 | (David Warring)++ | src/Perl6/Metamodel/SubsetHOW.nqp add isa method to SubsetHOW Fixes RT#132073 the following was erroring, but now returns True: subset S of Int; say S.isa(Int); |
20:09 | ||
synopsebot6 | Link: rt.perl.org/rt3/Public/Bug/Display...?id=132073 | ||
rakudo/nom: ac8e099bad | niner++ (committed using GitHub Web editor) | src/Perl6/Metamodel/SubsetHOW.nqp Merge pull request #1158 from dwarring/subset-isa add isa method to SubsetHOW |
|||
nine | AlexDaniel: what I have not seen in this discussion is an actual use case for .pred/.succ on enums. Let alone one that's performance sensitive. | 20:15 | |
AlexDaniel | nine: what about Fooā¦Bar ? | 20:17 | |
not that it works, butā¦ | |||
ugexe | The Nine Billion Names of God | ||
geekosaur | nine, actually we did find one: .WHICH and its use in serialization | 20:19 | |
BooK | sorry about the Enumeration mess | 20:33 | |
are there types where .succ can return, er, nothin? because we've reached the end of the list? | 20:39 | ||
perlpilot | BooK: not sure why you're sorry ... it seems to me that it was slightly neglected area that could cause confusion. Better to find that stuff out sooner rather than later. :-) | ||
BooK | it's still causing confusion :-) | 20:40 | |
AlexDaniel | some of the .pred/.succ stuff I don't understand at all | 20:41 | |
m: say (0.05).pred | |||
camelia | -0.95 | ||
geekosaur | oh boy, we borrowed one from haskell >.> | 20:42 | |
basically numeric types treat succ/pred as +/-1 | 20:43 | ||
because there's some question as to what it means otherwise for non-integrals | |||
BooK | give me the Real immediately following Ļ! | 20:49 | |
or 0, for that matter | |||
AlexDaniel | .oO( 9e99.succ ) |
21:01 | |
doesn't work either way :D | 21:02 | ||
BooK | one possibly useful enum would be Errno | 21:04 | |
timo | do it like javascript: turn the number into scientific notation and just increment the last number you find | 21:08 | |
BooK | how do we get the 2 out of No such file or directory when doing IO::Path.new("not-there").slurp ? | 21:09 | |
it seems we just get a X::AdHoc with the message | |||
timo | the 2? | 21:10 | |
BooK | errno = 2 | ||
timo | oh, i don't see that | ||
BooK | the Perl 5 $! is a dual var that is the errno value in numerical context, and the error message in string context | 21:11 | |
also, with use locale, the message is localized | |||
I know $! is much different in perl6, but I was wondering if we'd have access to the same kind of goodies | 21:12 | ||
timo | oh, you want to get the underlying errno | 21:14 | |
i'm not sure where the text comes from, actually | 21:15 | ||
ah, yes, moarvm uses strerror for that | 21:17 | ||
i thought that's supposed to respect LC_ALL and friends? | 21:18 | ||
BooK | yes | 21:21 | |
in Perl5, you only get localized messages if you explicted say "use locale" | |||
timo | yeah, but this is C | 21:22 | |
BooK | and? | 21:23 | |
I mean, it could be useful to know when an error comes from down below | 21:24 | ||
timo | and i'm wondering why setting LC_ALL doesn't give me different messages | ||
this is good, though. we can still stringmatch on error messages from "down below" if we want | 21:25 | ||
since they won't be changed just because environment variables are set | |||
BooK | wouldn't it be nicer to match on the enum? | 21:27 | |
like, Errno::ENOENT | |||
Skarsnik | btw no stuff in place to localise errors? | ||
timo | we don't have anything yet to throw structured exceptions from inside the v | 21:28 | |
vm | |||
might actually be simple, come to think of it. we'll just have to have a handler in place that knows how to translate what we throw into the proper HLL structured exceptions | 21:29 | ||
like if we throw hashes that have a "type" key | |||
BooK | also, maybe failing syscalls should return specific exceptions | 21:30 | |
AlexDaniel | lizmat: here? | 21:32 | |
lizmat | am now | 21:42 | |
BooK | AlexDaniel ^^ | 21:45 | |
AlexDaniel | ah, well, I'm almost done submitting a ticket | ||
but maybe you'll have some quick thoughts before I do | |||
lizmat: bisected to github.com/rakudo/rakudo/commit/de...9734798a35 | |||
commit: 2017.08,dea0a08545a^,dea0a08545a,HEAD gist.githubusercontent.com/AlexDan...stfile1.p6 | 21:46 | ||
committable6 | AlexDaniel, Successfully fetched the code from the provided URL. | ||
AlexDaniel, Ā¦2017.08,dea0a08545a^: Ā«30ā¤30Ā» Ā¦dea0a08,HEAD(ac8e099): Ā«(Int)ā¤30Ā» | |||
AlexDaniel | that's golfed from Automata::Cellular tests | ||
lizmat | so what is that supposed to say ? | 21:48 | |
AlexDaniel | lizmat: honestly, I understand that question as much as I understand BUILDPLAN changesā¦ | 21:49 | |
lizmat | I get (Int) 30 for that piece of code, is it supposed to get something else ? | 21:50 | |
AlexDaniel | 30 30 | ||
commit: 2017.08 gist.githubusercontent.com/AlexDan...stfile1.p6 | |||
committable6 | AlexDaniel, Successfully fetched the code from the provided URL. | ||
AlexDaniel, Ā¦2017.08: Ā«30ā¤30Ā» | |||
lizmat | aha | 21:51 | |
ok | |||
ok, I see what the problem is | 21:53 | ||
could you please add that golf as a test? | 21:54 | ||
I will revert the necessary commits | |||
AlexDaniel | in 30 minutes, yeah | ||
timo | dang, i thought i was satisfied with my grant application, but now it seems pretty bad :S | 21:56 | |
Geth | rakudo/nom: 3de6f33887 | (Elizabeth Mattijsen)++ | 2 files Revert streamlining of BUILDPLAN - this reverts a8e0352b0358ad3ca99335d dea0a08545ab172836f9 - defaults can refer to something being initialized later - so merging the actions into a single action does not cut it :-( |
||
BooK | timo: you need some proofreaders? | 21:57 | |
AlexDaniel | lizmat: :( the amount of work being reverted | ||
lizmat | yeah, that's about 2 days of work | 21:58 | |
but I learned a lot :-) | |||
AlexDaniel | Skarsnik++ # running toaster | ||
timo | i'd appreciate a look; the current worry is that it's unintellegible to outsiders | ||
which is ironic given that the task i'm giving myself is to make the whole thing simpler to understand for outsiders | |||
BooK | well, I think I qualify as an outsider :-) | ||
timo | docs.google.com/document/d/102h_Nl...3yfI/edit# - BooK, here's the text | 21:59 | |
AlexDaniel | timo: I'm an outsider, where's the link? :) But I'm in the middle of evā¦ | ||
ah ok | |||
timo | what ev is this? | ||
AlexDaniel | of everything actually. The multitasking is killing me | 22:09 | |
timo | mhm | ||
AlexDaniel | lizmat: what would be the best place for this test? somewhere in S14-roles? | ||
lizmat | yeah, sounds right | 22:10 | |
AlexDaniel | or maybe S12-construction | ||
lizmat | that also sounds like a good place | 22:13 | |
Geth | rakudo/nom: ce95e1628c | (Elizabeth Mattijsen)++ | src/core/Enumeration.pm Revert "Give enums an iterator" This reverts commit cc64a75842236de43b7874578b289f6fcd292c97. This appears to at least be given more thought. So at least reverting before the release. |
22:23 | |
AlexDaniel | lizmat++ | 22:24 | |
Skarsnik | releasable6, status | 22:29 | |
releasable6 | Skarsnik, Next release in ā20 hours. 2 blockers. 122 out of 154 commits logged | ||
Skarsnik, Details: gist.github.com/ff2c367a108398d3c2...350f0f68a4 | |||
Skarsnik | will run toaster tomorrow again if you want | 22:30 | |
AlexDaniel | thanks | 22:31 | |
Geth | roast: 9741b1b3bc | (Aleks-Daniel Jakimenko-Aleksejev)++ | S14-roles/basic.t Add a test for the BUILDPLAN regression |
22:36 | |
AlexDaniel | lizmat: there :) | ||
not really ābasicā but that will do I guess | |||
lizmat | AlexDaniel++ | ||
AlexDaniel | d'oh, I didn't mean to use unicode quotes there /o\ | 22:37 | |
but now grepping through the roast it seems that I'm not the only one who did that. OK | 22:38 | ||
MasterDuke | timo: 25 euro / hour seems low, i'd suggest increasing that quite a bit | 22:39 | |
timo | i'm supposed to ask for even more moneys? | 22:43 | |
MasterDuke | sure | 22:44 | |
timo | how is TPF supposed to greenlight such a big request? | ||
MasterDuke | do they have a limit? | ||
timo | and how much would you consider "quite a bit"? | ||
their upper limit is 10k dollars | 22:45 | ||
MasterDuke | then 10k | ||
timo | i'm not sure i can provide work that's worth this much money? | ||
AlexDaniel | I believe in you | 22:46 | |
MasterDuke | you're proposing to do a lot of work, you should get appropriately compensated | ||
BooK | timo: is it easily splittable? | ||
MasterDuke | that's a good idea too | 22:47 | |
timo | BooK: tricky, i was thinking about that, too | ||
BooK | so you build confidence (and trust) in succeeding at a smaller first step | ||
timo | yeah | ||
if i only offer to build the web interface for the heap snapshot explorer and a new regular-profiler-UI, that'd cut down on the time noticably | 22:48 | ||
BooK | what was that thing that the rakudo people used to do? ah, yes, under promise and over deliver | 22:49 | |
timo | hrmpf. ctrl-z doesn't get me back the time estimates i had in the inchstone list | ||
hah, i wasn't part of the rakudo crew when most of the underpromising and overdelivering happened | |||
but when i remove significant chunks of this, the "useful for outsiders" angle is lost | 22:53 | ||
okay, i'll pivot and make this about a new profiler UI that doesn't explode your browser if your program is more complicated than hello world :P | 22:56 | ||
plus integration for the heap snapshot analyzer | |||
MasterDuke | eh, everybody likes profilers. you don't have to be a core dev to want to know where to speed up your program | ||
timo++ | |||
.oO(is a timo++ == a timotimo) |
22:57 | ||
geekosaur | doesn't that require banach-tarski? | 22:59 | |
timo | www.youtube.com/watch?v=uFvokQUHh08 | 23:00 | |
oh, potentially nsfw | 23:03 | ||
i wonder if i should pull "make the instrumented profiler threadsafe" into the scope | 23:11 | ||
thing is, i'm entirely unsure how much time that will take | 23:14 | ||
it could be it's just tens of lines of code in moarvm to make it work and then a bunch of time spent in the profiler to make it understand multiple threads | 23:15 | ||
really, just focusing on making a new profiler UI that's also good at all the multithreading stuff we have, that'd be pretty neat | 23:16 | ||
MasterDuke | that would be so nice... | ||
timo | with my new estimates i'm down to only 135 hours | 23:47 | |
wow, there's a big discrepancy of commit counts with git log --all vs only git log when grepping for my name | 23:50 | ||
that means there's many commits i didn't end up merging | |||
MasterDuke_: you think 40 euros makes more sense as per-hour rate? | 23:52 | ||
Geth | roast: 5568a0d63f | (Samantha McVey)++ | 5 files Add tests for testing collation. Tests for the unicmp operator Tests generated with CollationTestGen.p6 |
23:54 | |
samcv | yay collation tests | ||
timo | o/ samcv | ||
MasterDuke_ | yeah. that's just under 50 usd per-hour, which works out to what i believe is a pretty standard yearly rate for software devs | ||
samcv | that was annoying to do. since there are so many damn tests. it takes minutes to run | ||
timo | samcv: time to parallelize %) | ||
samcv | well. i mean it needs to be in order | 23:55 | |
so that was annoying | |||
and i did try, but it didn't really benefit that much, and made it less flexible in the code i could write | |||
timo | ah | 23:56 | |
docs.google.com/document/d/102h_Nl...sp=sharing - would you mind giving my mostly rewritten grant application another look? | |||
MasterDuke_ | timo: but there's a lot of subjectivity in what i just said, so it would probably be smart to get some other opinions as well | ||
timo | MasterDuke_: i think you stopped looking before i rewrote most of this | 23:57 | |
samcv | timo, me? ok i will. i took a glance at it and it looked like great work | ||
timo | yeah, then the application took an arrow to the knee | 23:59 |