»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'perl6: say 3;' or rakudo:, niecza:, std:, or /msg camelia perl6: ... | irclog: irc.perl6.org | UTF-8 is our friend!
Set by sorear on 25 June 2013.
masak wollmers: `unshift %bMatches{$_} for @b[$bmin..$bmax]; $index += $bmax - $bmin + 1;` 00:04
wollmers masak: Why the +1? 00:14
masak because a range that includes both its endpoints will contain one element more than the difference between them. 00:23
masak m: say (10..30).elems 00:24
camelia rakudo-moar 315ec6: OUTPUT«21␤»
wollmers m: my @b = <a b a b>;my %bM;my $i;unshift %bM{$_},$i++ for @b;%bM.perl;
camelia ( no output )
wollmers m: my @b = <a b a b>;my %bM;my $i;unshift %bM{$_},$i++ for @b;%bM.perl.say; 00:25
camelia rakudo-moar 315ec6: OUTPUT«("a" => [2, 0], "b" => [3, 1]).hash␤»
masak oh, right, you actually want to unshift the $i++. sorry :)
wollmers masak: yea. I am sure, there is something more elegant in P6 00:26
masak not so sure.
wollmers Hmm. It goes through a list, and stores the positions of the keys as values. 00:31
wollmers masak: can I combine this in a hash: <a b a b>.kv 00:41
m: <a b a b>.kv.say
camelia rakudo-moar 315ec6: OUTPUT«0 a 1 b 2 a 3 b␤»
masak m: say <a b a b>.pairs.perl 00:42
camelia rakudo-moar 315ec6: OUTPUT«(0 => "a", 1 => "b", 2 => "a", 3 => "b").list␤»
masak m: say <a b a b>.pairs.classify(*.value).perl
camelia rakudo-moar 315ec6: OUTPUT«("b" => [1 => "b", 3 => "b"], "a" => [0 => "a", 2 => "a"]).hash␤»
masak m: say <a b a b>.pairs.classify(*.value).map({; .key => [.value.keys]}).perl 00:43
camelia rakudo-moar 315ec6: OUTPUT«("a" => [0, 1], "b" => [0, 1]).list␤»
wollmers But with ethe letters as key, and the values as arrays.
masak \o/
timotimo actually 01:03
m: say ((my %).push: <a b a b>.pairs).perl
camelia rakudo-moar 315ec6: OUTPUT«("1" => "b", "0" => "a", "2" => "a", "3" => "b").hash␤»
timotimo ah 01:04
m: say ((my %).push: %<a b a b>.invert).perl
camelia rakudo-moar 315ec6: OUTPUT«().hash␤»
timotimo how did that work again
m: say %<a b a b>.perl
camelia rakudo-moar 315ec6: OUTPUT«().hash␤»
timotimo ah, of course
m: say %(<a b a b>).perl
camelia rakudo-moar 315ec6: OUTPUT«("a" => "b").hash␤»
timotimo m: say %(<a b a b>.pairs).perl
camelia rakudo-moar 315ec6: OUTPUT«("1" => "b", "3" => "b", "0" => "a", "2" => "a").hash␤»
timotimo m: say %(<a b a b>.pairs).invert.perl 01:05
camelia rakudo-moar 315ec6: OUTPUT«("a" => "0", "b" => "1", "a" => "2", "b" => "3").list␤»
timotimo m: my %target; %target.push: %(<a b a b>.pairs).invert; say %target
camelia rakudo-moar 315ec6: OUTPUT«"a" => ["0", "2"], "b" => ["1", "3"]␤»
timotimo that's what i meant
dj_goku [Coke]: hi. Yeah I want to add tests to what ingy has downloaded. 01:58
PerlJam got an email today from Mr. Laurence Wall 02:24
colomon PerlJam: ooooo 02:34
dalek rl6-bench/stress: 8fc4746 | (Geoffrey Broadwell)++ | / (2 files):
Add --show-relative analyze option, defaulting to --compare, turned off for diagnosis
03:42
rl6-bench/stress: 63330ac | (Geoffrey Broadwell)++ | lib/Analyze/Summary.pm:
Fix 'showing' subheader to correctly reflect various --show-* options
rl6-bench/stress: 5e2a95b | (Geoffrey Broadwell)++ | analyze:
Improve diagnosis layout in --compare mode
dalek rl6-bench/stress: 83fb590 | (Geoffrey Broadwell)++ | analyze:
Prepare analyze for detection of timeouts
06:18
rl6-bench/stress: a9ba519 | (Geoffrey Broadwell)++ | analyze:
Reorder code slightly for clarity
rl6-bench/stress: 47c5376 | (Geoffrey Broadwell)++ | analyze:
Refactor summarize_results_html_snippet() in preparation for adding failure diagnoses
dalek rl6-bench/stress: 918d15a | (Geoffrey Broadwell)++ | analyze:
Only show summary scores when --show-relative is set, HTML edition
06:36
rl6-bench/stress: 4ba1f4a | (Geoffrey Broadwell)++ | analyze:
Show failure diagnosis icons in HTML output
moritz good morning #perl6 07:21
timotimo hello :) 07:23
lizmat good *, #perl6! moritz timotimo o/ 08:32
timotimo hai liz :)
FROGGS_ morning 08:40
lizmat FROGGS_ \o 08:41
FROGGS_ .tell wollmers It looks like /:P5\X/ is post NFG... because right now "E\c[COMBINING GRAVE ACCENT]" ~~ /./ only matches 'E' 08:59
yoleaux FROGGS_: I'll pass your message to wollmers.
moritz now I wonder -- what's the use case for the m/.../ immediate matching forms? 09:48
for @list { if m/.../ } # would work with rx or / / too, because of boolean context 09:52
m/(.)(.)/; say join '|', $0, $1; # could work with rx or / / if sink context triggers regex matches 09:53
FROGGS_ hmmm, maybe m/../ as the last statement of a routine? 09:55
dalek kudo/nom: 685ee66 | (Elizabeth Mattijsen)++ | src/core/IO/Dir.pm:
Fix dirname/succ/pred
kudo/nom: 86af5ee | (Elizabeth Mattijsen)++ | src/core/IO.pm:
Add MAKE-EXTENSION, fix MAKE-BASENAME
kudo/nom: c466b28 | (Elizabeth Mattijsen)++ | tools/build/ (3 files):
Add IO/Dir.pm to settings
masak hi there, #perl6 11:08
firefish5000 I am trying to figure out subsets. What are they? <my subset Min of Int where (0..60); my Min $min=1; say $min.WHAT;> prints Int, <$min=62;> fails (so its still effective), and <my $b=$a; $b=62;> works (so subsets arn't kept by =, which is unfortunate for my use case), 11:27
masak it's containers that are typed, not their values. 11:28
and subsets are refinement types, not nominal types. 11:29
(so you won't see the subset type when you .WHAT) 11:30
lizmat cycling& 11:31
firefish5000 so since its just the container constrained, copies will be unconstrained, which is why I cannot pass them as arguments and have them work the way I want... 11:32
masak yes, you got it. 11:37
firefish5000 Thanks masak! I would have gone down this route for an eternity without that... 11:39
masak prego. enjoy your Perl 6. 11:40
firefish5000 now as a follow up. Is there a way for me to create a normal type such as <class Min { has Int $.min where (0..60); }; my Min $a; $a = 4;> where some p6 black magic makes $a=4 work like $a.min=4? I have tried overloading '=' for Min, but thats not possible.. 11:43
timotimo mumbles something about box targets 11:44
firefish5000 if anyone says 'no' or 'i don't think so', 90% of my stress from over complicating my p6 to achieve this functionality will be revealed as I just deal with the 4 extra chars... 11:47
timotimo well, Int itself is implemented as having a "has $!int is box_target" attribute 11:49
that makes it possible to nqp::box_i(123, Int)
timotimo (though pretty much all code in rakudo itself should use nqp::p6box_i(123), which gives the Int automatically) 11:49
and many operations will use one of the two Int box types that "come in" to do calculations 11:50
so if you use the minute Int type everywhere, it might just work out
er
i forgot the important part
"has int $!int is box_target" 11:51
and native ints cannot have subsets applied to them
firefish5000 is googleing box targets and enjoying the streamed information throughly 11:52
timotimo i had no idea %) 11:53
firefish5000 thanks timotimo, Ill see what I can do with this and hopefully will be able to put it to good use! (my hate those 4 chars is worth 1000 lines of code, and from a 2min google this looks like it may be done in <100) 11:57
timotimo hmm 11:58
masak so, how do you young'uns connect to SQLite from your Perl 6 code these days?
do you use DBIish?
timotimo i haven't done database stuff with perl 6 yet
but i'd probably just use DBIish
masak will try this 11:59
masak I am now at a point where a hobby project takes about an hour just to start up, mostly because it's building a data model. 11:59
I figure if I put some of this in a db, the boot sequence will be faster :)
timotimo oh wow 12:01
well, we should still become faster 12:02
but yeah ... db is your friend
masak it's a really data-heavy thing I'm doing.
timotimo so i was thinking of how to model unions for NativeCall
timotimo one way seems to be to create a new REPR, but that sounds quite iffy 12:03
another way is to have an "is union" trait on classes that can set a "create a union" flag in the repr_data, which requires changing Metamodel::ClassHOW, which seems iffy, too
with an ExportHOW i could perhaps create a "cunion" keyword that'd do a whole lot of magic for creating dummy attributes so that the resulting CStruct is big enough and for each class you put into it it'd create an accessor that'd cast and return self 12:05
that kind of sounds not too terrible
it's still pretty annoying to cast CStructs into other CStructs 12:06
another thing i thought about for the particular use case of SDL_Event is this: 12:07
every SDL_Event has an int32 type and an int32 timestamp at the start and then there's more stuff following it
so if CStruct would actually implement change_type, it could be "casted" like this: 12:08
have a role that contains the extra attributes
and a cast would just be return self but SDL_MouseButtonEventAttributeRole
that's kind of neat, but has its problems, as well
timotimo like if you .= new your own SDL_Event - which is what you do before you SDL_PollEvent - it'd only have space for the beginning and everything after that would be writing/reading garbage memory 12:09
timotimo i suspect it'd be the best thing to teach nativecallcast about casting CStruct into something; currently it just complains that it expects a CPointer REPR'd thing 12:13
moritz note to self: the day after halloween is a holiday. Not good for shopping. 13:10
timotimo interesting 13:22
my code is causing MVM to try to free() the string data for a piece of string data that wasn't malloc'd 13:23
that string is "$OUT" ... i have no clue where my program found that
moritz the setting uses '$OUT' for initializing '$*OUT', iirc 13:27
PROCESS::<$OUT> = ...; 13:28
timotimo that would mean it comes from the string heap? 13:30
moritz I have no idea; just speculating wildly 13:31
timotimo it does smell a lot like memory corruption. 13:31
moritz oh fun, mk.de is down (and all their network lines, which they lend to others) 13:32
isBEKaml moritz: what's mk.de? 13:47
I'm guessing ISP of some sort?
timotimo interesting 13:59
the problem occurs even when i'm not using nativecallcast at all ... and it also occurs if i revert the latest commit to moarvm
masak quiet in here today. 15:36
timotimo mhm 15:39
i'm having a hard time trying to motivate myself to hunt that memory corruption look-alike
moritz timotimo: I promise you a cookie for a fix 15:44
timotimo how am i supposed to fix such a stupid thing like that? :( 15:47
moritz timotimo: ok, I promise you two cookies
timotimo i can feel the problem become easier 15:48
moritz timotimo: what kinds of cookies do you like? 15:49
timotimo i like many kinds of cookies
moritz timotimo: www.amazon.de/Bahlsen-Selection-1er...000FWHWEU/ :-) 15:51
timotimo that *is* a "many kinds of cookies" kind of thing :D 15:52
moritz and it's more than two cookies too 15:53
timotimo :)
moritz timotimo: sudo feel motivated :-) 15:54
timotimo hah 15:54
well, i've already reproduced the bug on my desktop, so there's that
timotimo oh, wait ... if it says "freed by thread T0 here:" followed by "==31298== AddressSanitizer CHECK failed: ../../../../libsanitizer/sanitizer_common/sanitizer_stackdepot.cc:182 "((id & (1u << 31))) == ((0))" (0x80000000, 0x0)" ... 15:55
moritz just made one commit so far today 15:56
timotimo does that mean it tries to double-free? or did that error get triggered while trying to show the error properly?
timotimo oh! someone could have told me that you need the llvm-symbolizer binary to get symbols resolved in asan stack traces 15:59
-fno-omit-frame-pointer and --debug=3 is not enough
timotimo er ... except i already have that installed and i still only get memory addresses 16:00
dalek rl6-bench/stress: 2cb1967 | (Geoffrey Broadwell)++ | analyze:
Non-plot HTML pages are UTF-8 too
16:07
rl6-bench/stress: 2dbd21e | (Geoffrey Broadwell)++ | analyze:
Reduce visual noise by de-emphasizing the icon for successful runs
raydiak good morning #perl6 16:17
timotimo hey ray :) 16:18
moritz: what if the memory error is just from passing incorrectly sized structs to SDL's functions? 16:20
valgrind apparently has trouble following our function pointers around for REPRops 16:21
FROGGS_ timotimo: can we already profile stuff that has an exit in it? 16:24
timotimo i've figured out how to do it, but it looked too wrong to be committed ... 16:25
FROGGS_ ahh, hmmm
TimToady moritz: re irclog.perlgeek.de/perl6/2014-10-31#i_9594588 I'd say s/generic/specific/ is incorrect.
timotimo basically you nqp::gethllsymbol('perl6', '@END_PHASERS') or what it's called
and .push a little closure in there that does the dump_profile_info
that would go into rakudo's HLL Backend 16:26
FROGGS_ timotimo: okay, I add that now temporarily to profile cpandatesters :o)
timotimo++
timotimo :)
wow. 16:27
my SDL_Event struct is 56 bit big. it needs to be 56 bytes.
that's why SDL is writing outside of malloc'd space
FROGGS_ ohh, heh 16:28
timotimo i quite competently calculated what combination of 64 bit, 32 bit, 16 bit and 8 bit integers i'd have to put in there so that it'd be the "right size"
except int64 is 64 bits, not bytes big ...
moritz just a factor 8 off :-) 16:29
timotimo yup
timotimo *nice* 16:32
now i got an empty window that i can close by clicking the window decoration's close button
and the only valgrind messages i get come from inside libnvidia-glcore 16:33
FROGGS_ that sounds good!
dalek rlito: 2aa46bf | (Flavio S. Glock)++ | / (2 files):
Perlito5 - js - fix context propagation in if()
TimToady timotimo: I don't see offhand why unboxed types cannot have constraints enforced at the time they are stored; after all, something like int16 is constrained to 16 bits, even if the actual storage is wider. native constraints "merely" have to be enforced by the compiler rather than the runtime, using knowledge stored somewhere outside the native 16:39
much like C knows whether you're using a foo** or a bar*, but it's still just a native pointer 16:40
TimToady or to look at another way, native assignment merely has to inline the appropriate assignment code 16:51
"merely", I mean :)
but that's why C has to be so picky about knowing the difference between an lvalue and an rvalue at compile time 16:53
timotimo mhm mhm 16:54
TimToady I suspect this is part of what jnthn++ is mulling over subconsciously while he's hiking around :)
vendethiel well met, #perl6. 16:55
FROGGS_ hi vendethiel
timotimo hey ven 16:57
did you know that if you malloc a 56 bit wide area and give it to SDL2's event polling function, which expects a 56 byte wide area to write all over, there'll be trouble?
FROGGS_ SDL2 is a bit picky, that's for sure 16:58
timotimo FROGGS_: how can you call that sdl2 being picky? %) 16:59
FROGGS_ ohh, is it byte picky instead? :o) 17:00
timotimo yeah
that must be it
.o( now that i get it ... it's funny )
dalek p: 05cb90e | (Tobias Leich)++ | src/vm/moar/HLL/Backend.nqp:
also write profiler output when rakudo exit()s

  timotimo++ for the proposed patch.
17:02
TimToady
.oO(obviously C needs better constraint checking on its native types...)
17:05
timotimo turns out the struct i built wasn't even 56bit big, it was 120 bit big 17:06
i wonder how i reached the conclusion that that would be the right size 17:07
but it was pretty late at night, so at least i have an excuse - sort of
vendethiel timotimo, I did know that, yes 17:10
timotimo well then why didn't you tell me? :\ 17:11
vendethiel C is like "if I fit, I sit, otherwise LOL mate".
timotimo well, it did fit
there was just something else that it had to partially sit upon ...
FROGGS_ eww, I got a 17MB profile from my cpandatesters run >.< 17:12
timotimo yup, that's how our profiler does it 17:13
let me dig out my partial patch that cuts down on size but also sadly makes the results wrong
maybe you can fix it? :)
remotes/origin/finite_callgraph_depth 17:14
please have a look at that :)
timotimo i'm definitely looking forward to native shaped arrays; that's going to give us flattened arrays in CStruct almost immediately 17:20
raydiak so I've seen people talking about cpan and perl 6...should I be worried about making p6 modules with the same names as p5 modules? 17:29
timotimo nope, no worries there 17:29
raydiak cuz math::symbolic is almost ready to go up, but it's not yet a faint glimmer of p5's math::symbolic, I almost felt bad for naming it the same when I saw it :) 17:30
timotimo in that case, just call it Math::Symbolish :P
raydiak heh not that bad 17:31
raydiak how's it goin anyway timo? working on anything interesting today? 17:33
timotimo my current focus is SDL2 bindings 17:34
raydiak awesome!
timotimo afk for a tiny bit &
timotimo and you? anything besides math::symbolic keeping you busy? 17:43
raydiak I'm procrastinating walking/bussing half way across town in the rain to jack up my g/f's car and carry the flat tire w/wheel to the nearest gas station and pray it holds air :P 17:44
timotimo oh my 17:45
i had b0rked my car recently, too
raydiak ah, sorry to hear it...you okay? the car? 17:45
timotimo yeah, it was only damage to the autobody 17:46
happened at very low speeds
raydiak one time I rear-ended a truck in an entry-level new car at like 5 mph and half the engine compartment crumpled up like an accordian
gotta love them crumple zones 17:47
timotimo :o
that doesn't sound so good
also, that sounds like it'd be very expensive to repair
raydiak was just body stuff mostly, didn't total it...drove it a couple blocks home, hanging my head out the window so I could see around the hood
timotimo d'oh
i only lost the bumper 17:48
it was hanging on by one of the light's cables, so before i could drive it away "to safety" i had to unscrew the light using one of my keys :S
cars can be fun
raydiak hah yes they can
I've learned a *ton* about physics just from learning about cars, too 17:49
timotimo oh, yeah
i recently went karting with friends and i was kind of disappointed that all the stuff i learned from my dad, who's big into racing simulation games, wasn't enough to make my performance stand out :| 17:50
raydiak I haven't really done any kind of competitive driving 17:51
except a little fling with need for speed once in a while 17:52
timotimo ah, you were considering "simulated driving" in that description, too 17:52
raydiak I have done a *ton* of fixing (and breaking)
timotimo i think i've been karting twice in my life so far; once with regular combustion engines and recently with electric karts 17:53
electric karts are way cool.
raydiak oh I'll bet...weird to have all the torque right from the start?
timotimo didn't feel weird; not entirely sure why, though 17:55
raydiak wI've always wanted to try an electric car, a car w/a cvt, and a rotary mazda, to see what they feel like 17:56
timotimo i know neither what a cvt nor a rotary mazda is :\ 17:57
raydiak cvt=continuously variable transmission, no discreet "1st", "2nd", "3rd" gear
timotimo ah 17:58
liz and wendy took me to APW in their plug-in prius
raydiak and mazda has made some cars with rotary engines, which don't have pistons 17:59
raydiak instead it's this weird sort of "triangle spinning in an oval" shape 17:59
timotimo en.wikipedia.org/wiki/Wankel_engine - like this one?
raydiak yeah that one!
I knew there was a more specific term I wasn't remembering 18:00
timotimo i always thought wankel engines were really neat 18:01
but i never saw one in action
raydiak I hear they love to accelerate...almost no reciprocating mass, very well-balanced, high redline, wide powerband
poor fuel economy b/c of a low compression ratio, but that means they probably do well with turbo/supercharging 18:02
timotimo mhm
i'd love to own a tesla one day
or at least drive
raydiak yeah no kidding 18:03
timotimo i've seen a quite big amount of charging stations all around the city
raydiak haven't seen any here yet
though tbh if I had a bunch of money and wanted a nice car, I'd rather have a lotus than most other things...they tend to be crazy light, good fuel economy and power-weight ratio 18:06
not that expensive either, by comparison to most other "exotic" brands
entry-level elise was like $60k US last time I looked 18:07
timotimo what's missing in the entry-level ones? 18:08
raydiak but I got a few years to worry about how to bankroll my midlife crisis yet :)
no supercharger, for one
raydiak or was it a turbo on the exige? I forget, either way, naturally aspirated 18:08
timotimo i wouldn't accept a car that doesn't have air conditioning and heating, for example
raydiak not sure if the bottom-end elise has limited-slip or not, either 18:09
timotimo to me, a "supercharger" is the thing that you can charge your car very quickly with 18:09
raydiak I don't use A/C, but I'd be surprised if it has no heat
hehe
japhb raydiak: Back in the 80's my dad had a rotary-engine sports car. The acceleration was indeed amazing. It had an auditory readline, because you might not notice you were hitting it.
timotimo i kind of sort of know what a turbo is
... a readline? 18:10
japhb redline
raydiak the way the slang around here goes, turbo is forced-induction (air pump in your intake) powered by the exhaust flow, while supercharger is belt-driven
japhb Clearly you know which one I type more often
raydiak japhb: nice :) I'm jealous
timotimo oh, redline is the point where your rpm is too high?
japhb timotimo: yeah
timotimo OK
raydiak yeah past that you're risking immediate internal engine damage 18:11
TimToady the redline on a rotary was up like 6-7000 rpm, iirc
timotimo mhm
raydiak though many engines make peak power below their redline anyway
raydiak hm, 7k isn't much higher than many piston engines 18:12
TimToady the three main problems with rotaries were: seals, efficiency, and emissions
well, back in the day, was more like 3000 for most pistons 18:13
materials have improved :)
raydiak when was this? :)
TimToady back when you added more cylinders, not more rpms :) 18:13
japhb From the WP article on the Mazda RX-7: "Because of the smoothness inherent in the Wankel rotary engine, little vibration or harshness was experienced at high engine speeds, so a buzzer was fitted to the tachometer to warn the driver when the 7,000 rpm redline was approaching."
raydiak ah, before my time :) 18:14
japhb: hah that's awesome
guess the limiting factor for a rotary is burning the seals or something, then? 18:15
japhb There was a running joke that only Mazda mass-produced them, because they were the only ones that had figured out how to seal them well enough. 18:16
TimToady well, the center of mass of the rotor does move around some, so you still get some vibrational effects, just less than in a piston engine 18:16
TimToady there was also a diesel wankel that had more lobes 18:17
raydiak there was?
TimToady german, not japanese, iirc
japhb There's also a story that when they first came out they caused some issues in racing competitions because they produced so much more power for unit displacement and engine weight, so rules had to be refined to place them off in their own bracket.
TimToady then there was the episode of turbines at Indy... 18:18
japhb Oh dear, I can imagine that being ... spectacular.
And not in a "I want to be in that car" sense
TimToady I think they basically outlawed them by limiting air intake
japhb dislikes the fact that so many racing competitions deal with real innovation by disallowing it. 18:19
My uncle (an avid race fan) tells me of when active aerodynamics first came out, and cars that could turn their spoiler into an air brake started lapping cars that didn't ... so they disallowed that. I would like to have seen that kind of thing in my day, rather than what frankly looks like slot cars sometimes. 18:21
raydiak I had a co-worker tell me about some guy way back that affixed huge fans or something to the bottom of his car for downforce, b/c there wasn't a rule against it 18:22
idk where or what sort of racing he was talking about 18:23
japhb The rules of modern downforce boggle me -- "If you don't enter that corner going FAST ENOUGH, you'll lose traction" 18:24
kurahaupo japhb: rumour has it the Mazda put an RX7 engine on a test bench and ran it up to something like seven times the official redline rpm
japhb woah 18:25
BenGoldberg Another problem with mazda's (early) rotary engines was how they dealt with emmissions... to get rid of unburnt hydrocarbons in the exhaust, they decided to just throw a bit of air and fuel into the exhaust, and burn it. This was *just* before fuel economy requirements went up, which was unfortunate for them.
Modern rotarys use extra spark plugs, to fully burn the fuel inside the engine, to avoid that problem. 18:26
japhb Yeah, dad's car got like 14 MPG. But they were very fun miles. :-)
Ulti if I have a sub with two typed parameters and pass in a list as the arguments with two elements how can I get that to match the sub?
japhb
.oO( Oh no, on topic conversation! )
timotimo fun miles and likely also cheap gallons
BenGoldberg Ulti, typed parameters? Using Moose, or what?
Ulti o___O using Perl6 18:27
timotimo Ulti: sounds like you'd my_sub(|@foo)
BenGoldberg Erps, wrong channel ;)
BenGoldberg feels silly, now.
japhb m: sub foo(Int $a, Str $b) { say "$a $b" }; my @a = (1, 'bar'); foo(|@a);
Ulti sub add (int $a, int $b --> int) {$a+$b} and then add(@args)
camelia rakudo-moar 315ec6: OUTPUT«1 bar␤»
Ulti timotimo: aha!
I tried @args[*] living in hope 18:28
japhb Ulti: Is what I sent what you meant?
Ulti yeah
thanks
timotimo Ulti: well, that's already syntax for "the element after the last element"
japhb OK, cool
ugator reading S09#Compact_structs: I wonder if it's possible to translate strongly typed code directly into C - for specific operators, loops or simiar? 18:29
*similar
timotimo ugator: MoarVM's jit will come very close 18:29
TimToady timotimo: * by itself is not a closure
timotimo oh
TimToady so @args[*] is just all the values
@args[*-0] is the one beyond the end 18:30
Ulti ha! now I have the inverse problem that the one with @args isnt *@args
timotimo mhm mhm
ugator timotimo: in terms of speed too? that would be a huge thing?! 18:30
timotimo ugator: we hope! :) 18:31
ugator :-))
timotimo perl6 classes with native attributes are already only a bit more expensive than a regular struct would be
Ulti oh wow adding typed information to that recent benchmark with the ast makes it incredibly slow 18:32
x___X
timotimo but our jit is currently not clever enough to avoid reading from and writing to the stack before and after every single op
raydiak okay, thanks for the chat this morning everyone, I feel prepared to go tackle my g/f's car now...catch you all later :) 18:33
TimToady
.oO(Car Talk)
timotimo good luck!
maybe you'll be able to replace her engine with a wankel engine now? :) 18:34
raydiak would rather replace it with a horse at this point :)
TimToady which is sort of the flip side of #perl6, insofar as it's two guys doing a car talk show where nothing is OT
japhb Ulti: Type information both helps and hurts: Enforcing constraints constantly is slow, but with the constraints in place, the optimizer can be smarter about the compiled code. It just so happens that right now usually for object types the constraint checking wins, and for native types the optimization wins. Especially when the JIT kicks in. 18:35
raydiak hahaha
okay really gone now o/
timotimo i think type checking is often expensive
Ulti: it may be the case that you're getting poor performance due to slurpy arguments, though
Ulti I think the problem is that benchmark is all anon subs?
Ulti timotimo: I just added the slurpy argument to one of them to avoid the implicit slurpy of the untyped subs everywhere 18:36
timotimo i've noticed a huge amount of code objects being created from the clone method from these anon subs
er
Ulti oh I tell a lie!!
timotimo surely you mean @_[0] and @_[1]?
japhb Methinks an idiomatic version of that benchmark (the same was as was done for Go) would make it much, much faster (the same way as for Go). Use the language the way it's most often used, and you'll tend to hit the optimized paths. 18:37
Ulti the native typed code with fixed numbers of arguments takes 88 seconds rather than 111
timotimo because we don't have implicit slurpy arguments; you have to explicitly refer to @_ for them to appear
Ulti not exactly incredible but also essentially the same code
timotimo yeah, i've observed something similar
also using Num instead of Rat gives a little speed boost as well
Ulti still 12% for just specifying type information... kind of cool
japhb timotimo: Why not num instead of Num? 18:38
Ulti yeah this was all num
timotimo japhb: might as well 18:39
gist.github.com/timo/2d2cc1260428e5758086 - this is how i patched it recently
Ulti though I think the benchmark is specifically testing this horrible case with just passing in a list and accessing it 18:40
timotimo yeah
Ulti since the Go and everything else is written that way even when it is really gross 18:40
timotimo well, if the code doesn't pass arrays as args around any more, it might as well use the built-in +, -, * and / operators 18:41
japhb But, but, they call out the idiomatic Go as well. And it's an order of magnitude faster. 18:43
Ulti oh I also changed the total sum to use [+] not sure that is better
the idiomatic Perl6 wouldnt even implement the AST that way though :/ 18:44
we'd have a grammar to define a whole sublanguage or something right >:3 18:45
timotimo Ulti: to be honest, the AST representation is just fine; this is *after* any grammar or similar would have run 18:48
BenGoldberg How much speed difference is there between @ast[$i] and @ast.at_pos($i)? 18:51
timotimo a bit. one has to do a range check and defer to the other
BenGoldberg Would it be faster, or slower, to loop over @ast[ 1 .. @ ], and get rid of $i entirely? 18:53
Err, @ast[ 1 .. * ]
timotimo i tried to have @ast is copy and shift off the first element and then iterate over the whole list 18:54
that seemed a lot slower
timotimo how come uint8 doesn't work in native calls? :\ 18:57
dalek rl6-bench/stress: 8e2d9f9 | (Geoffrey Broadwell)++ | analyze:
Add simple HTML hover text with a couple diagnostic details
19:06
timotimo i'm back :) 20:24
even though i don't think anybody noticed i was gone
masak moritz: I saw this and thought of you: lesswrong.com/lw/l16/2014_iterated_...t_results/ 20:29
FROGGS__ wow, now I cpandatesters is almost fast... I compile the templates on one now 20:34
(which is not the default when using Bailador)
timotimo "on one"?
FROGGS__ only once
sorry
timotimo aaah
masak moritz: it's an interesting twist for a bot to be able to run its opponent. :> 20:34
timotimo almost fast, eh? we still got some way to go 20:35
FROGGS__: could you make anything of the branch that tries to limit the depth of the call stack for the profiler?
FROGGS__ timotimo: no, because I've got profile atm that are almost usable... so I didn't try your branch :/ 20:36
[Coke] kk 20:37
dalek href="https://cpandatesters.perl6.org:">cpandatesters.perl6.org: 2e7cae9 | (Tobias Leich)++ | app.pl:
compile templates once at startup
20:39
href="https://cpandatesters.perl6.org:">cpandatesters.perl6.org: b25f577 | (Tobias Leich)++ | app.pl:
allow binding to a specific ip address
20:40
timotimo :( 20:44
raydiak yay back home and out of the rain, and the tire seems to hold air after bouncing it around to re-seat the bead \o/ 20:50
timotimo bounce it to the beat to re-seat the bead 20:52
dalek href="https://cpandatesters.perl6.org:">cpandatesters.perl6.org: 1bcdea1 | (Tobias Leich)++ | setup/cpandatesters_pg.sql:
update prostgres schema (serial,varchar)
21:00
dalek href="https://cpandatesters.perl6.org:">cpandatesters.perl6.org: 00cc706 | (Tobias Leich)++ | setup/cpandatesters_pg.sql:
add column "grade"
21:07
raydiak is there a way to overload operations on a class besides exporting subs? i.e. so it still works when the object is passed into a namespace that doesn't directly use my module, so doesn't import 21:09
or would that be considered "spooky action at a distance"?
timotimo there's a mechanism for that 21:10
NYI, though
raydiak ah, glad I asked before digging in to that one, then :) thanks timotimo++ 21:11
dalek href="https://cpandatesters.perl6.org:">cpandatesters.perl6.org: 3240e6e | (Tobias Leich)++ | app.pl:
switch from mysql to postgresql
21:14
timotimo kind of "import operators from the caller's scope" 21:15
raydiak it's fun to rip pieces of conversation out of context: "spooky action at a distance? there's a mechanism for that" 21:16
timotimo :)
raydiak huh...my first thought was a way to say it with methods instead of subs 21:17
raydiak but then I guess every operator has to check for the existence of special methods on its arguments 21:18
dalek volaj: 7687ca0 | (Salve J. Nilsen)++ | README.markdown:
Fix typo in SQL
volaj: 1b220a2 | (Tobias Leich)++ | README.markdown:
Merge pull request #50 from sjn/master

