»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'p6: say 3;' or rakudo:, or /msg camelia p6: ... | irclog: irc.perl6.org or colabti.org/irclogger/irclogger_logs/perl6 | UTF-8 is our friend!
Set by moritz on 22 December 2015.
seatek Should stuff like $*HOME and $*TMPDIR work cross-platform to Windows too? 00:47
skids Those two should, I think. 00:48
p3rln00b Yup
skids Though I don't know what $*HOME ends up being when nobody is logged in. 00:49
seatek k. thanks. not that I care really. just curious
wonder if they use something like c:\Users\<userid> for $*HOME
skids I think $HOME in cmd may even be a thing. Memory is fuzzy. 00:50
p3rln00b I get "C:\Users\p3rln00b".IO for it
p3rln00b "C:\Users\p3rln00b\AppData\Local\Temp".IO for $*TMPDIR 00:51
seatek interesting stuff.
oh my gosh
geekosaur cmd should be using things like %HOME% but that'd be odd, the windows version is something longer 00:54
p3rln00b %UserProfile% 00:55
seatek i've tried using stuff like cygwin before in windows. it always feels like i'm in this tiny little plastic oasis, with giant walls surrounding me that may come crashing down at any moment to squash me 00:58
skids Yeah, until you fire up find and actually find stuff windows search cannot. 00:59
seatek i was hoping for dd there one time, i remember. but i couldn't find it anywhere. strange that cygwin wouldn't have such a useful thing 01:01
maybe they do now
firefish5000 I don't think they were able to properly implement dd in cygwin, I need it often since windows cannot recognize my flash drives when I image them with isos 01:02
MasterDuke try dc3dd 01:03
seatek MasterDuke, interesting 01:05
MasterDuke i haven't used it in recent Windows, but it worked fine on XP years ago 01:06
seatek i wonder if there will ever be any ide's that can handle perl6 stuff. seems possible with formal class and sub and method structures, and the fact that variables always looks like variables. well, mostly. 01:10
geekosaur I am vaguely recalling that vista and later removed access to the device level stuff that was being used? 01:17
seatek oh my gosh, there's tab completion in the interactive perl6 interpreter
geekosaur like, restricted to SYSTEM only as an anti-virus/worm measure or something like that 01:18
(not even LSA)
unless I have confused those, LSA is the administrator account and SYSTEM is the user that the privileged parts of Windows run as? 01:19
seatek i sure don't know. I went from OS/2 Warp to Linux -- Windows for games, and to know what other people are dealing with 01:20
firefish5000 I wish I could get the Readline module to work on my gentoo system. It failes the copy-keymap test for me. Anyone know if it works with libreadline-6.3? 01:24
seatek firefish5000, i could try to emerge readline 6.3 on my gentoo box and give it a whirl 01:31
firefish5000 if it works for you, I would like to know what version of readline your currently using. lets not try breaking another system
seatek you're wanting Term::Readline? 01:33
you're wanting Term::ReadLine?
firefish5000 I was aiming for Readline, for perl6 cli 01:34
seatek ah.. ha baba ;) not sure if i put perl6 on here... checking
oo i did 01:35
installing readline
all tests passed. your computer is broken 01:36
firefish5000 lol, thanks for going through the trouble to test it.
skids tries to build the habit of leaving trailing commas on all lists for future editability.
Not used to the language not barfing over that and adding nil elements.
firefish5000 what version of sys-libs/readline and rakudo are you using? 01:37
skids .o(Once I've built the habit, then I'll no doubt have to unbuild it when I do something else.) 01:37
seatek firefish5000, I'm using readline libs 6.3p8-r2 from the Gentoo sources
firefish5000 hmm, well, that confirms it. my computer is broken! Time to through it out, lol 01:38
seatek :)
seatek firefish5000, oh sorry -- moar 2016.09.1.gdebb.859 01:42
fudje m: role A[$B] { method C { $B } }; say A['D'].C; 05:43
camelia rakudo-moar 2285d3: OUTPUT«D␤»
fudje m: #|{ I am some pod } role A[$B] { method C { $B } }; say A['D'].C;
camelia rakudo-moar 2285d3: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Could not instantiate role 'A':␤Too few positionals passed; expected 2 arguments but got 1␤at <tmp>:1␤»
fudje :'(
grondilu I'm not sure #| can be used on-line 06:47
ShimmerFairy grondilu: the problem is with roles and multi-line declarator blocks in general: rt.perl.org/Public/Bug/Display.html?id=128810 07:05
FROGGS o/ 09:03
andrzejku_ hello my friends :) 09:17
RabidGravy boo 11:49
FROGGS /o\ 12:07
dalek c: a7716fc | (Zoffix Znet)++ | README.md:
Clarify deps installation instructions

Per discussion[^1], revert previous commit[^2] and clarify how to get rakudobrew going The Right Way™ by updating the shim with `rehash` command.
  [1] github.com/perl6/doc/commit/1b3cf9...t-19334016
  [2] github.com/perl6/doc/commit/1b3cf9...596674a93a
12:20
lucasb #129830 12:57
RT #129830
:|
so, it seems any parameterized role has problems with gist? 12:58
m: Positional.gist
camelia ( no output )
lucasb m: Positional[Int].gist
camelia rakudo-moar 2285d3: OUTPUT«Cannot unbox a type object (NQPMu) to a str.␤ in block <unit> at <tmp> line 1␤␤»
lucasb same thing for Associative[T], Rational[T, U]
m: role R[::T] {}; say R.gist 12:59
camelia rakudo-moar 2285d3: OUTPUT«(R)␤»
lucasb m: role R[::T] {}; say R[Int].gist
camelia rakudo-moar 2285d3: OUTPUT«Cannot unbox a type object (NQPMu) to a str.␤ in block <unit> at <tmp> line 1␤␤»
psch m: role R[::T] {}; say R[Int].new.gist 13:01
camelia rakudo-moar 2285d3: OUTPUT«R[Int].new␤»
psch m: put Int.gist
camelia rakudo-moar 2285d3: OUTPUT«(Int)␤»
psch m: role R[::T] {}; say R[Int].^mro
camelia rakudo-moar 2285d3: OUTPUT«No such method 'mro' for invocant of type 'Perl6::Metamodel::CurriedRoleHOW'␤ in block <unit> at <tmp> line 1␤␤»
psch m: role R[::T] {}; say R[Int].new.^mro
camelia rakudo-moar 2285d3: OUTPUT«((R[Int]) (Any) (Mu))␤»
psch m: role R { }; put R.gist 13:02
camelia rakudo-moar 2285d3: OUTPUT«(R)␤»
gfldex m: role R[::T] {}; R[Int].gist; CATCH{ default { say .backtrace.full } }
camelia rakudo-moar 2285d3: OUTPUT« in block at gen/moar/m-CORE.setting line 17361␤ in method join at gen/moar/m-CORE.setting line 17356␤ in sub infix:<~> at gen/moar/m-CORE.setting line 13936␤ in method gist at gen/moar/m-CORE.setting line 1393␤ in block <unit> at <tmp> line …»
psch m: role R[::T] {}; say R[Int].^name 13:05
camelia rakudo-moar 2285d3: OUTPUT«R[Int]␤»
psch m: role R[::T] {}; say R[Int].^shortname 13:06
camelia rakudo-moar 2285d3: OUTPUT«No such method 'gist' for invocant of type 'NQPMu'␤ in block <unit> at <tmp> line 1␤␤»
psch there
so shortname in CurriedRoleHOW has a problem
lucasb: ^^^ in case you wanna look what's wrong there
lucasb shortname comes from role Perl6::Metamodel::Naming 13:07
is that the case that it is not getting set for curried roles?
oh, nevermind
I don't have the skills to navigate the Perl6::Metamodel:: namespace :) 13:09
psch don't give up! :)
lucasb nqp-m: class C { has $!name; method name() { $!name } }; C.new.name.gist 13:17
camelia nqp-moarvm: OUTPUT«Cannot find method 'gist' on object of type NQPMu␤ at <tmp>:1 (<ephemeral file>:<mainline>)␤ from gen/moar/stage2/NQPHLL.nqp:1428 (/home/camelia/rakudo-m-inst-2/share/nqp/lib/NQPHLL.moarvm:eval)␤ from gen/moar/stage2/NQPHLL.nqp:1631 (/home/camelia/rakud…»
lucasb idk what my snippet eval is supposed to mean, but... yeah. my guess is that no code is setting the shortname of curried roles :) 13:18
psch lucasb: "curried role type objects", actually :) 13:27
lucasb: when it's punned it works
m: role R[::T] { }; put R[Int].new.gist
camelia rakudo-moar 2285d3: OUTPUT«R[Int].new␤»
lucasb indeed, correct 13:28
psch lucasb: please RT that if it's not yet
lucasb it already is #129830
psch ah okay 13:29
bazzaar o/ perl6 15:09
m: my @c = <a b c>; my @n = <1 2 3>; for @c Z @n -> $cv, $nv { say $cv ~ ":" ~ $nv }; 15:10
camelia rakudo-moar 2285d3: OUTPUT«a 1:b 2␤Too few positionals passed; expected 2 arguments but got 1␤ in block <unit> at <tmp> line 1␤␤»
bazzaar not sure why that code fails, I thought I passed 2 args with the Z operator, to the block 15:12
m: my @c = <a b c>; my @n = <1 2 3>; for (@c Z @n) -> $cv, $nv { say $cv ~ ":" ~ $nv }; 15:13
camelia rakudo-moar 2285d3: OUTPUT«a 1:b 2␤Too few positionals passed; expected 2 arguments but got 1␤ in block <unit> at <tmp> line 1␤␤»
AlexDaniel m: sub infix:<⁢> ($a, $b) is equiv(&infix:<*>) { $a [*] $b }; my \a = 5; my \b = 10; sa⁢y ab + 42 15:14
camelia rakudo-moar 2285d3: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Undeclared routines:␤ ab used at line 1␤ sa used at line 1. Did you mean 'so'?␤ y used at line 1 (in Perl 6 please use tr instead)␤␤»
AlexDaniel m: sub infix:<⁢> ($a, $b) is equiv(&infix:<*>) { $a [*] $b }; my \a = 5; my \b = 10; sa⁢y a⁢b + 42
camelia rakudo-moar 2285d3: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Undeclared routines:␤ sa used at line 1. Did you mean 'so'?␤ y used at line 1 (in Perl 6 please use tr instead)␤␤»
AlexDaniel m: sub infix:<⁢> ($a, $b) is equiv(&infix:<*>) { $a [*] $b }; my \a = 5; my \b = 10; say a⁢b + 42
camelia rakudo-moar 2285d3: OUTPUT«92␤»
gfldex m: my @c = <a b c>; my @n = <1 2 3>; for @c Z @n -> [$cv, $nv] { say $cv ~ ":" ~ $nv }; 15:18
camelia rakudo-moar 2285d3: OUTPUT«a:1␤b:2␤c:3␤»
gfldex m: sub infix:<|Z>(\a, \b){ (a Z b).flat }; my @c = <a b c>; my @n = <1 2 3>; for @c |Z @n -> $cv, $nv { say $cv ~ ":" ~ $nv }; 15:20
camelia rakudo-moar 2285d3: OUTPUT«a:1␤b:2␤c:3␤»
bazzaar gfldex: aaah, the penny has dropped, thank you very much
bioduds hey all, cheers!
AlexDaniel gfldex: is there any difference between using [] and () in this case? 15:21
m: my @c = <a b c>; my @n = <1 2 3>; for @c Z @n -> ($cv, $nv) { say $cv ~ ":" ~ $nv };
camelia rakudo-moar 2285d3: OUTPUT«a:1␤b:2␤c:3␤»
gfldex don't think so
it's a little easier to read in my eyes
bazzaar I found the example on Perl6 maven, after searching for documentation on how to iterate over multiple arrays in parallel. 15:25
AlexDaniel committable6: pre-glr my @c = <a b c>; my @n = <1 2 3>; for (@c Z @n) -> $cv, $nv { say $cv ~ ":" ~ $nv }; 15:26
committable6 AlexDaniel, ¦«pre-glr»: a 1:b 2␤Too few positionals passed; expected 2 arguments but got 1␤ in block <unit> at /tmp/Qn8aGvF3HJ:1␤ «exit code = 1»
bazzaar presumably the syntax has been tightened up since that post.
AlexDaniel uh, this result does not make any sense 15:27
what's going on there? 15:28
why was it “a 1:b 2” ?
aah
committable6: pre-glr my @c = <a b c>; my @n = <1 2 3>; for (@c Z @n) -> $cv { say $cv };
committable6 AlexDaniel, ¦«pre-glr»: a 1␤b 2␤c 3
AlexDaniel committable6: pre-glr my @c = <a b c>; my @n = <1 2 3>; for (@c Z @n) -> $cv { say $cv.perl };
committable6 AlexDaniel, ¦«pre-glr»: $("a", "1")␤$("b", "2")␤$("c", "3")
perlawhirl like this
m: my @c = <a b c>; my @n = <1 2 3>; for @c Z @n -> ($cv, $nv) { say $cv ~ ":" ~ $nv }; 15:29
camelia rakudo-moar 2285d3: OUTPUT«a:1␤b:2␤c:3␤»
AlexDaniel committable6: pre-glr my @c = <a b c>; my @n = <1 2 3>; for (@c Z @n) { say .[0] ~ ‘:’ ~ .[1] };
committable6 AlexDaniel, ¦«pre-glr»: a:1␤b:2␤c:3
AlexDaniel yeah, that's it!
DrForr RabidGravy: I took the repo down only because I just got tired of the approach I was taking. It'll be back up n a few hours.
bazzaar I'm using perl6 to parse a horribly formatted text file, I am now back on track after your help, thank you. Perl6 is brilliant, so intuitive. 15:33
AlexDaniel bazzaar: if interested, you can take a look at this: perl6advent.wordpress.com/2015/12/...-refactor/
bazzaar AlexDaniel: thanks for the help, and for the link, I will check it out. 15:34
AlexDaniel bazzaar: well, it's not something you should care about today :) still a good read if you want to see how we got here 15:35
dalek c: 0765d1d | gfldex++ | doc/Language/operators.pod6:
better description and example for Z
15:36
c: 34c6f3c | gfldex++ | doc/Language/operators.pod6:
meta-Z is no the same thing as Z, link there
gfldex bazzaar++ # for asking the right question 15:37
perlawhirl bazaar: the main thing to remember in this particular case is that zip (or Z) creates a list of lists, so you need to destructure that list in the signature of the loop 15:39
ie, you just needed to relocate your brackets downstream :D 15:40
from: for (@c Z @n) -> $cv, $nv { ... }
to : for @c Z @n -> ($cv, $nv) { ... }
gfldex m: my @c = <a b c>; my @n = <1 2 3>; for (@c Z @n).kv -> $cv, $nv { say $cv ~ ":" ~ $nv }; 15:41
camelia rakudo-moar 2285d3: OUTPUT«0:a 1␤1:b 2␤2:c 3␤»
perlawhirl kv is different in that it actually creates 2 loop items
zip creates a list... so it needs to be destructured in a sig... or subscripted in the loop (ie $_[0] and $_[1]) 15:42
bazzaar perlawirl: thanks for the explanation of what the bracket syntax of the signature is doing 15:44
AlexDaniel m: my @c = <a b c>; my @n = <1 2 3>; .say for @c Z[&(* ~ *)] @n 15:45
camelia rakudo-moar 2285d3: OUTPUT«a1␤b2␤c3␤»
AlexDaniel hehe
m: my @c = <a b c>; my @n = <1 2 3>; .say for @c Z[&(* ~ ‘:’ ~ *)] @n
camelia rakudo-moar 2285d3: OUTPUT«a:1␤b:2␤c:3␤»
AlexDaniel m: my @c = <a b c>; my @n = <1 2 3>; .say for @c Z[&(-> $a, $b { “$a:$b” } )] @n 15:46
camelia rakudo-moar 2285d3: OUTPUT«a:1␤b:2␤c:3␤»
bazzaar AlexDaniel: so you've eliminated the block, right ... I like it 15:48
MasterDuke m: my @c = <a b c>; my @n = <1 2 3>; .say for @c Z[&("{*}:{*}")] @n 15:49
camelia rakudo-moar 2285d3: OUTPUT«No such method 'CALL-ME' for invocant of type 'Str'␤ in block <unit> at <tmp> line 1␤␤»
perlawhirl I just figured you were trying to wrap your head around the Z opertor. if your really do just want to colon-separate them...
m: my @c = <a b c>; my @n = <1 2 3>; say (@c Z @n).map: *.join(':')
camelia rakudo-moar 2285d3: OUTPUT«(a:1 b:2 c:3)␤»
perlawhirl or this would work too: (@c Z @n)».join(':') 15:50
bazzaar TIMTOWTDI ... brilliant 15:51
AlexDaniel MasterDuke: :P you can't put * inside stuff like that 15:53
committable6: 2015.12 my @c = <a b c>; my @n = <1 2 3>; .say for @c Z[&(* ~ ‘:’ ~ *)] @n 15:54
committable6 AlexDaniel, ¦«2015.12»: a:1␤b:2␤c:3
AlexDaniel ok
MasterDuke yeah, i sometimes forget they're more than just placeholders 15:56
bazzaar perlawhirl: actually one of the input arrays to the Zip op (in my file) is an AofA, so I'm just steadily working down through the data levels
perlawhirl AlexDaniel: re our conversation earlier on »... yes it does seem it's more deepmap than map... but i think the huffman coding is sound. my take on » is that it's aimed at huffmanising quick method calls, rather than complex functions 15:58
ie, if you just wanna uppercase a list of names, ».uc is shorter than .map: &uc
but the deepmap like properties come into play in unexpectedly helpful ways 15:59
perlawhirl m: say <john paul geoge ringo>.classify(*.comb[0])».uc 15:59
camelia rakudo-moar 2285d3: OUTPUT«{g => [GEOGE], j => [JOHN], p => [PAUL], r => [RINGO]}␤»
perlawhirl uc acts on the items i was classifying, not on the Hash that .classify created
AlexDaniel I'm not sure I get it. Like maybe, but I'm just thinking… if .deepmap is more useful than .map (which » existence seems to imply?), then why is it called .deepmap and not .dp or something… 16:01
.dm I mean
perlawhirl well » (and by extension, .deepmap) acts like .map in a lot of circumstances. it's huffmanizing a lot of common things you would normally need map for... as well as some things you would need deepmap for 16:03
AlexDaniel hmm
perlawhirl i think ».&{ ... } is a bad use-case for » 16:04
gfldex i'm getting careful with » to because I can't test autothreading that isn't there yet 16:05
perlawhirl i think it's better suited for method calls. if you need anything more complex, a map ( or deepmap, as the case might be ) is a better option
gfldex: agree, though i think i recall jnthn saying ».foo should eventually implement something (probably) identical to .hyper.map( *.fo )o 16:06
erm , i mean.. .hyper.map( *.foo )
but even .hyper is a little wonky... or has that beed fixed recently 16:07
*been
gfldex threading in general is buggy, including segfaults, but we got a golf of (at last one) of those bugs now 16:08
AlexDaniel gfldex: I think that we've got a good grip on it with MasterDuke 16:12
once #129781 is resolved we will report the next issue… and we will repeat that until bisectable fucking works ;)
right now I think the biggest problem is that there are not many people willing to work on such bugs 16:13
lucasb gfldex: you just inserted an example about Z in the docs, but you forgot the parentheses, right? 16:14
AlexDaniel like you know, it's nice to have jnthn but it would be better to have 5 jnthns
lucasb for <a b c> Z <1 2 3> -> $l, $r { say "$l:$r" }
for <a b c> Z <1 2 3> -> ($l, $r) { say "$l:$r" }
gfldex i did 16:15
lucasb well, parentheses or brackets, whichever style is prefered
AlexDaniel perlawhirl: I am not sure if I understand your idea of “X is a bad use-case for »”. If you want it to be parallelized if possible, then you use », if you don't – you use map/deepmap 16:16
whether it is ».&{} or a plain method call is irrelevant, isn't it?
dalek c: 2e00e39 | (Tom Browder)++ | doc/Language/modules.pod6:
clarify point