Fix typo in SQL
revlin perl6: say 3; 21:22
camelia rakudo-{parrot,moar} 315ec6: OUTPUT«3␤»
revlin Anyone aware of some interest in developing a language-to-language compiler: Perl6 to asm.js? 21:26
BenGoldberg There're always interest in porting perl6 to new backends. 21:27
revlin Is this the place to follow such interest or is there another pond I should be fishing in? 21:27
BenGoldberg This is the place for it. 21:28
revlin cool
raydiak didn't someone start some sort of js backend?
BenGoldberg perlito
timotimo forget perlito
we are getting a rakudo-js
BenGoldberg ooh
revlin can I search rakudo-js and find anything?
ah, on github 21:29
it uses NQP
timotimo it's a javascript backend for nqp right now 21:30
but when you have a complete nqp backend for something, you're quite close to a rakudo backend
revlin that's cool.
What I actually had in mind was writing an app in Perl(6), which compiles down to the asm.js subset to be run client side 21:31
asmjs.org/spec/latest/
timotimo perl6 doesn't lend itself to be compiled to asm.js ... at least at compile time
revlin I'm not new to Perl, but am just starting to read about Perl 6... what does it lend itself to? 21:33
timotimo compiling to js is fine
we don't compile down to machine code - although MoarVM has a JIT compiler
you'd need an AOT compiler to output asm.js instead
revlin k, I need to read a bit more before I can have an intelligible conversation about this 21:35
revlin now figuring out what a Parrot Virtual machines is, so I can better understand rakudo 21:35
timotimo you can pretty much ignore parrot nowadays :\ 21:36
revlin ignore? Is MoarVM the active development stream? 21:37
raydiak aye
masak pretty much.
timotimo you can say that, yes
moarvm and the jvm backend, too
revlin K, thanks. I will read about that instead.
timotimo feel free to approach us with any questions you have :) 21:38
revlin Is perlito also a "dead end"?
thx
FROGGS__ perlito's goal is just to support a subset... dunno if these are your plans too 21:39
timotimo i heard fglock considers the perl6 part of perlito to be done 21:39
FROGGS to support more than a subset you basically *have to* use/port rakudo
timotimo or build your own compiler :) 21:40
revlin no plans, as of yet. I love Perl, but spend most of my days in JS. Mojolicious is really cool, but looking for more signs indicating Perl's future
FROGGS sure... and in twenty years... :o)
tony-o in twenty years we're in here asking FROGGS about perl7 21:41
FROGGS hehe
I don't think so :o)
tony-o haha 21:42
raydiak revlin: perhaps this highlights troubles you might run in to? 21:46
"Unlike nqp-rx, which aimed to have almost no runtime component whatsoever, this new version of NQP accepts that a minimal Perl 6 object metamodel, multidispatcher, and regular expression engine are needed on top of the underlying virtual machine."
revlin raydiak: problems I might run into if trying to build my own compiler? 21:48
raydiak revlin: yeah, looks like those are some of the key points of trouble others have run in to 21:49
I don't know much about it and am not a language implementor, but it looked relevant
revlin I'm just fact-finding. I want to use Perl in full-stack web development, so just exploring different possibilities for doing that 21:50
masak ooh. Dylan has a macro called `block`, which is used to implement "nonstandard flow of control". neat. 21:51
which means that they don't need a special mechanism for `last`, for example, because `block` can already do that. 21:52
opendylan.org/books/drm/Statement_Macros#block
revlin thanks for the pointers, folks :) 21:53
raydiak saw something called tao3d mentioned on /. today...noticed it claimed "It makes it very easy to create new control structures. Defining if-then-else is literally a couple of lines of code." 21:55
masak raydiak: interesting. I was just reading about a language called 3D, in connection with metacircularity. 22:13
'night, #perl6
raydiak g'night masak o/ 22:14
moritz masak: thanks for the prisoner's dilemma link, and good night 22:41
dalek kudo/nom: e46b2f4 | (Elizabeth Mattijsen)++ | src/core/IO.pm:
More primitives
22:48
kudo/nom: 930bb08 | (Elizabeth Mattijsen)++ | src/core/IO/Dir.pm:
Use new MAKE-CLEAN-PARTS primitive
psch hi #perl6 o/ 22:56
raydiak \o psch
psch grammars are my newest hammer. i hit a (very limited) assembly with it.
hey raydiak o/ 22:57
although i still feel like grammars are lacking something, which means i probably don't understand something about them yet
i.e. when wanting to match things that can be specified from outside. .parse(:rule<...>, :args<...>) still seems unfinished 22:58
i'm helping myself with dynamics, which feels a bit too global-ish 22:59
the improved cli parsing as well as the little assembler i wrote both suffer from that, FSVO suffer
lines like this one: github.com/rakudo/rakudo/pull/324/...4a98650R90 23:01
psch i also think i'm missing something re: the difference between WhateverCode and blocks with placeholders 23:31
m: say { :16($^a) }('ff') # works
camelia rakudo-moar 315ec6: OUTPUT«255␤»
psch m: say (:16(*))('ff') # doesn't
camelia rakudo-moar 315ec6: OUTPUT«Cannot call 'UNBASE'; none of these signatures match:␤:(Int:D $base, Cool:D $num)␤:(Int:D $base, Str:D $str)␤ in block <unit> at /tmp/RbNH1gh1IY:1␤␤»
psch m: say { :16(*) }('ff') # neither
camelia rakudo-moar 315ec6: OUTPUT«Cannot call 'UNBASE'; none of these signatures match:␤:(Int:D $base, Cool:D $num)␤:(Int:D $base, Str:D $str)␤ in block <unit> at /tmp/b7gV9PMaiT:1␤␤»
psch maybe it's not Whatever vs placeholder but colon-pair--as--UNBASE... 23:32
sjn wonders what "To compile on the MoarVM backend, QAST::VM must have an alternative 'moar' or 'moarop'" means
sjn is using rakudobuild, fwiw 23:33
psch sjn: google against the clog suggests some module might be lagging behind. i'm not sure 23:39
fwiw, i built nom HEAD without rakudobrew cleanly a few minutes ago. i won't build with rakudobrew 'cause i'm low on bandwidth... :)
sjn just rebuilt both moar_jit-HEAD and moar-HEAD 23:41
psch oh right, i'm not running jitted, 32bit here 23:42
sjn Hm. Does NativeCall work on moar? 23:51
psch it doesn't test properly on 32bit 23:53
but it should definitely work
sjn tries with parrot-HEAD, to see if that makes a difference 23:55
hm. lots of build warnings when compiling rakudo-parrot 23:56
looks like most of them are of type -Wunused-parameter 23:57