description is still a little muddy
c: 6a52de1 | gfldex++ | doc/Language/operators.pod6:
fix example
lucasb gfldex++ thanks 16:17
perlawhirl probably a bad turn of phrase on my part... not really a bad use case, per se 16:18
perlawhirl until » is parallelised in at least 1 implementation of perl6 it's kind of a moot point 16:20
timotimo we used to have the execution order of >> be scrambled
it got taken out, probably due to performance concerns? 16:21
lucasb what does it mean that Z metaoperator is not the same thing as Z infix?
gfldex it did a ».pick on the whole list
timotimo well, Z infix is Z,
lucasb yes, that's my understanding as well 16:22
timotimo you can't use Z, on an operator
AlexDaniel m: 42 xx (2 ** 62)
camelia rakudo-moar 2285d3: OUTPUT«(signal SEGV)WARNINGS for <tmp>:␤Useless use of constant integer 42 in sink context (line 1)␤»
timotimo where did you read that?
perlawhirl lucasb: im confused... maybe they meant Z infix and metaop is not the same as zip()
AlexDaniel ok, this one is still there
dalek c: 0219118 | (Tom Browder)++ | doc/Language/modules.pod6:
use title case for consistency

grammar fix
gfldex i wanted to link from meta-Z to Z, because meta-Z didn't really say what was going on 16:23
and they don't behave the same way. Flattening is a little different. 16:24
lucasb hmm, I'm not sure :)
say (zip <a b c>, <1 2 3>).perl
say (<a b c> Z, <1 2 3>).perl 16:25
say (<a b c> Z <1 2 3>).perl
all 3 returns the same thing
gfldex m: dd (<1 2 3> Z~ <a b c>);
camelia rakudo-moar 2285d3: OUTPUT«("1a", "2b", "3c").Seq␤»
gfldex the result is flat already
perlawhirl lucasb: zip( @AoA ) will not transpose the @AoA... but [Z] @AoA will
lucasb say ([Z] <a b c>, <1 2 3>).perl 16:26
all 4 returns the same thing :D
perlawhirl: I may not have understood what you said 16:27
timotimo AlexDaniel: oh, that must be an overflow when multiplying the slot size with the number of elements requested
perlawhirl m: my @AoA = ('A'..'I').rotor: 3; say zip(@AoA);
camelia rakudo-moar 2285d3: OUTPUT«(((A B C) (D E F) (G H I)))␤»
perlawhirl m: my @AoA = ('A'..'I').rotor: 3; say [Z] @AoA;
camelia rakudo-moar 2285d3: OUTPUT«((A D G) (B E H) (C F I))␤»
perlawhirl zip() treats it's values as scalar 16:28
ermm, it's arguments
AlexDaniel timotimo: fwiw it is #126014
perlawhirl that's the only zip related difference I'm aware of... I was not aware of any difference between infix Z and metaop Z 16:29
AlexDaniel timotimo: and yeah, that makes sense 16:29
perlawhirl but i'm welcome to be show how they differ so I don't misuese it :D
timotimo AlexDanie+│ timotimo: fwiw it is #126014
synopsebot6 Link: rt.perl.org/rt3//Public/Bug/Displa...?id=126014
MasterDuke added valgrind output 16:30
timotimo so, how do i properly check for multiplication overflow? internet says i have to check before doing the multiplication so that i don't run into undefined behaviour that could make any test "after the multiplication" bogus
perlawhirl bedtime for me... 3:30 am here :/
g'night #perl6 16:31
lucasb perlawhirl: I wasn't aware of that. thanks for clarifying
timotimo gnite perlawhirl
lucasb perlawhirl: good night
AlexDaniel timotimo: is it signed or unsigned? 16:34
timotimo the result is size_t
but yeah, unsigned 16:36
arnsholt In that case, a*b <= MAX_INT should be equivalent to a <= MAX_INT/b 16:37
Modulo floating-point bugbears due to division
timotimo it's rather likely that the element size is a simple and small value 16:38
but yeah, i'll try that
lucasb nqp-m: nqp::setelems(nqp::list,2**62) 16:40
camelia nqp-moarvm: OUTPUT«(signal SEGV)»
lucasb :D 16:41
timotimo same thing, because it nulls out the slots
AlexDaniel timotimo: just wanted to note that wrap of unsigned integers is actually defined, if I recall correctly 16:42
timotimo oh, it is?
arnsholt Oh, that's true, I think! 16:43
AlexDaniel I don't see how it is going to help in this case, but yeah 16:44
timotimo what do i include to get MAX_INT, limits.h?
apparently not 16:45
AlexDaniel isn't it SIZE_MAX ?
timotimo ah
right, i want the max of size_t anyway
lucasb stdint.h 16:47
for SIZE_MAX
funny, the error mesg changes, depending of the size specified 16:51
nqp-m: nqp::setelems(nqp::list,2**31)
camelia nqp-moarvm: OUTPUT«Memory allocation failed; could not allocate 17179869184 bytes␤»
lucasb nqp-m: nqp::setelems(nqp::list,2**64)
camelia nqp-moarvm: OUTPUT«MVMArray: Can't resize to negative elements␤ at <tmp>:1 (<ephemeral file>:<mainline>)␤ from gen/moar/stage2/NQPHLL.nqp:1428 (/home/camelia/rakudo-m-inst-2/share/nqp/lib/NQPHLL.moarvm:eval)␤ from gen/moar/stage2/NQPHLL.nqp:1631 (/home/camelia/rakudo-m-in…»
lucasb nqp-m: nqp::setelems(nqp::list,2**62)
camelia nqp-moarvm: OUTPUT«(signal SEGV)»
timotimo lucasb: i put a branch up on moarvm that addresses this issue, but it clearly has shortcomings 16:52
please feel free to look into it some more while i'm AFK 16:53
AlexDaniel: you're invited to take a look, too
AlexDaniel I'm already looking :)
timotimo thank you kindly
i think the check may want to either be repeated at the top or move to the top entirely because otherwise it'll say something about negative sizes
AlexDaniel timotimo: “Can't resize to a number bigger than 64bits” who said that it is 64bits? 16:58
is it actually so? 16:59
I mean, is it 64bits on 32-bit platforms?
AlexDaniel timotimo: in fact in 2**64 case it complains about n being negative, isn't it already too late to attempt any fixes in set_size_internal ? 17:05
OK you will fix a segfault, but the problem of xx wrapping around will be there still 17:07
dalek c: b8cdb18 | (Tom Browder)++ | doc/Language/modules.pod6:
remove pod tag, shorten commen
17:08
timotimo AlexDaniel: right, that verbiage was put in before i thought to put the value we compare against into the exception string, too 17:12
but yeah, set_size_internal takes an MVMint64, and bind_pos does, too
but set_size - the instruction you get with setelems - takes a uint
clearly we'd prefer this to be uniform across the board. not sure how many pieces of the Everything will need changing 17:14
however ... are you really going to be asking for 2**63 slots anyway?
AlexDaniel that's stupid, but what if I do?
timotimo m: say (2 ** 63) / (1024 * 1024 * 1024 * 1024), " terabyte" 17:15
camelia rakudo-moar 2285d3: OUTPUT«8388608 terabyte␤»
timotimo then you shall get an exception
AlexDaniel m: 42 xx (2 ** 100) 17:16
camelia rakudo-moar 2285d3: OUTPUT«WARNINGS for <tmp>:␤Useless use of constant integer 42 in sink context (line 1)␤Cannot unbox 101 bit wide bigint into native integer␤ in block <unit> at <tmp> line 1␤␤»
AlexDaniel ah
there's an exception for that
timotimo yeah, it happens way earlier
AlexDaniel OK
timotimo the ops that we use to access arrays and other positional things "under the hood" all take 64 bit integers 17:17
(apparently a mix of signed and unsigned)
so it'll have to unbox your Int to an int
and boom
i mean ... we could also "if (ssize > 2 ** 48) exception('cowardly refusing to allocate an array with more than 2 ** 48 slots')" 17:19
m: say (2 ** 48) / (1024 * 1024 * 1024 * 1024), " terabyte"
camelia rakudo-moar 2285d3: OUTPUT«256 terabyte␤»
timotimo we don't likely have users with that much ram, do we? 17:20
AlexDaniel not yet
timotimo consider also that things like sorting aren't in-place
oh, multiply that with the size of your elements, too
so if you have a list of regular objects, that'll be a 64bit int for each slot 17:21
MasterDuke i use machines with 278Gb at work, and we're soon getting 512Gb machines
timotimo so 2048 terabyte just for a single of those arrays
MasterDuke and those are just regular dell servers
timotimo and our implementation requires all those slots in there to be nulled whenever we increase the size of such an array
AlexDaniel yeah, 256 Tb of RAM does not seem like some unimaginable amount nowadays
timotimo OK, so we go up to 56 17:22
m: say (2 ** 56) / (1024 * 1024 * 1024 * 1024), " terabyte"
camelia rakudo-moar 2285d3: OUTPUT«65536 terabyte␤»
timotimo month after month we can go and increase that
AlexDaniel xD
psch r: my @a; say @a[2**64] 17:23
camelia rakudo-moar 2285d3: OUTPUT«Cannot unbox 65 bit wide bigint into native integer␤ in block <unit> at <tmp> line 1␤␤»
..rakudo-jvm 2a1605: OUTPUT«(Any)␤»
psch except jvm limitations
well, we can shuffle somewhere
...assuming i got the gist of the discussion. it felt relevant enough :P
timotimo hmm 17:24
psch point being that array indices on jvm have to be native ints
MasterDuke timotimo: while you're messing around with bigints, github.com/MoarVM/MoarVM/pull/405
AlexDaniel MasterDuke: 278Gb is great. That probably means that you can have a year long bisectable uptime on that machine
psch so yeah, shuffling would be some kind of higher level abstraction for the underlying slots of Array
but that, on the other hand, again limits us for native typed arrays
MasterDuke AlexDaniel: :) -> :( 17:25
psch cause there we have to kinda sorta do C-style pointer arithmetic
i mean, clearly not as bad, but it's a thing
j: use nqp; nqp::setelems(nqp::list, 2**64) 17:26
camelia ( no output )
psch j: use nqp; say nqp::setelems(nqp::list, 2**64).elems
camelia rakudo-jvm 2a1605: OUTPUT«Method 'elems' not found for invocant of class 'BOOTArray'␤ in block <unit> at <tmp> line 1␤␤» 17:27
psch oh right
j: use nqp; say nqp::elems(nqp::setelems(nqp::list, 2**64))
camelia rakudo-jvm 2a1605: OUTPUT«0␤»
timotimo neat.
psch j: use nqp; my \l := nqp::list; say nqp::setelems(l, 2**64); say nqp::elems(l)
camelia rakudo-jvm 2a1605: OUTPUT«()␤0␤»
timotimo clearly they have some sort of sparse array implementation there?
timotimo eh .. or it just silently fails? 17:27
psch i'd go with that, yeah
j: use nqp; my \l := nqp::list; say nqp::setelems(l, 2**64); nqp::bindpos(l, 2**64, 1); say nqp::elems(l) 17:28
camelia rakudo-jvm 2a1605: OUTPUT«()␤1␤»
psch hm, maybe not
AlexDaniel timotimo: here's a thing… set_elems receives 「MVMuint64 count」, then passes it to set_size_internal as 「MVMint64 n」. Why?
timotimo AlexDaniel: yes, why indeed.
psch AlexDaniel: that looks like an oversight, honestly
dalek c: ff008f5 | (Luca Ferrari)++ | doc/Language/exceptions.pod6:
Change a supposed sub title to head2
17:29
MasterDuke i found this a little confusing: MVMuint64 mp_get_int64
c: 006be40 | (Luca Ferrari)++ | doc/Language/objects.pod6:
Reword the private method section
c: 5359d4c | (Luca Ferrari)++ | doc/Language/objects.pod6:
Autopunning of a role creates a class and instantiate an object.
c: 45b3701 | (Tom Browder)++ | doc/Language/ (2 files):
Merge pull request #946 from fluca1978/master

A few improvements
psch j: use nqp; my \l := nqp::list; say nqp::setelems(l, 2**64); nqp::bindpos(l, $_, 1) for do $_ ** 10 for ^21; say nqp::elems(l) 17:30
MasterDuke and then later in the function: if (bits > 64) { MVM_exception_throw_adhoc(tc, "Cannot unbox %d bit wide bigint into native integer", bits); }
camelia rakudo-jvm 2a1605: OUTPUT«()␤java.lang.OutOfMemoryError: Java heap space␤ in block <unit> at <tmp> line 1␤␤»
psch isn't actually sure if that's a sensible thing to do..?
the point being, i'm only assigning 21 elements
AlexDaniel MasterDuke: where's that?
MasterDuke is that error message precisely correct on 32bit machines
?
MoarVM/src/6model/reprs/P6bigint.c 17:31
psch oh, i swapped the operand order for **
j: use nqp; my \l := nqp::list; say nqp::setelems(l, 2**64); nqp::bindpos(l, $_, 1) for do 10 ** $_ for ^21; say nqp::elems(l)
camelia rakudo-jvm 2a1605: OUTPUT«()␤java.lang.OutOfMemoryError: Java heap space␤ in block <unit> at <tmp> line 1␤␤»
timotimo MasterDuke: our native integers are always 64bit
psch ...i think
aaanyway, yeah, there's a different challenge for array sizes on jvm as well
timotimo hooray, it's never easy 17:32
psch i assume whatever moar will do will be somewhat portable
AlexDaniel MasterDuke: don't assume that something is correct with 32-bit rakudo. Just test it
arnsholt In Java checking for overflow is easy though!
psch but only if it does introduce another layer of abstraction
and, well, more abstraction on java clearly is a slow thing, so uhm
arnsholt You can just stuff it in a long and do it stupidly, since Java array indices are only ints =D
But yeah, native ints on JVM are long, not int
AlexDaniel MasterDuke: for a while I had 32-bit rakudo and found a bunch of bugs this way ;) 17:33
arnsholt And nums are double, not float
MasterDuke i don't currently have a 32bit machine
AlexDaniel yeah… me too… 17:33
timotimo just fire up a qemu :)
psch m: use NativeCall; say nativesizeof(my int $ = 0)
camelia rakudo-moar 2285d3: OUTPUT«NativeCall op sizeof expected type with CPointer, CStruct, CArray, P6int or P6num representation, but got a P6opaque (Int)␤ in sub nativesizeof at /home/camelia/rakudo-m-inst-2/share/perl6/sources/24DD121B5B4774C04A7084827BFAD92199756E03 (NativeCall) li…»
psch feh 17:34
m: my int $x = 0; use NativeCall; say nativesizeof($x)
camelia rakudo-moar 2285d3: OUTPUT«NativeCall op sizeof expected type with CPointer, CStruct, CArray, P6int or P6num representation, but got a P6opaque (Int)␤ in sub nativesizeof at /home/camelia/rakudo-m-inst-2/share/perl6/sources/24DD121B5B4774C04A7084827BFAD92199756E03 (NativeCall) li…»
MasterDuke turns out i have a 32bit XP vm sitting around
psch why is int suddenly P6opaque..? 17:34
j: my int $x = 0; use NativeCall; say nativesizeof($x)
camelia rakudo-jvm 2a1605: OUTPUT«␤(timeout)␤»
MasterDuke not sure i want to try and do anything useful in it though
psch ooh boy
i guess i really don't know enough about NC :P 17:35
AlexDaniel MasterDuke: there you go: github.com/perl6/whateverable/issues/43
18 open issues /o\
psch r: my int $x = 0; say $x.REPR 17:38
camelia rakudo-moar 2285d3, rakudo-jvm 2a1605: OUTPUT«P6opaque␤»
psch r: use nqp; my int \x = 0; use NativeCall; say nativesizeof(nqp::getattr(x, Int, '$!value')) 17:39
camelia rakudo-moar 2285d3: OUTPUT«Type check failed in binding; expected int but got Int (0)␤ in block <unit> at <tmp> line 1␤␤»
..rakudo-jvm 2a1605: OUTPUT«␤(timeout)␤»
psch walks away
timotimo o_O 17:43
AlexDaniel bisectable6: oh you poor soul…
dalek osystem: 235c98a | (Tom Browder)++ | META.list:
another try at a link to tar ball per irc with ugexe
17:50
lucs m: my $foo = 'FOO'; print q:s'\latexstuff{$fooBAR} # How to get 'FOOBAR', with scalar interpolation, but no closure ones (to avoid having to escape all the '{')? 18:00
camelia rakudo-moar 2285d3: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Variable '$fooBAR' is not declared␤at <tmp>:1␤------> 3my $foo = 'FOO'; print q:s'\latexstuff{7⏏5$fooBAR} # How to get 'FOOBAR', with sca␤»
psch m: say q{foo\qq[{"bar".succ}]} 18:01
camelia rakudo-moar 2285d3: OUTPUT«foobas␤»
psch lucs: ^^^ you can switch between q and qq inside any quoted string
m: say "foo \q[{ bar }]" # ther other way around
camelia rakudo-moar 2285d3: OUTPUT«foo { bar }␤»
psch s/ther/the/ 18:02
lucs Hmm... Interesting. 18:03
psch i *think* we also have a modifier for qq that only supresses closures
m: say qq:s[foo { 1 + 1 }] 18:04
camelia rakudo-moar 2285d3: OUTPUT«foo 2␤»
psch ...well, that's not it
m: say qq:S[foo { 1 + 1 }]
camelia rakudo-moar 2285d3: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Unrecognized adverb: :S␤at <tmp>:1␤------> 3say qq:S7⏏5[foo { 1 + 1 }]␤»
psch yeah, no idea. i don't know if it's doc'd either
lucasb m: say qq:!c/oh { 2 + 2 }/ 18:06
camelia rakudo-moar 2285d3: OUTPUT«oh { 2 + 2 }␤»
lucs m: my $foo = 'FOO'; print "\\latexstuff\{{$foo}BAR} ", q:s'\latexstuff{$foo\qq{}BAR}' # Both are LTA :( 18:13
camelia rakudo-moar 2285d3: OUTPUT«\latexstuff{FOOBAR} \latexstuff{FOOBAR}»
lucasb m: my $foo = 'FOO'; say q:s'\oh{$foo<>BAR}', q:s'\oh{$foo[]BAR}', q:s'\oh{$foo{}BAR}' 18:17
camelia rakudo-moar 2285d3: OUTPUT«\oh{FOOBAR}\oh{FOOBAR}\oh{FOOBAR}␤»
gfldex m: sub latexstuff(|c){ '\latexstuff{' ~ c ~ '}' }; my $foo = 'FOO'; say latexstuff($foo ~ 'BAR'); 18:17
camelia rakudo-moar 2285d3: OUTPUT«\latexstuff{FOOBAR}␤»
psch oh my what
dalek ateverable: 8ec09c6 | (Aleks-Daniel Jakimenko-Aleksejev)++ | Bisectable.p6:
Bail out if there is something wrong

Not sure why this forgotten, but it is essential (in fact, it was working properly before the rewrite).
Tests needed.
psch so i ordered takeout 18:18
and it just arrived
but there was some kind of weird interaction between me using the doorbell receiver/speaker thing
and the delivery guy ringing the doorbell again
and now it wont stop ringing
i dismantled part of the speaker-thingy in our flat and it stopped, but if i reassemble it it starts again 18:19
lucs lucasb: That's pretty good. I don't understang how they work, but hey, there they are :)
psch i'm really unsure what to do
lucs lucasb: Thanks.
gfldex m: my $foo = 'BAR'; say $foo<>; 18:20
camelia rakudo-moar 2285d3: OUTPUT«BAR␤»
gfldex lucs: see docs.perl6.org/language/subscripts#Zen_slices 18:21
lucs gfldex: Thanks
psch the lesson is clearly "don't order takeout"
i think
lucasb psch: what food did you order?
psch lucasb: a "Kebap Teller" with extra feta 18:22
lucasb hmm, yummy 18:22
.botsnack
synopsebot6 om nom nom
yoleaux :D
gfldex you could get yourself one of those big cast iron castle-dracula-doornockers
psch right now i'm going with "it's gonna stop eventually" 18:23
which, honestly, seems really unlikely
cause the board and all looks lots digital so it's probably reach some weird racey edge case and is stuck
MasterDuke have you tried kinetic debugging? 18:24
psch well, i did rip off the speaker...
MasterDuke threaten it with a hammer 18:24
psch i'm gonna eat first :S 18:25
AlexDaniel What's the first rakudo release that had support for moarvm? 18:36
psch yey, it fixed itself 18:37
the speaker/doorbell thingy
lucasb hmm, back in 2012?
psch afair the nqp refactor that made nqp-m work was instrumental in making nqp-j work 18:38
AlexDaniel 2013.11 ? github.com/rakudo/rakudo/commit/0a...0aa36f0d4b
psch the first moar relase was 2014.01, according to www.moarvm.org/releases.html
AlexDaniel ah, 2014.01 indeed 18:39
dalek ateverable: 2bf7d40 | (Aleks-Daniel Jakimenko-Aleksejev)++ | build.p6:
Stop attempting to build pre-moar tags

2014.01 is the first rakudo release with MoarVM support. Given that we cannot build parrot or anything else, let's just cut off older tags.
19:17
lucasb m: role A::B::C[::T] {}; say A::B::C[Int].new.^shortname 19:27
camelia rakudo-moar 3ca0f8: OUTPUT«C[Int]␤»
lucasb m: role A::B::C[::T] {}; say A::B::C[Int].^shortname
camelia rakudo-moar 3ca0f8: OUTPUT«A::B::C[Int]␤»
lucasb oops, I meant to eval this in #perl6-dev 19:28
psch D:
lucasb MasterDuke++ for taking a look at it
psch MasterDuke++ indeed
lucasb but the shortname should be... short :) 19:29
psch m: class A { class B { class C { } } }; say A::B::C.^shortname 19:29
camelia rakudo-moar 3ca0f8: OUTPUT«C␤»
psch hmm, yeah, that's a valid concern
dalek osystem: bc28e60 | (Tom Browder)++ | META.list:
another META6.json fix
19:32
DrBojingle What kind of projects are you guys using Perl6 for? 19:42
psch the last not-backend thing i did was github.com/Perl6-Noise-Gang/p6-Music-Helpers 19:45
which is a library for generating musical cadences
it might have bitrotted a bit 'cause i didn't quite find the time to work on it in a few months 19:46
masak DrBojingle: I'm implementing a language using Perl 6. (though it's slightly dogfooding, since the language is also exploring macro mechanisms, and the lessons are then meant to be used in Perl 6 itself.) 19:49
moritz is about to earn shitloads of money by giving a perl 6 training course 19:52
lucasb moritz: will your material be available afterwards? :) 19:54
DrForr moritz: Heh, I finally got paid for my training course yesterday. 19:55
masak was reminded by the above to keep pushing for putting out an abstract for a Perl 6 course on his employer's web site 20:09
[ptc] moritz: where will you be giving it? 20:17
wongjtf99 ok, does anyone know of an up to date Perl 6 book/ebook that i can purchase? 20:26
gfldex wongjtf99: we don't got that yet, maybe in a few month 20:27
wongjtf99: see www.reddit.com/r/perl/comments/557..._6_books/) 20:28
moritz lucasb: not clear yet 20:37
[ptc]: Berlin
moritz lucasb: it'll be a fairly small group (2-4 devs), so I won't have too much slides or so anyway, much will be interactive/dicussions/exercises 20:38
and maybe I'll do a code kata or two
timotimo cool 20:39
moritz nothing final yet, though 20:40
(oh, and it'll be all in German, so not very interesting for the broader audience) 20:42
lizmat moritz++ 20:44
:-)
moritz ... and I wonder if my next big project should be a book on Perl 6 20:45
moritz anybody else wondered if they should write a book on Perl 6, and just needed the right trigger? we could join forces :-) 20:46
DrForr I've been approached several times; I just don't know if I could do the subject justice. 20:47
moritz DrForr: that's your imposter syndrome talking 20:48
DrForr I'm aware. 20:49
timotimo become a Subject Justice Warrior? :) :)
MasterDuke will the real DrForr please stand up?
moritz DrForr: I'd certainly be interested in a collaboration; I'll write up some thoughts and paste it in a gist 20:53
DrForr Nod. 20:55
AlexDaniel m: sub foo { once { say "HELLO! THIS IS PRINTED ONCE" }; foo if $++ < 5 }; foo 21:09
camelia rakudo-moar 3ca0f8: OUTPUT«HELLO! THIS IS PRINTED ONCE␤»
AlexDaniel m: sub foo { if True { once { say "HELLO! THIS IS PRINTED ONCE" } }; foo if $++ < 5 }; foo
camelia rakudo-moar 3ca0f8: OUTPUT«HELLO! THIS IS PRINTED ONCE␤HELLO! THIS IS PRINTED ONCE␤HELLO! THIS IS PRINTED ONCE␤HELLO! THIS IS PRINTED ONCE␤HELLO! THIS IS PRINTED ONCE␤HELLO! THIS IS PRINTED ONCE␤»
AlexDaniel ¯\_(ツ)_/¯ 21:10
gfldex is this a newbug? 21:10
AlexDaniel gfldex: I have no idea 21:11
so once means maybe once 21:12
gfldex it does not. It's like a block that is guarded by a state variable 21:13
gfldex i can see any RT for this. Please rakudobug. 21:13
gfldex m: sub f { { once { say 'oi‽' } } }; f; f 21:15
camelia rakudo-moar 3ca0f8: OUTPUT«oi‽␤oi‽␤»
gfldex AlexDaniel: ^^^ golfed
lizmat m: sub f { { { say "oi‽" } unless $++ } }; f; f # same issue / DIHWIDT 21:16
camelia rakudo-moar 3ca0f8: OUTPUT«oi‽␤oi‽␤»
lizmat aka, the once is bound to its scope, not to the outer sub 21:17
and I think that is intentional 21:18
gfldex if it's intentional we need to doc that 21:19
AlexDaniel
.oO( and a good way to doc it is “do not use 「once」” )
21:20
really, I've been bitten by this thing too many times
AlexDaniel you move some stuff around and BOOM! It no longer does what you mean 21:20
moritz DrForr, [ptc], everybody else: gist.github.com/moritz/29301316955...90e4ce9e7b 21:21
feedback would be very welcome
MasterDuke i love the idea of once, but it seems really tricky to get it to do what everybody expects in every situation 21:21
jnthn Every issue you can create with `once` has an equivalent state var issue 21:22
It ties into the discussion in design.perl6.org/S04.html#When_is_..._a_closure
DrForr Are you planning to be at LPW, FOSDEM or OSCON? 21:23
(moritz)
moritz one of my favorite sections of the design docs :-)
DrForr: no plans yet, which likely means "no" :(
maybe YAPC::EU in Amsterdam, but that's like, 10 months away :/ 21:24
DrForr I know :/
jnthn In short, closure clones (by design) produce a fresh set of state vars 21:25
jnthn Which is what you want in, say, sub accumulater() { return { ++state $ } } or so 21:25
moritz anyway, I really need to get some sleep now
jnthn 'night, moritz
moritz will backlog of anybody hilights me; thoughts via other channels on that gist would be very welcome too 21:26
\o~
DrForr moritz: I like the look from a cursory glance, but I'm needing to get to bed as well.
o/'
moritz DrForr: sure, will talk tomorrow
gfldex jnthn: does that mean the behaviour of once we got right now is by design? 21:33
AlexDaniel “The semantics of INIT and once are not equivalent to each other in the case of cloned closures. An INIT only runs once for all copies of a cloned closure. A once runs separately for each clone, so separate clones can keep separate state variables:” 21:37
jnthn gfldex: Well, it means that if we want to consider, say, if blocks differently, we're going to have to introduce a mechanism for doing so 21:39
jnthn gfldex: And rules for when it applies 21:39
gfldex: And it'll get "interesting" fast, I suspect (consider which side of the sense a while loop should land on, for example) 21:40
(Especially when considering return lazy while ... style things which can be lazily evaluated.) 21:41
AlexDaniel well, it would be nice if 「once」 meant once always 21:42
jferrero m: say 4 == (1E12.log10 / 3).Int
camelia rakudo-moar 6977b8: OUTPUT«False␤»
lucasb in that reddit thread, the laurent_r user said he had written a book which was getting reviewed. does anybody knows him? I'd love to be a reviewer :) 21:43
DrForr He talked about it at YAPC, I think it was an LT on the last day. 21:45
dalek osystem: e84bca2 | (Tom Browder)++ | META.list:
update to v0.1.2
21:46
lucasb DrForr: I'll search if it is on youtube. thanks!
DrForr Should be up.
lucasb found it! www.youtube.com/watch?v=dV5TR8UC6vU 22:08
starts around 13 minutes
timotimo which part are we interested in here?
lucasb I was just looking for this person, who said he had written a book about P6 22:09
timotimo ah
lizmat Laurent Rosenfeld's announcement of the "Think Perl 6" book
lucasb based on the book how to think like a computer scientist 22:09
I read that book, the python version, a decade ago, I think. and I liked.
timotimo has a review copy of that book that asks for it not to be spread without asking the author first 22:10
lizmat "The goal of this book is to teach you to think like a computer scientist.:
but instead of using Python, it uses Perl 6
timotimo right
lizmat is proofreading 22:11
timotimo it has many pages 22:12
lizmat 379 22:13
(so far)
dalek ateverable: 2702bd7 | MasterDuke17++ | Benchable.p6:
Error out before saying anything

Also use the correct pluralization when saying how many commits are being benchmarked.
Fixes #37
22:14
timotimo i have one with 277 here
lizmat good night, #perl6!
timotimo gnite lizmat 22:15
tbrowder nite lizmat! 22:52
Zoffix How can I tell if I've got a native int? 23:46
m: my int $x = 2; say $x.^name
camelia rakudo-moar 6977b8: OUTPUT«Int␤»
timotimo m: use nqp; my int $x = 4; my Int $y = 5; say nqp::objprimspec($x); say nqp::objprimspec($y); 23:52
camelia rakudo-moar 6977b8: OUTPUT«0␤0␤»
timotimo m: use nqp; my int $x = 4; my Int $y = 5; say nqp::objprimspec($x<>); say nqp::objprimspec($y<>);
camelia rakudo-moar 6977b8: OUTPUT«0␤0␤»
timotimo m: use nqp; my int $x = 4; my Int $y = 5; say nqp::objprimspec(nqp::decont($x)); say nqp::objprimspec($y<>);
camelia rakudo-moar 6977b8: OUTPUT«0␤0␤»
timotimo grmbl
AlexDaniel m: say ‘hello’; say ‘world’ 23:56
camelia rakudo-moar 6977b8: OUTPUT«hello␤world␤»
Zoffix m: use nqp; my int $x = 4; my Int $y = 5; say nqp::isint($x); say nqp::isint($y);
camelia rakudo-moar 6977b8: OUTPUT«0␤0␤»