»ö« 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. |
|||
00:02
bkbk left
|
|||
timotimo | oh yes! i made it work! | 00:02 | |
the diff is scary-small. but i didn't put the changes to the perl6 script in yet | |||
someone needs to do the equivalent changes for windows | 00:03 | ||
oh my, the create-jvm-runner script is daunting | 00:05 | ||
TimToady | rn: say map { $_.substr(0, *-2) => $_.substr(1) }, <foo bar>; | 00:07 | |
camelia | niecza v24-88-g1f87209: OUTPUT«Unhandled exception: Unable to resolve method substr in type Any at /tmp/3AMUsXB1zx line 1 (ANON @ 4)  at /tmp/3AMUsXB1zx line 1 (mainline @ 3)  at /home/p6eval/niecza/lib/CORE.setting line 4579 (ANON @ 3)  at /home/p6eval/niecza/lib/CORE.setting l… | ||
..rakudo 45fb1b: OUTPUT«"f" => "oo" "b" => "ar"» | |||
TimToady | rakudo (and niecza) should be recognizing the implicit reference to $_ by .substr, methinks | 00:09 | |
timotimo | hey TimToady. froggs and me were discussing wether or not <-[@arr]> should throw "null regex not allowed" if @arr happens to be empty; or wether or not <-[]> should throw that, too. | ||
00:11
Pleiades` left
00:15
mst___ is now known as mst,
mst left,
mst joined
|
|||
TimToady | what makes you think you can interpolate an array there? | 00:15 | |
btw, S04:1639 on the issure of .substr implying use of $_ to suppress hash composing | 00:16 | ||
synopsebot | Link: perlcabal.org/syn/S04.html#line_1639 | ||
timotimo | froggs suggested i could | 00:17 | |
i didn't know better :) | |||
TimToady | <-[abc]> treats abc as a list literal chars, so <-[@arr]> would match @, a, or r | ||
should probably warn on the duplicate r too | 00:18 | ||
timotimo | okay, that's sensible | ||
00:19
Pleiades` joined
|
|||
TimToady | nr: say "I am an @array!".comb(/<-[@arr]>/) | 00:19 | |
camelia | rakudo 45fb1b, niecza v24-88-g1f87209: OUTPUT«I m n y !» | ||
TimToady | nr: say "I am an @array!".comb(/<-[@arr]>/).join | ||
camelia | rakudo 45fb1b, niecza v24-88-g1f87209: OUTPUT«I m n y!» | ||
timotimo | depart& | 00:21 | |
00:54
berekuk left
01:40
FROGGS_ joined
01:44
FROGGS left
01:54
BenGoldberg joined
02:20
Ben_Goldberg joined
02:22
fridim_ left,
BenGoldberg left
02:25
BenGoldberg joined,
btyler joined
02:27
Ben_Goldberg left
02:45
skids joined
02:52
orafu left
02:53
OuLouFu joined,
OuLouFu is now known as orafu
02:55
Pleiades` left
02:57
Pleiades` joined
03:00
PacoAir joined
03:03
PacoAir left
03:04
PacoAir joined
03:09
PacoAir left
04:16
BenGoldberg left
04:29
Psyche^ joined,
btyler left
04:32
Psyche^_ left
04:50
birdwindupbird joined
05:09
Woodi joined
05:33
xilo left
05:47
SamuraiJack joined
05:56
abnorman left
06:08
benabik left
06:15
kingbeast left
06:45
kaleem joined
|
|||
FROGGS_ | TimToady: is /<-[]>/ supposed to throw a "Null regex not allowed" ? | 06:49 | |
06:50
FROGGS_ left
06:57
avuserow left
06:58
avuserow joined,
iSlug joined
07:09
jtpalmer_ joined,
anocelot joined,
rhr joined
07:11
FROGGS joined
07:13
iSlug left
07:14
jtpalmer left,
anocelot_ left,
rhr_ left
07:20
iSlug joined,
iSlug left,
iSlug joined
07:26
sqirrel joined
07:59
domidumont joined
08:05
Rotwang joined
08:06
daxim joined
08:07
benabik joined
08:08
fhelmberger joined
08:13
fhelmberger left
08:19
donaldh left
08:22
domidumont left
08:23
berekuk joined,
donaldh joined,
fhelmberger joined
08:24
domidumont joined,
berekuk left
08:25
berekuk joined
|
|||
mathw | o/ | 08:26 | |
08:28
fhelmberger left
08:30
fhelmberger joined
08:34
fhelmberger left,
dakkar joined,
fhelmberger joined
08:35
dayangkun joined
08:36
dayangkun left
|
|||
JimmyZ | hello | 08:39 | |
moritz | \o JimmyZ, mathw, * | 08:40 | |
08:41
donaldh left
|
|||
mathw | lo moritz, JimmyZ | 08:41 | |
08:47
DrEeevil joined,
bonsaikitten left
08:48
robinsmidsrod left,
robins joined
08:49
robins is now known as robinsmidsrod,
Myk267 joined
08:50
donaldh joined
09:02
Rotwang left
09:06
donaldh left
|
|||
hoelzro | holy crap do I love Perl 6 regexes. | 09:13 | |
that is all. | 09:14 | ||
mathw | :) | 09:18 | |
hoelzro | does Parcel not support {}? | 09:25 | |
I'd like to extract a sub-sub-match ($<timespec><hours><value>) | 09:26 | ||
09:28
eternaleye left
|
|||
hoelzro | (here's the source code: gist.github.com/hoelzro/6019135) | 09:30 | |
09:31
donaldh joined
|
|||
moritz | Parcel is purely positional | 09:34 | |
hoelzro: note that rakudo is behind the time here (more) | 09:35 | ||
<hours>? | |||
that's a quantifier | |||
so rakudo, by old spec, generates a List (or Parcel) of matches here | |||
new spec says that ? is special cased, and create a sub-Match right away | |||
hoelzro | but it *should* be generating something that supports {}? | ||
<hours>? doesn't mean "optionally match the hours regex"? | 09:36 | ||
moritz | that's what I'm just telling you | ||
it does | |||
so it's a 0 or 1 quantifier | |||
hoelzro | oh, ok | ||
good | |||
moritz | and it used to be that all quantifiers generated lists | ||
hoelzro | I see | ||
soo...I have to access sub-sub-matches by index, then? | 09:37 | ||
moritz | $<hour>[0]<your submatch here> | 09:38 | |
hoelzro | I see | 09:39 | |
moritz | and if you change the ? to a **0..1 then your code won't break when rakudo adapts to the new specs | 09:42 | |
hoelzro | hmm | ||
so under the new specs, how will it change? just $<hour><value>? | 09:43 | ||
FROGGS | ? is not a list quantifier anymore... it was changes in march or april in nqp/rakudo | 09:46 | |
nr: say "abc" ~~ /$<hour>=[ \w ]?/ # there is no zero as a key | 09:49 | ||
camelia | rakudo 45fb1b, niecza v24-88-g1f87209: OUTPUT«「a」 hour => 「a」» | ||
FROGGS | nr: say "abc" ~~ /$<hour>=[ \w ]**0..1/ # compared to this | ||
camelia | rakudo 45fb1b, niecza v24-88-g1f87209: OUTPUT«「a」 hour => 「a」» | ||
FROGGS | ? | ||
09:53
eternaleye joined
|
|||
FROGGS | r: my regex value { \w }; my regex hour { <value>**0..3 }; "abc" ~~ /<hour>?/; say $<hour>[0] # this shows it | 09:54 | |
camelia | rakudo 45fb1b: OUTPUT«(Any)» | ||
FROGGS | r: my regex value { \w }; my regex hour { <value>**0..3 }; "abc" ~~ /<hour>**0..1/; say $<hour>[0] # this shows it | ||
camelia | rakudo 45fb1b: OUTPUT«「abc」 value => 「a」 value => 「b」 value => 「c」» | ||
FROGGS | but I am curious why this doenst give an array: | 09:55 | |
r: "abc" ~~ /$<hour>=[ \w ]**0..1/; say $<hour>[0] | |||
camelia | rakudo 45fb1b: OUTPUT«(Any)» | ||
FROGGS | r: "abc" ~~ /$<hour>=[ \w ]**0..1/; say %<hour> # rakudobug me thinks | 09:57 | |
camelia | rakudo 45fb1b: OUTPUT«「a」» | ||
FROGGS | r: "abc" ~~ /$<hour>=[ \w ]**0..1/; say @<hour> # rakudobug me thinks | ||
camelia | rakudo 45fb1b: OUTPUT«「a」» | ||
FROGGS | r: "abc" ~~ /$<hour>=[ \w ]**0..1/; say &<hour> # rakudobug me thinks | ||
camelia | rakudo 45fb1b: OUTPUT«「a」» | ||
FROGGS | std: "abc" ~~ /$<hour>=[ \w ]**0..1/; say &<hour> # rakudobug me thinks | ||
camelia | std c2215f0: OUTPUT«ok 00:01 46m» | ||
hoelzro | is there a builtin for executing an external command? like Perl 5's system()? | 09:59 | |
FROGGS | r: qx(`ls`) | 10:00 | |
camelia | rakudo 45fb1b: OUTPUT«===SORRY!===Unable to parse expression in argument list; couldn't find final ')'at /tmp/zDnqVAWTnI:1------> qx(⏏`ls`) expecting any of: argument list prefix or term prefix or meta-prefix»… | ||
FROGGS | r: qx(ls) | ||
camelia | rakudo 45fb1b: OUTPUT«===SORRY!===Undeclared routines: ls used at line 1. Did you mean '&lc'? qx used at line 1» | ||
FROGGS | hmmmm | ||
hoelzro | without slurping output? | ||
10:02
berekuk left
|
|||
FROGGS | r: run("ls") | 10:02 | |
camelia | rakudo 45fb1b: OUTPUT«run is disallowed in restricted setting in sub restricted at src/RESTRICTED.setting:2 in sub run at src/RESTRICTED.setting:8 in block at /tmp/xwo8PhhFni:1» | ||
FROGGS | hoelzro: ^^ | ||
hoelzro | ah, thanks! | ||
FROGGS | my qx() was bogus, it a sub call | ||
10:10
berekuk joined
10:20
grondilu joined
|
|||
grondilu | How can I use a variable as a quantizer? my $k = 2; say "foo" ~~ / o ** $k /; # does not work | 10:21 | |
FROGGS | grondilu: NYI | 10:23 | |
grondilu | ahh, too bad :/ | ||
timotimo | it's not much of a consolation, but you can create a new regex each time with eval or you can put an assertion after it that asks for the right amount :| | 10:24 | |
FROGGS | r: my $k = 2; say eval "'foo' ~~ / o ** $k /"; # :/ | ||
camelia | rakudo 45fb1b: OUTPUT«「oo」» | ||
grondilu used that ^ | 10:31 | ||
timotimo is cobbling together a "make install" target for jvm | 10:32 | ||
10:43
Bzek joined
|
|||
donaldh | timotimo: I started looking at that too. | 10:48 | |
timotimo | oh, how far along were you? | ||
i'm able to execute the "perl6" script from anywhere now | |||
tadzik | AWW YISS | 10:49 | |
timotimo | but it doesn't look into install/ and i'm pretty sure not everything that should be in there is yet | ||
jnthn | afternoon o/ | ||
donaldh | timotimo: Updated ConfigureJVM.pl and started updating Makefile-JVM.in | ||
timotimo | oh, what did you hav eto do in ConfigureJVM.pl? | 10:50 | |
donaldh | timotimo: absolute path references to nqp_prefix and reusing create_jvm_runner to put a runner with absolute paths in install/ | ||
jnthn | timotimo: Note that (if you didn't already) NQP has a different runner in the build directory and in the install | ||
donaldh | jnthn: tho the need for differences is less in rakudo. | ||
10:51
bruges joined
|
|||
donaldh | I wrote create_jvm_runner to be reusable when we need an install target. | 10:51 | |
jnthn | OK, works for me :) | ||
10:51
dmol joined
|
|||
timotimo | an important part of the whole thing was this patch: gist.github.com/timo/3976562cdf50eb045d98 | 10:51 | |
donaldh | timotimo: I guess you figured out how to get perl6 to work outside of build dir, yes? | ||
timotimo | yes, i did | ||
donaldh | blib needs to be on classpath | 10:52 | |
timotimo | yes, but not only that | ||
you also need --setting=$PREFIX/CORE | |||
otherwise it won't find the setting | |||
donaldh | jnthn: any reason for using -Xbootclasspath/a ? | ||
jnthn | donaldh: Yes. | 10:53 | |
donaldh: Avoids an indy bug... :S | |||
donaldh | oh | ||
I've been running core setting build from within Eclipse just using a normal classpath. | 10:54 | ||
timotimo | the classpath doesn't enter into it | ||
oh, maybe the patch i linked above makes it work? hold on. | |||
nope. it doesn't look in the right place unless you specify it | 10:55 | ||
donaldh | timotimo: I updated ConfigureJVM.pl to change $config{'nqp_prefix'} to an absolute path with Cwd::realpath | ||
timotimo | note that you have to actually execute some code like say "hi" in order for it to try to load the core setting | 10:56 | |
donaldh | yep | ||
timotimo | and you were able to make it work without a --setting? | 10:57 | |
donaldh | not sure, building | ||
timotimo | does the nqp_prefix actually land somewhere in the code itself? | ||
otherwise i don't know how that's supposed to help | 10:58 | ||
donaldh | nqp_prefix gets substituted into NQP_PREFIX in the Makefile | ||
Then when we create a jvm runner, it will include absolute paths to the NQP jars. | |||
timotimo | ah. yes, in my experience that's not enough | 10:59 | |
i'll point you at a bit of code, hold on | |||
10:59
pecastro left
|
|||
donaldh | timotimo: I'm not saying it is enough :-) just that it's necessary | 10:59 | |
timotimo | ah. yes indeed. | 11:00 | |
so, find_setting in ModuleLoaderVMConfig will look at the search paths, which default to . and blib/ | |||
with the patch i linked to above, it will also look into all the classpaths | |||
donaldh | I'm assuming that we don't want to copy the NQP references into rakudo install dir. After all, they are likely to be the same PREFIX. | ||
timotimo | so it's enough to add that patch i have above and add the absolute path to the directory that the .setting.jar is in to the classpath | 11:01 | |
that's right | |||
donaldh wonders if using a PERL_HOME property would be better than overloading the classpath. | |||
timotimo | all you need to do to fix that is change vm_search_path in ModuleLoaderVMConfig.nqp and change the ModuleLoader to look there, too, for all the other things | 11:02 | |
you seem to be more knowledgable about this topic, so i'll gladly let you go ahead and propose a pull-request :) | 11:03 | ||
donaldh | :) | ||
11:05
pecastro joined
|
|||
timotimo | if you have any more questions about my setup just let me know | 11:05 | |
donaldh wonders if we can reduce the duplication between ModuleLoader.nqp (nqp) and ModuleLoaderVMConfig.nqp (rakudo) | |||
timotimo | well, the VMConfig gets mixed into the ModuleLoader | 11:06 | |
oh, er | 11:07 | ||
i should probably have read the part in the parens :) | |||
donaldh gets confused by the duplicate filenames | 11:10 | ||
timotimo: I'll propose a pull request later today. Will use your patch to vm_search_paths for now. | 11:11 | ||
timotimo | cool! :) | 11:12 | |
tadzik: have you been experimenting on panda on rakudo.jvm so far? | |||
donaldh wonders where we should put CORE.setting.jar in the install dir | 11:13 | ||
tadzik | timotimo: not yet. How could I have run it without being able to run perl6 outside of rakudo directory? :) | 11:14 | |
timotimo | massive cheating :) | 11:16 | |
copy all the contents of the rakudo directory into every directory that will ever be your cwd :) | |||
tadzik | aww :) | 11:17 | |
jnthn | donaldh: The install directory may well need some more structure than it has today :) | 11:18 | |
donaldh | jnthn: indeed | 11:19 | |
:) | |||
jnthn | Segregating .jars produced from NQP and those produced from Perl 6 code would be one way, since that's where the module loader boundaries are... | ||
donaldh | Is lib used for Perl 6 generated jars and blib for nqp generated jars ? | 11:24 | |
timotimo | no | 11:25 | |
i don't think jars should go in lib | |||
jnthn | No, lib is Perl 6 source code for some modules that we include | ||
timotimo | doesn't "blib" mean "binary libs" or something? | ||
as in "compiled" | |||
moritz | it does | ||
jnthn | oh...seems we do end up putting the jar in there too | ||
timotimo | yeah, we do:( | ||
jnthn | blib is where the compiler goes, though | ||
Perl6::Grammar's JAR, etc. | 11:26 | ||
donaldh | tho afaik we never add lib to a search path | ||
11:26
cognominal joined
|
|||
jnthn | Right, -Ilib is used | 11:28 | |
donaldh | ah, I see, in t/harness | ||
jnthn | Note that on Parrot we have github.com/rakudo/rakudo/blob/nom/...fig.nqp#L2 and on JVM there's not an equivalent thing so far, iirc. | ||
That is, adding a couple of search paths based on install location. | 11:29 | ||
donaldh | Okay, so should I look at the parrot layout and replicate that? | 11:30 | |
jnthn | Perhaps somewhat, but note that we don't need to do all that complexity | 11:31 | |
For one, I don't think we need the version thing (which exists because bytecode is not compatible between Parrot versions, whereas JVM bytecode is stable). | 11:32 | ||
But yeah, some kind of bin/ and lang/nqp/... and lang/perl6/... could work out. | |||
donaldh notes that nqp install dir does not have bin/ | 11:33 | ||
jnthn | donaldh: Right, it's all flat today | 11:35 | |
11:36
amkrankruleuen joined,
amkrankruleuen left,
amkrankruleuen joined
|
|||
donaldh | I'll scrape around for tuits for an nqp patch too. | 11:36 | |
Am assuming that nqp and perl6 will likely end up in the same install PREFIX. | 11:37 | ||
jnthn | I think it's that way today on Parrot, at least. | 11:38 | |
donaldh | do we have the equivalent of parrots %conf on JVM ? | 11:39 | |
11:39
colomon joined
|
|||
jnthn | There's an nqp::jvmproperties() op, iirc | 11:40 | |
11:41
benabik left
|
|||
timotimo | indeed, we currently use that to get the java.class.path, no? | 11:41 | |
11:41
benabik joined
|
|||
FROGGS | donaldh: github.com/MoarVM/MoarVM/commit/6b...f8abe9f5eb | 11:42 | |
that is for uname though | |||
donaldh | thx | 11:43 | |
11:43
dmol left
11:44
Bzek left
|
|||
donaldh | well there's nqp::jvmclasspath and nqp::jvmgetproperties - cool. | 11:45 | |
JimmyZ | jnthn: ping | ||
jnthn is investigating the wrap.t failure at the moment | |||
JimmyZ: pong | |||
JimmyZ | jnthn: what's different between assignunchecked and assign? I can't see the difference in the codes | 11:46 | |
moritz would guess that assign does a type check, and assignunchecked doens't | |||
jnthn | What moritz said. | ||
Also rw check. | |||
JimmyZ didn't see the typecheck | 11:47 | ||
jnthn | Which container impl were you looking at? | ||
They look different in Rakudo. | |||
They probably don't for code_pair | |||
JimmyZ | jnthn: nqp on parrot | ||
moritz | I guess nqp doesn't do type checks on variables | 11:48 | |
(only on routine calls) | |||
so they would be identical | |||
JimmyZ | well, I see they in 67-container.t | ||
jnthn | Well, nqp doesn't have scalar containers either really :) | 11:49 | |
code_pair is what is used to implement Rakudo's Proxy type. | |||
JimmyZ | the test has assignunchecked and assign | ||
11:49
sqirrel left
|
|||
JimmyZ | so I'm confused | 11:50 | |
jnthn | It's checking both ops exist, but I'm guessing for code_pair it isn't looking for them to behave differently. | ||
timotimo | hm. how do i apply a role { method IS_NODAL { True } } into a method from nqp code? i can't just $codeobj.HOW.mixin($codeobj, role { ... }), can i? | ||
jnthn | See container.c in Rakudo for an example where things differ. | ||
timotimo: Well, if you do that you mix in an NQP role...when it probably should be a Perl 6 one. | 11:51 | ||
timotimo | indeed | ||
jnthn | timotimo: But don't do it this way | ||
timotimo: I think we should keep it just as an integer flag on the routine. | 11:52 | ||
timotimo | maybe i should give Routine or perhaps Method an is_nodal | ||
jnthn | timotimo: We already have an int $!rw. But that only needs one bit; we can use that field more smartly as a general routine flags one. | ||
timotimo | i do that in BOOTSTRAP.pm i guess? | ||
jnthn | Yeah, could do. | ||
timotimo | ah. i can surely multipurpose that field | ||
moritz | (and rename it in the process) | 11:53 | |
timotimo | yeah | ||
and make extra sure it doesn't check for field-is-non-null where it should mask it first | |||
jnthn | yeah, it's checked in C code in some places (and Java code too) I think | ||
JimmyZ | jnthn: PMC *target = decontainerize(interp, $1); in set_invocation_spec and set_container_spec, Is it useless? Sorry, I'm a bit confused too... | 11:54 | |
:( | |||
moritz | why would it be useless? | ||
if you do something like my $x = sub () { }; $x() | 11:55 | ||
timotimo | jnthn: i probably should define a name for the bit mask constants; where would i put something like that? | ||
moritz | it'll try to invoke the container | ||
so you need to decontainerize to get the actual code object | |||
JimmyZ | moritz: because I'd not see target was used there | ||
hmm, I just see the java one, it looks like not be used | 11:56 | ||
moritz | PMC *target = decontainerize(interp, $1); | 11:58 | |
if ($1->vtable->base_type == smo_id) { | |||
11:58
rindolf joined
|
|||
moritz | it should probalby use target instead of $1 here | 11:58 | |
JimmyZ | the jvm backend didn't use decontainerize | ||
moritz: if so, there will a example code to explore this bug? | 12:00 | ||
jnthn | timotimo: You'll probably need to do 'em separately in the C/Java as well as in the NQP code... | 12:12 | |
timotimo: There's no "constant" decl in NQP just yet. | |||
timotimo | OK | 12:14 | |
what string do i have to search for to find mention of the rw field in the c and java code? | |||
because just rw doesn't give me any of that | |||
jnthn | ->rw in the C code, perhaps | 12:15 | |
$!rw in the Java code | |||
timotimo | i'll have a few looks, thanks! | 12:16 | |
JimmyZ waits for jnthn++'s answer | 12:17 | ||
jnthn | JimmyZ: The use of $1 instead of target looks like a thinko; otoh, it's probably not likely we'll hit the issue... | 12:18 | |
timotimo | there's a HINT_ROUTINE_RW, can i safely replace that with HINT_ROUTINE_FLAGS? i put the flags field in the very same spot the rw one was in in the bootstrap code | ||
jnthn | timotimo: yes | ||
timotimo | good | 12:19 | |
JimmyZ | jnthn: so you'd like to remove that line? | ||
jnthn | JimmyZ: We can do. | 12:20 | |
JimmyZ | good, thanks very much | ||
jnthn | grr...wrap.t has multiple different ways to go wrong, it seems | ||
jnthn did fix one of them and is up to test 30 now... | 12:21 | ||
12:22
skids left
|
|||
[Coke] | parrot release away. | 12:22 | |
timotimo | jnthn: did you read the comments about invokedynamic? how much invokedynamic is in rakudo.jvm so far? because a friend of mine is working on this alternative jvm called "avian" that is currently able to run scala and if we get rid of invokedynamic (which is supposedly broken beyond repair at the moment anyway) we could try to get it to run on that as well :) | ||
moritz | huh, invokedynamic is broken? | 12:23 | |
jnthn | timotimo: I did some benchmarks while adding invokedynamic, and it did help. | ||
timotimo | in java 7, it's usually slower than using reflection manually | ||
jnthn | timotimo: However, some usages of it that I'd expected might be faster were not, so it takes some care to work out where it helps or doesn't... | 12:24 | |
timotimo: It's almost certainly gonna have to improve in the next JDK 'cus they're using it for Java 8 lambdas. | |||
timotimo | i hear they are going for a complete rewrite of invokedynamic | ||
jnthn | Yes, my understanding was they were doing a re-implementation, but same API. | 12:25 | |
timotimo hopes a full spectest will bring any issues with the $!rw to $!flags rewrite to light | |||
yes, indeed | |||
jnthn | I believed it was fairly far along, though. | ||
timotimo | i don't know about the status of it | 12:27 | |
12:29
benabik left,
ajr joined
12:30
ajr is now known as Guest98414,
Guest98414 is now known as ajr_
|
|||
timotimo is pleasantly surprised | 12:32 | ||
12:34
konundra joined,
colomon left
|
|||
timotimo | if someone mixes in a role that is "is nodal", it shouldn't infect the class, right? | 12:35 | |
Conjecture: we can assume is nodal on methods declared in a class that is Iterable, to save having to mark every method as nodal. Or we provide a pragma within a lexical scope that assumes is nodal, so we can use it inside Any as well - so i've marked Any as nodal, does that suffice? i'm not 100% sure about the "is Iterable" part of that definition | 12:36 | ||
jnthn | I think it's Iterable itself that'd need marking as "is nodal" | 12:37 | |
Oh, maybe Any too... | |||
timotimo: I think that we want to apply the nodality to methods at composition time. | 12:38 | ||
timotimo: oh, hm... | |||
timotimo | i put the code to do it into add_method of MethodContainer | ||
jnthn | timotimo: Any doesn't want the marker to inherit, while Iterable does... | ||
timotimo | i thought that problem would be solved with the proto thing, where if a proto is declared in an "is nodal" it should be nodal, but if a subclass that's not nodal re-implements it, it shouldn't be | 12:39 | |
but i may be hallucinating. | |||
anyway | |||
> say (<a b c>, <d e f>)».elems | |||
3 3 | |||
> say (<a b c>, <d e f>)».[0] | |||
a d | |||
\o/ | 12:40 | ||
moritz | \o/ indeed! | 12:41 | |
timotimo | in a few secs it'll work with hashes, too | 12:44 | |
12:45
PacoAir joined
12:46
benabik joined
|
|||
timotimo | say { "A" => (1, 2, 3), "B" => (5, 6, 7) }>>.[0] => ("A" => 1, "B" => 5).hash | 12:48 | |
12:59
SamuraiJack left
|
|||
jnthn | Got all but the last 2 tests of wrap.t passing :) | 13:00 | |
dalek | ast: 643ab0e | (Timo Paulssen)++ | S02-lexical-conventions/unspace.t: add a test for unspace between function and arguments |
13:01 | |
FROGGS | jnthn: same for me with bigint.t :o) | ||
timotimo | ossum :) | 13:02 | |
jnthn | Fixed S14-traits/routines.rakudo.jvm also | ||
FROGGS | swagger | ||
timotimo | was about to ask if that 1 failure was my fault :D | ||
oh. should Block get a nodal method, too? | 13:07 | ||
r: say Routine.^mro | |||
camelia | rakudo 45fb1b: OUTPUT«(Routine) (Block) (Code) (Any) (Mu)» | ||
tadzik listens to Swagger | |||
13:07
colomon joined
|
|||
timotimo | i suppose i should move it up from Routine into Block, no? perhpas even into Code?! | 13:07 | |
can a block be marked nodal? | 13:08 | ||
doesn't seem to make much sense | |||
jnthn | No, think it's Routine level | 13:10 | |
timotimo | good. i'll add a nqp::can guard to the exploding code. | ||
jnthn | +1 | 13:11 | |
timotimo | should Positional be nodal, too, i wonder? | 13:12 | |
er, associative i mean | |||
dalek | p: 937f6e4 | jnthn++ | src/vm/jvm/runtime/org/perl6/nqp/runtime/IndyBootstrap.java: Fix invocant-unshift handling. Was exposed by wrap.t, but could have come up in a variety of ways. |
13:20 | |
kudo/nom: 5e36364 | jnthn++ | src/Perl6/Metamodel/Dispatchers.nqp: Add missing decontainerize. |
|||
13:21
smash_ is now known as smash
|
|||
colomon | jnthn++ | 13:22 | |
13:26
Ulti_ is now known as Ulti
|
|||
dalek | ast: 4ffb15f | jnthn++ | integration/error-reporting.t: Rakudo JVM fudge updates. |
13:27 | |
timotimo | n: my @a = ( { key => "val" }, { key => "val" },{ key => "val" } ); say @a>>.<key>; | 13:31 | |
camelia | niecza v24-88-g1f87209: OUTPUT«Unhandled exception: Cannot use hash access on an object of type Str at <unknown> line 0 (ExitRunloop @ 0)  at /home/p6eval/niecza/lib/CORE.setting line 355 (Any.at_key @ 9)  at <unknown> line 0 (ExitRunloop @ 0)  at /tmp/OTeHg9ObIm line 0 (ANON @ … | ||
timotimo | looking for suggestions for things to test for nodality | 13:32 | |
i marked Parces "is nodal", is that sensible? seems sane to me at least. | 13:37 | ||
github.com/timo/rakudo/compare/nodal - would be interested in a review | 13:39 | ||
13:40
domidumont left
13:41
kaleem left
13:42
rindolf left
13:49
skids joined
13:52
bluescreen10 joined,
jaldhar left
13:55
rindolf joined
|
|||
colomon thinks JVM must be getting very close to 99% now.... | 13:57 | ||
13:58
benabik left,
benabik joined
|
|||
timotimo | it should, yeah | 14:00 | |
FROGGS | well, it already was at 98.51% | ||
[Coke] | I didn't see any improvement from the post-run commits yesterday, though I might have made a mistake during the run manually | 14:02 | |
timotimo | huh, when was that? | ||
colomon | I'm showing us up ~90 passing tests since yesterday | 14:03 | |
colomon just discovered the comment "THIS IS A TESTING HACK!!!!!" in his shipped production code. :( | 14:04 | ||
[Coke] | colomon: including the commits from this morning? | ||
colomon | [Coke]: yes | ||
but I'm not sure exactly when yesterday my reference run was | 14:05 | ||
[Coke] | r: say (25794 + 90) + 26183 # 90 more than yesterday? | 14:06 | |
r: say (25794 + 90) / 26183 # 90 more than yesterday? | |||
that's 98.85 | |||
camelia | rakudo 45fb1b: OUTPUT«52067» | ||
rakudo 45fb1b: OUTPUT«0.988580» | |||
[Coke] | need 38 more to crack 99 | ||
moritz | what's the Unicode character that folks use in tags of their Perl 6 talks? | 14:09 | |
ah | |||
.uni 蝶 | |||
.u 蝶 | |||
yoleaux | No characters found | ||
moritz | oh, and is it correct that YAPC EU speakers don't have to pay any conference fees (and thus don't have to buy a ticket)? | 14:10 | |
moritz just booked flight and hotel | 14:12 | ||
jnthn | moritz: Yes, provided you're giving a full-length talk | ||
moritz: (e.g. non-lightning) | |||
moritz: act.yapc.eu/ye2013/price/index.html | |||
timotimo | what'll your talk be about, moritz? :) | 14:13 | |
moritz | exceptions and error reporting | 14:15 | |
timotimo | cool. that contains the "user-oriented stacktrace" you came up with ~half a year ago? | 14:16 | |
moritz must prepare slides :-) | |||
timotimo: yes | |||
timotimo | i like that :) | ||
moritz | and I plan to talk a bit about the culture | 14:17 | |
"LTA error? bug!" | |||
timotimo | just yesterday i bragged about that fact to my local functional programmer's meetup group | 14:22 | |
14:24
xilo joined
|
|||
timotimo | sub foo does business-as("frobbing the data") - looks pretty good :) | 14:25 | |
[Coke] | github.com/mame/quine-relay ... wow. | 14:26 | |
moritz | or maybe sub foo() is reponsible-for('frobbing the data') { } | ||
[Coke] | (quine) no perl6, but does include pasm | 14:27 | |
14:27
btyler joined
|
|||
FROGGS | [Coke]: yeah, but it is a bit scary too | 14:27 | |
timotimo | oh, that's even nicer | ||
moritz | well, from a compiler writer's perspective it's not all too scary | 14:28 | |
you need two things | |||
1) a way to write a quine in one language, and have it do whatever you want | |||
2) know how to encode strings in each language, and print to STDOUT | |||
and then you can go backwards, and generate the code for each stage | 14:29 | ||
timotimo | can you encode unary numbers into the amount of languages the quine goes through before it does something special? | ||
moritz | hm, but that doesn't quiet tell you to make it quine in the end | ||
14:33
benabik left
14:34
benabik joined
|
|||
dalek | ast/nodal_tests: 5e6d3e1 | (Timo Paulssen)++ | S03-metaops/ (2 files): nodal-hyper.t: first bunch of nodality tests |
14:36 | |
timotimo | github.com/rakudo/rakudo/pull/180 - i started a discussion-pullrequest for nodality | 14:37 | |
14:39
perigrin_ is now known as perigrin
|
|||
timotimo | github.com/rakudo/rakudo/pull/178 - this is ready to merge as well (the nqp ops in questioon have been in nqp for 5 days as well) | 14:39 | |
dalek | kudo/nom: ffe7588 | (Timo Paulssen)++ | src/core/IO.pm: use nqp::file{read,writ,execut}able/fileislink on parrot and jvm |
14:42 | |
kudo/nom: 62b50c0 | (Tobias Leich)++ | /: Merge pull request #178 from timo/rwxl_nqp_ops use nqp::file{read,writ,execut}able/fileislink on parrot and jvm |
|||
timotimo | thank you :D | 14:43 | |
14:43
mucker joined
|
|||
FROGGS | timotimo: somebody else should decide about #180 though... | 14:43 | |
timotimo | yes, i was asking for a discussion, rather than an immediate merge (there really ought to be a bit you can set to make that clear) | 14:44 | |
FROGGS | yeah, and I cant even discuss about it :P | ||
mucker | quick query, I want to develop a forthish langhage. Can I go for nqp ? | ||
FROGGS | well, actually I could but it wouldn't be more than babbling | ||
moritz | mucker: having thought about it for 10 seconds, I don't see a big obstacle | 14:45 | |
but that doesn't mean too much | |||
mucker | moritz: C bindings are the only problem I see | 14:46 | |
moritz | you might need some cleverness wrt argument passing, because the stack isn't exposed directly | ||
14:46
jmpy joined
|
|||
colomon | forth doesn't need argument passing… just make an array that acts as The Stack and you should be good, I'd reckon. | 14:47 | |
timotimo | rakudo offers pretty good NativeCall reprs, so i suppose you could copy a bit of what rakudo does for your forth-ish language | ||
mucker | timotimo: that's great ! | ||
timotimo | (disclaimer: i don't actually know much except that our nativecall module is really nice) | 14:48 | |
mucker | if it works may i'll put it for julython | ||
jnthn | NativeCall in Rakudo is a language sugar layer; the primitives for C interop are in nqp :) | 14:50 | |
FROGGS | (and it really is sweet) | ||
mucker | how is the jvm branch ? | 14:51 | |
FROGGS | mucker: 98.5%+ | ||
mucker | awesome | 14:52 | |
timotimo | github.com/rakudo/rakudo/pull/173 - wait, this isn't merged yet? | ||
FROGGS | I'm not sure though how well nativecall is yet | ||
timotimo | i thought it was! | ||
timotimo investigates | |||
yeah, it was. | |||
jnthn | arnsholt++ is working on NativeCall support for NQP on JVM. | 14:53 | |
mucker: It's not a branch these days, either. :) | |||
timotimo | i wonder why github didn't notice. | ||
mucker | jnthn: can you make a gh-pages branch. I can contribute some notes there ? | 14:54 | |
14:56
colomon left
|
|||
donaldh | jnthn: do you know if arnsholt has committed anything for NativeCall support on JVM ? | 14:57 | |
jnthn: also, does it make sense to refactor Ops.java into multiple files before it gets any bigger? | 14:59 | ||
e.g. FileOps, NativeCallOps, etc. | |||
jnthn | mucker: gh-pages? | 15:03 | |
donaldh: Not sure, but I think when I last talked with him about it, the native call ops were gonna go off in a separate file. | |||
mucker | jnthn: in github every project can have a static website in gh-pages branch | ||
15:07
notjack joined
|
|||
arnsholt | donaldh: In my (stealth) branch, I'm making a NativeCallOps.java | 15:08 | |
donaldh | arnsholt: stealth as in fork ? | 15:09 | |
arnsholt++ | 15:10 | ||
arnsholt | Nah, just an unpushed branch | ||
donaldh | :) | ||
arnsholt | It's all a bit unstructured and ugly ATM, so I'm keeping it unpushed | ||
FROGGS .oO( ahh sssss push it ) | |||
meh | |||
arnsholt | I'll push it once I have something that works a tiny bit | ||
FROGGS | :o) | ||
jnthn | mucker: Hm, we don't currently have docs there though, and it's probably not good to start putting them in two different places. | 15:11 | |
15:11
konundra left
15:20
kaare__ joined
|
|||
hoelzro | is there a way in Actions install_method to determine what "kind" of method is being installed? | 15:20 | |
ex. regex, rule, method, submethod, etc | |||
FROGGS | .WHAT should tell you, no? | 15:21 | |
rr: say (my regex { \w }).WHAT; say (my sub { }).WHAT; say (my method { }).WHAT; say (my submethod { }).WHAT | 15:22 | ||
r: say (my regex { \w }).WHAT; say (my sub { }).WHAT; say (my method { }).WHAT; say (my submethod { }).WHAT | |||
camelia | rakudo 62b50c: OUTPUT«(Regex)(Sub)(Method)(Submethod)» | ||
FROGGS | r: say (my regex { \w }).WHAT; say (my sub { }).WHAT; say (my method { }).WHAT; say (my submethod { }).WHAT; say (my rule { }).WHAT | ||
camelia | rakudo 62b50c: OUTPUT«(Regex)(Sub)(Method)(Submethod)(Regex)» | ||
hoelzro | FROGGS: calling .WHAT on what, though? | 15:23 | |
on $code? | |||
FROGGS | I'd guess so... exactly are you (in code)? | ||
where* | 15:24 | ||
hoelzro | Actions.pm | ||
around like 2734 | |||
in install_method | |||
FROGGS | Perl6::Actions? | ||
hoelzro | yes | 15:25 | |
in rakudo | |||
(I had an idea for a "friendlier" error message) | |||
15:25
kaleem joined
|
|||
jnthn | $code.HOW.name($code) is probably safer. | 15:26 | |
FROGGS | meh | 15:28 | |
2 minutes too late -.- | |||
15:29
YoungFrog joined
|
|||
[Coke] | I will have to kick off the java run slightly later than normal today, jnthn, so you have another 90m or so before I start it. just in case, you know. | 15:30 | |
15:30
rindolf left
|
|||
FROGGS | hehe | 15:30 | |
15:31
ajr_ left
|
|||
moritz | hoelzro: fwiw the "correct" think to do is to throw a typed exception, and simply pass the code object to it | 15:32 | |
hoelzro: and then the method message of that exception type can use the type | |||
15:32
ajr joined
|
|||
hoelzro | er, I guess this is a warning message | 15:33 | |
so that might change things up a bit | |||
15:33
ajr is now known as Guest75894,
Guest75894 is now known as ajr_
|
|||
moritz hopes not | 15:33 | ||
it could be that we don't have p6 level exceptions for those though | |||
jnthn | You can worry_typed or so | 15:34 | |
hoelzro | well, here's what I'd like to add | ||
jnthn | (once having added the exception) | ||
hoelzro | consider this: sub foo { regex bar { ... } } | ||
Rakudo complains Useless declaration of a has-scoped method in mainline | |||
so I'd like it to say: "Useless declaration of a has-scoped method in mainline (did you mean 'my regex bar'?)" | 15:35 | ||
moritz | oh oh oh | ||
that's still LTA | |||
hoelzro | LTA? | ||
moritz | how about 'Useless declaration of a has-scoped regex(sic) inside a subroutine"? | ||
less than awesome | |||
to the casual observer it's not clear that regexes are methods | 15:36 | ||
hoelzro | I see | ||
moritz | so we should say 'regex' instead of 'method' | ||
and it's not in the mainline either | |||
hoelzro | ok, makes sense | ||
moritz | if you dont' want to add that detection, just say "outside of a class, role or grammar" or so | ||
FROGGS | you can still add the "did you meant to do..." | ||
hoelzro | hell, I didn't realize that they were methods until I saw that error message =) | ||
I knew they were sub-like, though | |||
FROGGS: that's what I'm really concerned about | 15:37 | ||
I had to scratch my head for a few minutes before realizing what I'd done wrong | |||
FROGGS | yes, same happened here | ||
15:39
fhelmberger left
|
|||
hoelzro | so I thought it would be a simple fix for me, who has only a passing familiarity with the Rakudo source =) | 15:40 | |
15:40
colomon joined
15:47
kaleem left
15:48
jmpy left
15:55
crazedpsyc joined
16:01
daxim left
16:05
konundra joined
|
|||
grondilu | rosettacode is down? | 16:21 | |
16:25
SamuraiJack joined
16:28
mls left
16:31
sqirrel joined
|
|||
TimToady | yes, been down since last night, I think | 16:31 | |
16:32
ajr_ left
16:38
rindolf joined
|
|||
TimToady | FROGGS: there's no regex inside the [] of <-[]> to be a null regex; it's just an empty list of characters to (not) match | 16:39 | |
FROGGS | k, understand | 16:40 | |
timotimo | TimToady: in case you didn't see already, my PR for nodality is up and there's a few remaining questions | ||
jnthn | So it's equivalent to <?> I guess | ||
TimToady | no, that's 0-width, so really equivalent to . | 16:41 | |
jnthn | oh | ||
yeah :) | |||
TimToady | <![]> would be equivalent to <?> | 16:42 | |
er,wait | |||
yeah, I think so, but lemme drink some caffeine to see if I wake up | |||
jnthn | ;) | 16:43 | |
TimToady | timotimo: I will look at it, assuming there's a link in the backlog somewhere. | ||
had to take an extra antihistimine last night, and it's taking extra long to wear off... | 16:44 | ||
FROGGS | TimToady: linky: github.com/rakudo/rakudo/pull/180 | 16:46 | |
16:46
FROGGS left
|
|||
TimToady strongly suspects there is now a link in the backlog... :) | 16:47 | ||
16:53
abnorman joined
16:56
sqirrel left,
donaldh left
|
|||
diakopter | .tell FROGGS www.hanselman.com/blog/MakingABette...dLine.aspx | 17:04 | |
yoleaux | diakopter: I'll pass your message to FROGGS. | ||
17:08
FROGGS joined,
dakkar left
|
|||
FROGGS | . | 17:12 | |
yoleaux | 17:04Z <diakopter> FROGGS: www.hanselman.com/blog/MakingABette...dLine.aspx | ||
diakopter | heh | 17:13 | |
lizmat | good *, #perl6! | 17:17 | |
17:17
kaare__ is now known as kaare_
|
|||
lizmat | checking on backlog, I find potential issues with some tests I've written on the JVM: irclog.perlgeek.de/perl6/2013-07-16#i_7332646 | 17:17 | |
however, if I look at the roast data of today, I don't see any errors | 17:18 | ||
but I also don't see any changes in the test files | |||
diakopter | which roast data | 17:19 | |
lizmat | github.com/coke/perl6-roast-data/b...ummary.out | ||
17:19
SamuraiJack_ joined
17:21
SamuraiJack left
17:22
pecastro_ joined
|
|||
colomon | lizmat: I'm getting failures in that file right now | 17:23 | |
diakopter | lizmat: I think [Coke] hasn't run it since then | 17:24 | |
lizmat | could you gist them for me? | ||
17:24
pecastro left
17:25
birdwindupbird left
|
|||
colomon | lizmat: gist.github.com/colomon/6022597 | 17:25 | |
lizmat | colomon++ | ||
colomon | lizmat: looking at the code, I'm not sure is_deeply is appropriate for those tests. | 17:26 | |
colomon isn't sure it isn't, either. he is confused, mostly | 17:27 | ||
lizmat | ah, why not? Maybe I'm too used to Test::More's is_deeply ? | ||
17:27
stevan_ left
17:28
SamuraiJack_ left
|
|||
colomon | truth be told, I never use is_deeply | 17:29 | |
it's calling eqv to compare the two sides -- does that make sense? | 17:30 | ||
might be we're looking at an infix:<eqv> bug in jakudo | |||
lizmat | no, actually, I think I know why they're wrong | 17:31 | |
colomon is listening | 17:32 | ||
colomon is listening to a 4-year-old sing the music from the attack on the Death Star in Star Wars | |||
lizmat | gist.github.com/lizmat/6022675 | 17:33 | |
could you try that? | |||
17:33
Rotwang joined
17:34
SamuraiJack_ joined,
mucker left
17:35
pecastro_ is now known as pecastro
17:36
kaare__ joined
|
|||
colomon | oh! | 17:36 | |
wait a minute | |||
lizmat | .oO( counting down ) |
||
colomon | this totally looks like a sort issue | 17:37 | |
though with that change it works | |||
lizmat | you mean, my patch did not fix the problem ? | ||
ok, pushing :-) | |||
dalek | ast: cd2d064 | (Elizabeth Mattijsen)++ | S32-hash/delete-adverb.t: Remove hash key order dependency, spotted while testong on rakudo.jvm |
||
colomon | but why does it work? seems like that change should make it worse, not better | 17:38 | |
17:38
kaare_ left
|
|||
lizmat | afaik, %h{*} is really the same as %h{ %h.keys } | 17:39 | |
at least current implementation wise | |||
moritz | shouldn't it be the same as %h ? | ||
diakopter | that expands? | 17:40 | |
moritz | aye | ||
diakopter | hunh. | ||
colomon | lizmat: either way, aren't you relying on the order of the keys in the hash being stable? | ||
17:40
domidumont joined
|
|||
diakopter | .tell yoleaux gtfo | 17:41 | |
lizmat | well, I'm assuming Perl 5's new hash key order behaviour | ||
[Coke] | lizmat: the run hasn't been done yet today. | ||
the roast version is fixed, though, so that fix won't help today's run. :) | |||
jnthn: I'm about to pull the trigger. | 17:42 | ||
colomon | lizmat: isn't writing hash tests that depend on *any* key order behavior incorrect? | ||
lizmat | colomon: Perl 5 guarantees that the order of "keys" and "values" is the same while no changes are made to the hash | 17:43 | |
but can be different in different runs, or even on different hashes being set up the same way | |||
TimToady | .tr ジャー区道 | 17:46 | |
lizmat | if the consensus is that anything related to order in hashes should be tested with a "sort" around it, I can do that :-) | ||
TimToady | enobot | ||
lizmat | .oO( seems to be a hard one to translate ) |
||
[Coke] | r: say 3 | ||
camelia | rakudo 62b50c: OUTPUT«3» | ||
[Coke] | ah, she's back. awesome. | ||
lizmat | .tr ジャー区道 | 17:47 | |
[Coke]: that's Camelia, yoleaux seems to be AWOL | |||
FROGGS | yoleaoux is still absent | ||
17:48
ChanServ sets mode: +o diakopter
|
|||
diakopter | (inviting yoleaux) | 17:48 | |
(oh yeah, don't need to do that) | |||
17:48
diakopter sets mode: -o diakopter
|
|||
notjack | perl6: say 'foo' ~~ /<[a-z] - [a-z]>/; | 17:51 | |
camelia | niecza v24-88-g1f87209: OUTPUT«===SORRY!===Unsupported use of - as character range; in Perl 6 please use .. at /tmp/hEMkN140R8 line 1:------> say 'foo' ~~ /<[a-z⏏] - [a-z]>/;Parse failed» | ||
..rakudo 62b50c: OUTPUT«===SORRY!===Unsupported use of - as character range; in Perl 6 please use .. for range, for explicit - in character class, escape it or place as last thingat /tmp/wqz308_zTD:1------> say 'foo' ~~ /<[a-⏏z] - [a-z]>/;»… | |||
notjack | perl6: say 'foo' ~~ /<[a..z] - [a..z]>/; | ||
camelia | rakudo 62b50c, niecza v24-88-g1f87209: OUTPUT«Nil» | ||
17:52
colomon left
17:53
stevan_ joined
17:54
stevan__ joined
|
|||
FROGGS | perl6: say 'foo' ~~ /<[a..z] - [a..eg..z]>/; # I am a bit curious about the space chars around - | 17:54 | |
camelia | rakudo 62b50c, niecza v24-88-g1f87209: OUTPUT«「f」» | ||
FROGGS | cool | ||
TimToady | .tr :jp :en 邪悪道 | 17:55 | |
or maybe that | |||
:) | |||
FROGGS | but we are not evil | 17:57 | |
17:57
stevan_ left
|
|||
TimToady | we are not the referent :) | 17:57 | |
17:58
domidumont left,
domidumont joined,
domidumont left
17:59
spider-mario joined
18:01
colomon joined
|
|||
lizmat | colomon: is S32-hash/perl.t still giving errors on JVM as well ? | 18:02 | |
colomon | lizmat: probably. one moment. | ||
yes, tests 1, 5, | 18:03 | ||
9 | |||
# got: '("b" => 2, "a" => 1).hash' | |||
# expected: '("a" => 1, "b" => 2).hash' | 18:04 | ||
18:04
yoleaux joined,
ChanServ sets mode: +v yoleaux
|
|||
lizmat | ok, I guess this then boils down to the question: do we want .perl to return a repeatable / ordered set of keys or not for hashes | 18:04 | |
colomon | probably not, I'd say | ||
lizmat | .gist probably should, I guess | 18:05 | |
but not .perl, right ? | |||
colomon | is it even possible? I mean, Str keys, sure. | 18:06 | |
but do a Hash's keys have to have an ordering? | |||
lizmat | well, the idea of .perl is that we can roundttrip with eval() | ||
18:06
Kelder is now known as Ayiko
|
|||
lizmat | order of keys thus doesn't matter there | 18:06 | |
.gist is more for human consumption | 18:07 | ||
having keys sorted then might be something desireable? | |||
colomon doesn't know -- would never try to .gist or .Str a Hash other than for very casual reasons | 18:09 | ||
dalek | ast: ca7012f | (Elizabeth Mattijsen)++ | S32-hash/perl.t: Make sure we don't depend on order of keys in Hash.perl (spotted in rakudo.jvm tests) |
||
lizmat continuing on backlog | 18:12 | ||
jnthn: re irclog.perlgeek.de/perl6/2013-07-16#i_7334236 : shouldn't that be &?BLOCK ? | 18:16 | ||
donaldh: re irclog.perlgeek.de/perl6/2013-07-17#i_7336519 : yes, I think they should be merged back again and/or redeveloped according to S11 | 18:25 | ||
dalek | rl6-roast-data: eca1543 | coke++ | / (5 files): today (automated commit) |
18:38 | |
[Coke] | rakudo.jvm (98.82%) | ||
lizmat | caught up on backlog, afk& | 18:39 | |
nwc10 | Should I be happy that that is really high, or disappointed that it's almost but not quite 99%? | ||
[Coke] | pretty sure we'll hit 99 tomorrow. | 18:40 | |
nwc10 | and then yay, first 99% done? :-) | ||
lizmat | yeah, at least 9 tests should pass tomorrow | 18:41 | |
jnthn | How many testse to 99%? :) | ||
yoleaux | 18:05Z <diakopter> jnthn: there's a bunch of places I'm finding that need the MVM_ASSIGN macro | ||
18:06Z <diakopter> jnthn: need to do a full code audit one of these days | |||
18:10Z <diakopter> jnthn: er, MVM_ASSIGN_REF | |||
benabik | nwc10: Onto the next 99% | 18:42 | |
[Coke] | jnthn: 47 left. and I think we missed a few fixes to roast tests, so probably 45. | ||
lizmat | 47 - 9 = 38 | 18:43 | |
S32-hash/delete-adverb andS32-hash/perl should also pass now | 18:44 | ||
dalek | rlito: 7bc2bb9 | (Flavio S. Glock)++ | src5/lib/Perlito5/Grammar/Print.pm: Perlito5 - wip indirect-object |
18:47 | |
[Coke] | jnthn: gist.github.com/coke/5879701 updated. | 18:48 | |
jnthn | lizmat: Confirmed that here. :) | ||
[Coke] | if all of them pass, liz, that's 8. | ||
jnthn: wrap is still aborting 2 tests. | 18:51 | ||
lizmat | I thought it was 6 for delete-adverb.t. and 3 for perl.t | ||
[Coke] | new failure: control operator crossed continuation barrier | ||
lizmat: whoops, missed 1, yes. | |||
lizmat | :-) | ||
really afk now& | 18:52 | ||
jnthn | hm, seems there's 8-9 more if I can figure out why captialize.t is busted... | 18:54 | |
[Coke] | jnthn: remove the skip from S32-array/pop.t, it runs fine now. | 18:55 | |
18:57
bluescreen100 joined
|
|||
[Coke] | jnthn: I started down the capitalize path earlier thinking it was LHF, but it got weird and I gave up. I am interested to see what you find! | 18:58 | |
19:00
bluescreen10 left
|
|||
[Coke] | so, that's 10 so far, leaving 37. | 19:00 | |
jnthn | [Coke]: yeah, it's werid... | 19:01 | |
*weird | |||
[Coke] | COFFEE TIME | ||
jnthn: you hit the bottom of the rabbit hole yet? | 19:30 | ||
19:31
shlomif joined,
rindolf left,
shlomif is now known as rindolf
|
|||
dalek | rlito: 111f2fa | (Flavio S. Glock)++ | src5/lib/Perlito5/Grammar/Print.pm: Perlito5 - indirect-object - more rules |
19:34 | |
19:36
cognominal left,
cognominal joined
|
|||
moritz | jnthn: last I looked at capitalize (was quite some time ago), the problem was with some of the Unicode props in regexes | 19:42 | |
like <:L> or so | |||
19:44
pupoque joined,
pjcj_ left
19:47
pjcj joined
|
|||
colomon | wow, just found yet another test that depends on hash order. sigh. | 19:47 | |
jnthn | [Coke]: Not yet, it's something with <:L>, but then been on the phone :) | 19:48 | |
19:48
Myk267 left
|
|||
colomon | Error while reading 'TESTTOKEN': No such file or directory at ./eval-client.pl line 10 | 19:51 | |
dalek | rlito: ad54ae4 | (Flavio S. Glock)++ | src5/lib/Perlito5/Grammar/Print.pm: Perlito5 - indirect-object - fix printf() |
19:54 | |
19:54
rindolf left
|
|||
dalek | ast: 8e666ec | (Solomon Foster)++ | S16-io/bare-say.t: Make test work independent of hash order. |
19:54 | |
19:57
pupoque left
19:58
pupoque joined
20:04
prammer left
20:05
bbkr joined
20:09
SamuraiJack_ left
|
|||
jnthn | yeah, think I've got the wordcase thing fixed | 20:09 | |
colomon | \o/ | 20:10 | |
grondilu | r: say join ":", "foo fooo".match: / o xx 2 /, :g | ||
camelia | rakudo 62b50c: OUTPUT«» | 20:11 | |
jnthn | grondilu: ** | ||
20:12
donaldh joined
|
|||
grondilu | yep, found out eventually | 20:12 | |
r: my $k = 2; my $x = eval "/o xx {$k}/"; say join ":", "foo fooo".match: /<$x>/, :g | |||
camelia | rakudo 62b50c: OUTPUT«» | ||
grondilu | r: my $k = 2; my $x = eval "/o ** {$k}/"; say join ":", "foo fooo".match: /<$x>/, :g | 20:13 | |
camelia | rakudo 62b50c: OUTPUT«oo:oo» | ||
grondilu failed to reproduce an error in some other code. Ignore lines above. | |||
notjack | r: say join '.','abc' RX 'def'; | 20:14 | |
camelia | rakudo 62b50c: OUTPUT«» | ||
notjack | r: say join '.','abc'.split RX 'def'.split; | ||
camelia | rakudo 62b50c: OUTPUT«Cannot call 'split'; none of these signatures match::(Cool : Regex $pat, $limit = { ... }, :all(:$all), Mu *%_):(Cool : Cool $pat, $limit = { ... }, :all(:$all), Mu *%_):(Str:D : Regex $pat, $limit = { ... }, :all(:$all), Mu *%_):(Str:D : Cool $delimiter, $limi… | ||
FROGGS | delimiter missing | 20:15 | |
notjack | r: say join '.', /a b c/ RX /d e f/; | ||
camelia | rakudo 62b50c: OUTPUT«» | ||
moritz | r: say join ', '', ('abc'.comb RX 'def'.comb) | ||
camelia | rakudo 62b50c: OUTPUT«===SORRY!===Two terms in a rowat /tmp/KVL5e6TyPI:1------> say join ', '⏏', ('abc'.comb RX 'def'.comb) expecting any of: postfix infix stopper infix or meta-infix statement end state… | ||
lizmat | colomon: is that bare-say test not really about what .perl / .gist is returning ? | ||
notjack | FROGGS: I thought DWIM would make .split mean .split('') | ||
FROGGS | r: "abc".split | ||
moritz | notjack: that's .comb now | ||
camelia | rakudo 62b50c: OUTPUT«Cannot call 'split'; none of these signatures match::(Cool : Regex $pat, $limit = { ... }, :all(:$all), Mu *%_):(Cool : Cool $pat, $limit = { ... }, :all(:$all), Mu *%_):(Str:D : Regex $pat, $limit = { ... }, :all(:$all), Mu *%_):(Str:D : Cool $delimiter, $limi… | ||
FROGGS | r: "abc".split :all | ||
camelia | rakudo 62b50c: OUTPUT«Cannot call 'split'; none of these signatures match::(Cool : Regex $pat, $limit = { ... }, :all(:$all), Mu *%_):(Cool : Cool $pat, $limit = { ... }, :all(:$all), Mu *%_):(Str:D : Regex $pat, $limit = { ... }, :all(:$all), Mu *%_):(Str:D : Cool $delimiter, $limi… | ||
moritz | split requires a delimiter. | 20:16 | |
FROGGS | yeah | ||
moritz | use .comb if you want a list of characters | ||
FROGGS | reading the signatures here isnt ideal | ||
notjack | why does 'comb' mean 'list of characters'? | ||
r: say join '.','abc'.comb RX 'def'.comb; | |||
camelia | rakudo 62b50c: OUTPUT«» | ||
colomon | lizmat: no, it was iterating through a hash and expecting to get the results in sorted order | ||
jnthn | That's 9 more tests from capitalize.t and also 3 more from substr it seems :) | ||
moritz | notjack: because .comb in general searches through strings, and the default search is for any character | 20:17 | |
notjack | oh, as in "comb my hair" not "comb-inations" | ||
moritz | yes | ||
notjack | r: say join ' ','hi there'.comb; | 20:18 | |
FROGGS | nr: say ('abc'.comb X 'def'.comb) # what is rakudo doing? | ||
camelia | niecza v24-88-g1f87209: OUTPUT«a d a e a f b d b e b f c d c e c f» | ||
..rakudo 62b50c: OUTPUT«» | |||
rakudo 62b50c: OUTPUT«h i t h e r e» | |||
notjack | r: say ('abc'.comb RX 'def'.comb) | ||
camelia | rakudo 62b50c: OUTPUT«» | 20:19 | |
notjack | why does RX not work? Perl6 won't take its medicine. | ||
[Coke] | r: say 'abc'.comb.perl | ||
camelia | rakudo 62b50c: OUTPUT«("a", "b", "c").list» | ||
notjack | n: say ('abc'.comb RX 'def'.comb) | ||
camelia | niecza v24-88-g1f87209: OUTPUT«d a d b d c e a e b e c f a f b f c» | ||
notjack | ah | ||
lue | r: say <a b c> X <d e f> | 20:20 | |
camelia | rakudo 62b50c: OUTPUT«a d a e a f b d b e b f c d c e c f» | ||
colomon | ah? | ||
notjack | ah, niecza gets me, but rakudo doesn't. | 20:21 | |
colomon | looks like a rakudobug | ||
r: say ('abc'.comb X 'def'.comb) | |||
[Coke] | r: say <a b c> RX <d e f> | ||
camelia | rakudo 62b50c: OUTPUT«» | ||
rakudo 62b50c: OUTPUT«d a d b d c e a e b e c f a f b f c» | |||
colomon | r: say ('abc'.comb X 'def'.comb) | 20:22 | |
camelia | rakudo 62b50c: OUTPUT«» | ||
[Coke] | r: say ('abc'.comb X 'def'.comb).WHAT | ||
camelia | rakudo 62b50c: OUTPUT«(List)» | ||
notjack | say: 6.HOW | ||
r: say 6.HOW | |||
camelia | rakudo 62b50c: OUTPUT«Perl6::Metamodel::ClassHOW.new()» | ||
notjack | r: say 6.WHY | ||
camelia | rakudo 62b50c: OUTPUT«(Any)» | ||
notjack | r: say 6.JUSTMAKINGTHINGSUPNOW | ||
camelia | rakudo 62b50c: OUTPUT«No such method 'JUSTMAKINGTHINGSUPNOW' for invocant of type 'Int' in block at /tmp/4Tb64Ww0Zi:1» | ||
notjack | there are seriously WHAT HOW WHY operators? | 20:23 | |
r: say 6.WHO | |||
camelia | rakudo 62b50c: OUTPUT«().hash» | ||
notjack | heh | ||
FROGGS | and WHICH and WHERE | ||
diakopter | r: .WHY | ||
camelia | rakudo 62b50c: ( no output ) | ||
diakopter | r: .WHEN | ||
camelia | rakudo 62b50c: OUTPUT«No such method 'WHEN' for invocant of type 'Any' in block at /tmp/QxbiQbfnvs:1» | ||
20:24
kaare__ left
|
|||
notjack | r: say ('6.' ~~ <WHO WHAT WHY WHICH WHERE HOW>)>>.eval; | 20:24 | |
camelia | rakudo 62b50c: OUTPUT«False» | ||
notjack | r: say ('6.' ~>> <WHO WHAT WHY WHICH WHERE HOW>)>>.eval; | ||
grondilu | rn: for ^2 -> $i { loop (my $j=0; $j < 2; $j++) { say (state $)++ } } | ||
colomon | notjack: .WHAT and .HOW are methods, not operators | ||
camelia | rakudo 62b50c: OUTPUT«===SORRY!===Unsupported use of >> to do right shift; in Perl 6 please use +> or ~>at /tmp/HYsceLg3DD:1------> say ('6.' ~>>⏏ <WHO WHAT WHY WHICH WHERE HOW>)>>.eval;» | 20:25 | |
rakudo 62b50c: OUTPUT«0123» | |||
..niecza v24-88-g1f87209: OUTPUT«Potential difficulties: $i is declared but not used at /tmp/cN6qE_FlOk line 1:------> for ^2 -> ⏏$i { loop (my $j=0; $j < 2; $j++) { say 0101» | |||
grondilu | rn: for ^2 { loop (my $j=0; $j < 2; $j++) { say (state $)++ } } | ||
camelia | niecza v24-88-g1f87209: OUTPUT«0101» | ||
..rakudo 62b50c: OUTPUT«0123» | |||
lue | don't forget WHENCE and WHEREFORE :) | ||
dalek | p: 15a8f56 | jnthn++ | src/vm/jvm/runtime/org/perl6/nqp/runtime/Ops.java: Fixes to ischarprop. Unbusts /<:L> \w*/ regex used by wordcase, thus fixing it. |
||
ast: fe3dafd | jnthn++ | S32-str/ (2 files): Unfudges after JVM wordcase fixes. |
20:26 | ||
ast: b11b533 | jnthn++ | S32-array/pop.t: Unskip a pop test on Rakudo JVM; [Coke]++. |
|||
notjack | colomon: if SkyNet gets written in perl6, it's going to be paronomasiac | ||
colomon | sure enough | 20:27 | |
PerlJam | .oO( What does he mean "if"? ) |
||
notjack | r: say '6.' ~>> <a b c>; | ||
camelia | rakudo 62b50c: OUTPUT«===SORRY!===Unsupported use of >> to do right shift; in Perl 6 please use +> or ~>at /tmp/79tzxREPiw:1------> say '6.' ~>>⏏ <a b c>;» | ||
notjack | how do I say "$x catenate each $y"? | ||
uh, "$x catenate each @y"? | 20:28 | ||
jnthn | r: say '6.' >>~>> <a b c>; | ||
camelia | rakudo 62b50c: OUTPUT«6.a» | ||
20:28
pupoque left
|
|||
jnthn | Hm | 20:28 | |
notjack | what's the deal with sometimes needing pairs of >> and sometimes just one ? | ||
jnthn | Binary or unary operator | ||
notjack | oh, hmm | 20:29 | |
jnthn | ~ is an infix, so it needs two args | ||
notjack | so the >> sorta represents an argument? | ||
like a mnemonic or placeholder? | |||
jnthn | r: say '6.' <<~<< <a b c>; | 20:30 | |
camelia | rakudo 62b50c: OUTPUT«6.a 6.b 6.c» | ||
jnthn | That's the one | ||
Pointing it outwards means "upgrade this side's length as needed" | |||
notjack | oh, so then | ||
20:30
lelf joined
|
|||
notjack | r: say <a b c> >>~>> '.6'; | 20:30 | |
camelia | rakudo 62b50c: OUTPUT«a.6 b.6 c.6» | ||
notjack | ha! | ||
20:31
nyuszika7h left
|
|||
notjack | r: say <a b c> X~ <d e f>; | 20:31 | |
camelia | rakudo 62b50c: OUTPUT«ad ae af bd be bf cd ce cf» | ||
notjack | r: say <a b c> <<~>> <d e f>; | ||
camelia | rakudo 62b50c: OUTPUT«ad be cf» | ||
notjack | hee hee | ||
what does this do? | |||
r: say <a b c> >>~<< <d e f>; | |||
camelia | rakudo 62b50c: OUTPUT«ad be cf» | ||
20:31
nyuszika7h joined
|
|||
notjack | I guess that makes sense, kinda | 20:31 | |
what does it do for length errors? | 20:32 | ||
r: say <a b c> >>~>> <d e>; | |||
camelia | rakudo 62b50c: OUTPUT«ad be cd» | ||
jnthn | r: say '6.' >>~<< <a b c>; | ||
camelia | rakudo 62b50c: OUTPUT«Lists on both side of non-dwimmy hyperop of infix:<~> are not of the same lengthleft: 1 elements, right: 3 elements in sub hyper at src/gen/CORE.setting:14591 in sub hyper at src/gen/CORE.setting:14579 in block at src/gen/CORE.setting:14570 in block at /… | ||
notjack | cyclical | ||
jnthn | That's the error if you use the inwards-pointing form | 20:33 | |
notjack | r: say '6.' >>~>> <WHO WHAT WHERE WHY WHEN WHICH WHEREFOR HOW>; | 20:34 | |
camelia | rakudo 62b50c: OUTPUT«6.WHO» | ||
notjack | r: say '6.' <<~<< <WHO WHAT WHERE WHY WHEN WHICH WHEREFOR HOW>; | ||
camelia | rakudo 62b50c: OUTPUT«6.WHO 6.WHAT 6.WHERE 6.WHY 6.WHEN 6.WHICH 6.WHEREFOR 6.HOW» | ||
notjack | r: say ('6.' <<~<< <WHO WHAT WHERE WHY WHEN WHICH WHEREFOR HOW>)>>.eval; | ||
camelia | rakudo 62b50c: OUTPUT«No such method 'WHEREFOR' for invocant of type 'Int' in block at eval_4:1 in any at eval_4:1 in sub eval at src/gen/CORE.setting:601 in sub eval at src/gen/CORE.setting:592 in method eval at src/gen/CORE.setting:2827 in method dispatch:<hyper> at src/… | ||
notjack | r: say ('6.' <<~<< <WHO WHAT WHERE WHY WHEN WHICH HOW>)>>.eval; | ||
camelia | rakudo 62b50c: OUTPUT«No such method 'WHEN' for invocant of type 'Int' in block at eval_1:1 in any at eval_1:1 in sub eval at src/gen/CORE.setting:601 in sub eval at src/gen/CORE.setting:592 in method eval at src/gen/CORE.setting:2827 in method dispatch:<hyper> at src/gen/… | ||
notjack | r: say ('6.' <<~<< <WHO WHAT WHERE WHY WHICH HOW>)>>.eval; | 20:35 | |
camelia | rakudo 62b50c: OUTPUT«().hash (Int) 928988205 (Any) Int|6 Perl6::Metamodel::ClassHOW.new()» | ||
notjack | r: my Str @a = <some stuff I wrote>; say ('@a.' <<~<< <WHO WHAT WHERE WHY WHICH HOW>)>>.eval; | ||
camelia | rakudo 62b50c: OUTPUT«===SORRY!===Variable '@a' is not declaredat eval_0:1------> @a.HOW⏏<EOL> expecting any of: method arguments» | ||
notjack | damn you eval, and your seatbelts! | 20:36 | |
hey, is . itself a binary operator? | |||
jnthn | No, it's not handled that way | ||
notjack | how would you idiomatically express dynamically invoking multiple methods on a single object? | 20:37 | |
FROGGS | jnthn: this seems wrong I think: github.com/MoarVM/MoarVM/blob/mast...que.c#L611 | 20:38 | |
jnthn | $foo."$_"() for <some methods here> | ||
FROGGS | jnthn: cur_alloc_addr for the first slot cant be zero, which lets fail two tests of t/nqp/60-bigint.t | ||
perigrin | jnthn: no map and a mop call to look them up? | ||
FROGGS | the tests about a P6opaque boxed bigint | 20:39 | |
dalek | ast/nodal_tests: 3851684 | (Timo Paulssen)++ | S03-metaops/nodal-hyper.t: no longer rely on hash ordering. |
||
jnthn | FROGGS: I think it's right; offsets are relative to the start of the object, iirc | ||
FROGGS | hmmm | 20:40 | |
notjack | r: my Str @a = <some stuff I wrote>; say join "x", @a."$_"() for <WHO WHAT WHERE WHY WHICH HOW>; | ||
camelia | rakudo 62b50c: OUTPUT«No such method 'WHO' for invocant of type 'Array+{TypedArray}' in block at /tmp/lUn1ZhLSnK:1» | ||
jnthn | perigrin: I think that'd come out longer... | ||
FROGGS | jnthn: that is my test case gist.github.com/FROGGS/c865b021b1eb5420337f | 20:41 | |
the second say-statement gives zero, when it should be 4 | |||
jnthn | FROGGS: Um...does the code in question explicitly check we're getting a P6bigint REPR and do something smart if not? | 20:42 | |
FROGGS | set_int in P6opaque gets the correct value, and passes it to P6bigint, but the pointer it gets to store data to is off I think | ||
notjack | r: divide by 0 or else; | ||
camelia | rakudo 62b50c: OUTPUT«===SORRY!===Undeclared routines: by used at line 1 divide used at line 1 else used at line 1» | ||
20:42
BenGoldberg joined
|
|||
FROGGS | jnthn: you mean as the :type parameter? | 20:43 | |
argument* | 20:44 | ||
this snippet is from bigint.t, which succeeds on nqp@parrot | |||
notjack | r: say 'abc'.comb('c'); | 20:45 | |
camelia | rakudo 62b50c: OUTPUT«Cannot call 'comb'; none of these signatures match::(Cool : Mu *%_):(Cool : Regex $matcher, $limit = { ... }, Mu *%_):(Str:D : Mu *%_):(Str:D : Regex $pat, $limit = { ... }, :match(:$match), Mu *%_) in method comb at src/gen/CORE.setting:2800 in block at /… | ||
notjack | r: say 'abc'.comb(/c/); | ||
camelia | rakudo 62b50c: OUTPUT«c» | ||
notjack | r: say 'abc'.comb(/<-[b]>/); | ||
camelia | rakudo 62b50c: OUTPUT«a c» | ||
notjack | r: say 'abc'.comb(/(.)<-[b]>/); | ||
camelia | rakudo 62b50c: OUTPUT«bc» | ||
FROGGS | nqp@parrot calculates some alignment for the attribute offsets... but stealing that piece just breaks more tests | 20:46 | |
jnthn | FROGGS: I mean I'm not sure the bigint ops like nqp::tostr_I handle the P6bigint inside a P6opaque | ||
notjack | r: regex not2b {<-[b]>}; say 'abc'.comb(/not2b/); | ||
camelia | rakudo 62b50c: OUTPUT«Useless declaration of a has-scoped method in mainline» | ||
jnthn | So it may be that the nqp::box_i works correctly | ||
notjack | r: regex not2b {<-[b]>}; say 'abc'.comb(not2b); | ||
camelia | rakudo 62b50c: OUTPUT«Useless declaration of a has-scoped method in mainline===SORRY!===Undeclared routine: not2b used at line 1. Did you mean '¬e'?» | ||
FROGGS | jnthn: I just can say that it works for nqp@parrot, so I though nqp@moarvm must also | ||
20:46
konundra left
|
|||
jnthn | FROGGS: Yes, it should work, but we're still in the middle of implementing the bigint stuff on MoarVM. | 20:47 | |
FROGGS | jnthn: ahh, and when using fromstr_I instead of box_i, it works | ||
jnthn | That may be for wrong reasons too ;-) | ||
FROGGS | bah *g* | 20:48 | |
FROGGS goes deeper into the rabbit hole | |||
dalek | kudo/nom: a8ca889 | jnthn++ | src/vm/jvm/Perl6/Ops.nqp: Removed outdated comment. |
20:49 | |
timotimo | you've been forgetting about .WHENCE | ||
20:51
cognominal left,
cognominal joined
|
|||
lee_ | gist.github.com/leedo/c5c9a35920d0e7755238 a little REPL bug. i seem to remember a similar error being fixed a few weeks ago | 20:53 | |
but maybe it didn't apply to expressions that throw errors | |||
jnthn | Hm | 20:54 | |
lee_ | github.com/rakudo/rakudo/commit/c9...8cf3f051cf | ||
was the previous fix | |||
jnthn can't reproduce it here. | 20:55 | ||
lee_ | i'll update everything and retry, shoulda done that before | ||
20:58
prammer joined
20:59
stevan__ left
21:07
skids left
21:08
rurban joined
21:11
Ben_Goldberg joined
21:12
BenGoldberg left
21:14
stevan_ joined
|
|||
lee_ | well that did indeed fix it, sorry about that! | 21:15 | |
FROGGS | jnthn: so, in coerce_Is I should call REPR->box_funcs->get_int, instead of just MVM_bigint_to_str, right? | 21:17 | |
jnthn | FROGGS: No | 21:19 | |
FROGGS | :/ | ||
jnthn | FROGGS: MVM_bigint_to_str needs to understand the other case | ||
FROGGS | ahh, okay | ||
jnthn | If it's factored like on JVM or Parrot, there's a "find the underlying bigint" function that all of those MVM_bigint_ things call at some point. | 21:20 | |
21:22
bbkr left
|
|||
FROGGS | MVM_get_bigint | 21:22 | |
it does only that right now: return &((P6bigint *)obj)->body.i; | |||
jnthn | um, yeah, that's a bad idea :) | 21:23 | |
FROGGS | cool, I like that moment when the light strikes my head a bit... | ||
:o) | |||
diakopter | LOLOLOLOL | ||
FROGGS | thank you | ||
21:25
Celelibi left
|
|||
timotimo | i'm not able to make that fix myself, but *by* *god* is the "missing or outdated version of *foo*" error annoying when it doesn't say what module is causing that error | 21:27 | |
21:27
spider-mario left,
Celelibi joined
21:29
Gruber is now known as Grrrr
21:35
PacoAir left
|
|||
notjack | perl6: say 'lol' xx 12; | 21:36 | |
camelia | rakudo a8ca88, niecza v24-88-g1f87209: OUTPUT«lol lol lol lol lol lol lol lol lol lol lol lol» | ||
notjack | perl6: say join'','lol' xx 12; | 21:37 | |
camelia | niecza v24-88-g1f87209: OUTPUT«===SORRY!===Two terms in a row (listop with args requires whitespace or parens) at /tmp/NEx2NFtVqI line 1:------> say join⏏'','lol' xx 12;Parse failed» | ||
..rakudo a8ca88: OUTPUT«===SORRY!===Two terms in a rowat /tmp/h8ipaw54kt:1------> say join⏏'','lol' xx 12; expecting any of: argument list postfix infix stopper infix or meta-infix statement end st… | |||
notjack | perl6: say join '','lol' xx 12; | ||
camelia | rakudo a8ca88, niecza v24-88-g1f87209: OUTPUT«lollollollollollollollollollollollol» | ||
notjack | perl6: say join '','lo' xx 12; | ||
camelia | rakudo a8ca88, niecza v24-88-g1f87209: OUTPUT«lolololololololololololo» | 21:38 | |
diakopter | r: say 'lo'x 12 ~ 'l' | ||
camelia | rakudo a8ca88: OUTPUT«lolololololololololololol» | ||
PerlJam | r: say join 'o', 'l' xx 24; | 21:39 | |
camelia | rakudo a8ca88: OUTPUT«lololololololololololololololololololololololol» | ||
grondilu | is there an equivalent to :overlap in P5? | ||
timotimo | yeah, :exhaustive or something like that | ||
With the new :ex (:exhaustive) modifier, the current regex will match every possible way (including overlapping) and return a list of all matches. | 21:40 | ||
PerlJam | grondilu: I think you have to loop the string yourself. | ||
donaldh | Urg. Getting 'This representation can not unbox to a native str' from ModuleLoader when it is trying to die with a helpful message. | 21:45 | |
21:48
konundra joined
21:53
cognominal left
|
|||
dalek | kudo/nom: d4ffd7c | jnthn++ | src/ (4 files): Get PRE/POST support mostly in place. |
21:59 | |
ast: ee62bc1 | jnthn++ | S04-phasers/pre-post.t: Unfudging for Rakudo JVM. |
|||
22:01
rurban left
22:04
ajr joined
22:05
ajr is now known as Guest33176,
Guest33176 is now known as ajr_
|
|||
jnthn | Too tired to do much more today, but hopefully those things get us closer to the 99% :) | 22:07 | |
donaldh | jnthn: Is there any way to get a source reference for a __P6opaque__NN so that SixModelObject can generate an informative unbox exception ? | ||
jnthn: or any hints for what to introspect in the Eclipse debugger? | 22:08 | ||
jnthn | donaldh: No, and they're potentially shared between types... guess the meta-object can be looked at to see if it has a name that can be introspected. | ||
obj.st.HOW | 22:09 | ||
lizmat | (also) sleep& | 22:10 | |
donaldh | hmm P6OpaqueDelegateInstance | ||
jnthn | Chase the delegate pointer | ||
donaldh | It's P6OpaqueDelegateInstances a few deep until I get to KnowHOWREPRInstance with name NQPClassHOW | 22:15 | |
jnthn | A few deep? weird. | 22:16 | |
One up from there you should have an actual NQPClassHOW instance, a field of which is a type name... | 22:17 | ||
notjack | say (1..Inf)[-1]; | 22:21 | |
r: say (1..Inf)[-1]; | |||
camelia | rakudo a8ca88: OUTPUT«Cannot use negative index -1 on Range in method gist at src/gen/CORE.setting:10544 in method gist at src/gen/CORE.setting:915 in sub say at src/gen/CORE.setting:11438 in block at /tmp/YJUfGRPl4a:1» | ||
notjack | r: say (reverse 1..Inf)[-1]; | ||
camelia | rakudo a8ca88: OUTPUT«Cannot use negative index -1 on Failure in method gist at src/gen/CORE.setting:10544 in method gist at src/gen/CORE.setting:915 in sub say at src/gen/CORE.setting:11438 in block at /tmp/drnVDxQUso:1» | ||
notjack | r: say (1..10)[-1]; | ||
camelia | rakudo a8ca88: OUTPUT«Cannot use negative index -1 on Range in method gist at src/gen/CORE.setting:10544 in method gist at src/gen/CORE.setting:915 in sub say at src/gen/CORE.setting:11438 in block at /tmp/i1lUm66xiW:1» | ||
jnthn | r: say (1..10)[*-1]; | ||
camelia | rakudo a8ca88: OUTPUT«10» | 22:22 | |
notjack | what's with the *? | ||
why doesn't plain -1 work? | |||
r: say (1..10)[*-1]; | |||
camelia | rakudo a8ca88: OUTPUT«10» | ||
notjack | r: say (1..Inf)[*-1]; | ||
camelia | rakudo a8ca88: OUTPUT«Cannot coerce Inf or NaN to an Int in method Numeric at src/gen/CORE.setting:10542 in sub infix:<+> at src/gen/CORE.setting:3278 in sub infix:<+> at src/gen/CORE.setting:3276 in method exists at src/gen/CORE.setting:6446 in method at_pos at src/gen/CORE.s… | ||
notjack | r: say (reverse 1..Inf)[*-1]; | ||
camelia | rakudo a8ca88: OUTPUT«Cannot .reverse an infinite list in method gist at src/gen/CORE.setting:10544 in method gist at src/gen/CORE.setting:915 in sub say at src/gen/CORE.setting:11438 in block at /tmp/XOGBjjkC84:1» | ||
22:24
konundra left
|
|||
notjack | r: my @a = [12,3,4,5,6,7]; say @a[3,3,1,0]; | 22:24 | |
camelia | rakudo a8ca88: OUTPUT«(Any) (Any) (Any) 12 3 4 5 6 7» | ||
notjack | r: my @a = [12,3,4,5,6,7]; say @a[[3,3,1,0]]; | 22:25 | |
camelia | rakudo a8ca88: OUTPUT«(Any)» | ||
TimToady | r: my @a = [12,3,4,5,6,7]; say @a[0][3,3,1,0] | 22:28 | |
camelia | rakudo a8ca88: OUTPUT«5 5 3 12» | ||
22:28
bluescreen100 left
|
|||
notjack | ah, I forgot [] meant arrayref in perl | 22:29 | |
22:29
colomon left
|
|||
TimToady | r: my $closure = *-1; say $closure(42) | 22:29 | |
camelia | rakudo a8ca88: OUTPUT«41» | ||
notjack | r: my @a = (12,3,4,5,6,7); say @a[3,3,1,0]; | ||
camelia | rakudo a8ca88: OUTPUT«5 5 3 12» | ||
notjack | r: my @a = (12,3,4,5,6,7); say @a[3,3,1,0,-1]; | ||
camelia | rakudo a8ca88: OUTPUT«Cannot use negative index -1 on Array in method gist at src/gen/CORE.setting:10544 in method gist at src/gen/CORE.setting:915 in method gist at src/gen/CORE.setting:5634 in method gist at src/gen/CORE.setting:915 in sub say at src/gen/CORE.setting:11438 … | ||
notjack | I don't get why I can't just use negative indexing naturally | 22:30 | |
FROGGS | r: my @a = (12,3,4,5,6,7); say @a[3,3,1,0,*-1]; | ||
camelia | rakudo a8ca88: OUTPUT«5 5 3 12 7» | ||
FROGGS | security | ||
notjack | security? | ||
geekosaur | because there's no way to distinguish an intended index-from-end from a fencepost error | ||
FROGGS | so dont get something by accident from the end | ||
geekosaur | *-x is unambiguously index from end | ||
notjack | there's no way to distinguish @a[1] from "second element" or "fencepost error fro first element" | 22:31 | |
that's not Perl's job | |||
it's going to screw up slices | |||
geekosaur | by that argument no language should have any error checking | ||
notjack | my @indices=[0,1,-1]; | ||
my @indices=(0,1,-1); @a[@indices]; #oops | 22:32 | ||
geekosaur: by that argument no one should ever complain about problematic syntax in language design | |||
22:34
Nom-_ left
22:35
Nom- joined
|
|||
geekosaur | notjack, why yes, that does also follow if you take your claim far enough. | 22:35 | |
notjack | geekosaur: I'm glad you see the symmetry. | ||
geekosaur | I want syntactic, not weird semantic, distinction between index-forward and index-reverse | ||
you want anything goes, oh that wasn't what you wanted, too bad! | 22:36 | ||
notjack | I want arithmetic, not syntatic, distinction | ||
geekosaur | frankly I do not miss 1960s languages | ||
notjack | Perl owes a lot - a lot - to 1960s languages | 22:37 | |
*-1 feels more like a 1980s 3GL construct than anything else | 22:38 | ||
(Those, I do not miss) | |||
geekosaur | *shrug* you want PHP, you know where to find it. Ditto C. | ||
diakopter doesn't understand that last comment | 22:39 | ||
22:40
notjack_ joined,
snoopy joined
|
|||
TimToady | .tr ジャー区道 | 22:42 | |
yoleaux | Jar district road (ja → en) | ||
22:42
cognominal joined
|
|||
notjack_ | my @a = 1..100; my @idx=(0,1,4,1,-1,7,10,-2,5); say @a[@idx]; | 22:42 | |
r: my @a = 1..100; my @idx=(0,1,4,1,-1,7,10,-2,5); say @a[@idx]; | |||
camelia | rakudo a8ca88: OUTPUT«Cannot use negative index -1 on Array in method gist at src/gen/CORE.setting:10544 in method gist at src/gen/CORE.setting:915 in method gist at src/gen/CORE.setting:5634 in method gist at src/gen/CORE.setting:915 in sub say at src/gen/CORE.setting:11438 … | ||
notjack_ | r: my @a = 1..100; my @idx=(0,1,4,1,*-1,7,10,*-2,5); say @a[@idx]; | 22:43 | |
snoopy | r: 'my @indices=(0,1,*-1); say @indices; my @a = 12,3,4,5,6,7; say @a[@indices] | ||
camelia | rakudo a8ca88: OUTPUT«1 2 5 2 100 8 11 99 6» | ||
rakudo a8ca88: OUTPUT«===SORRY!===Unable to parse expression in single quotes; couldn't find final "'"at /tmp/5bvFpijzTH:1------> ; my @a = 12,3,4,5,6,7; say @a[@indices]⏏<EOL> expecting any of: statement list prefix or term … | |||
snoopy | r: my @indices=(0,1,*-1); say @indices; my @a = 12,3,4,5,6,7; say @a[@indices] | ||
camelia | rakudo a8ca88: OUTPUT«0 1 WhateverCode.new()12 3 7» | ||
notjack_ | r: my @a = 1..100; my @idx=(0,1,4,1,*-1,7,10,*-2,5); say @a[@idx]; say @idx[4]; | ||
lue | r: my @a = 1, 2, 3; my @b = 0, 1, *-1; say @a[@b]; | ||
camelia | rakudo a8ca88: OUTPUT«1 2 5 2 100 8 11 99 6WhateverCode.new()» | ||
rakudo a8ca88: OUTPUT«1 2 3» | |||
donaldh | argh. getting tripped up by PERL6LIB in my env for parrot / rakudo | ||
notjack_ | r: my @a = 1..100; my @idx=(0,1,4,1,*-1,7,10,*-2,5); say @idx[4]; | ||
camelia | rakudo a8ca88: OUTPUT«WhateverCode.new()» | ||
notjack_ | yeah, that's un-fun. | 22:44 | |
lue | You can still put from-the-end indices in lists, just replace -1 with *-1 | ||
notjack_ | I get it, but then *-1 is a different kind of thing than 1 | ||
r: my @a = 1..100; my @idx=(0,1,4,1,*-1,7,10,*-2,5); say @idx[4]+7; | |||
camelia | rakudo a8ca88: OUTPUT«Cannot call 'Numeric'; none of these signatures match::(Mu:U \v: Mu *%_) in method Numeric at src/gen/CORE.setting:887 in sub infix:<+> at src/gen/CORE.setting:3278 in sub infix:<+> at src/gen/CORE.setting:3276 in block at /tmp/LHqQUBKJFE:1»… | ||
22:44
jtpalmer joined
|
|||
notjack_ | r: my @a = 1..100; my @idx=(0,1,4,1,*-1,7,10,*-2,5); @idx =>>- 1; | 22:45 | |
camelia | rakudo a8ca88: OUTPUT«===SORRY!===Preceding context expects a term, but found infix > insteadat /tmp/UsJ4punk3M:1------> @idx=(0,1,4,1,*-1,7,10,*-2,5); @idx =>>⏏- 1;» | ||
22:45
rhr_ joined
|
|||
notjack_ | r: my @a = 1..100; my @idx=(0,1,4,1,*-1,7,10,*-2,5); @idx >>->> 1; | 22:45 | |
22:45
integral joined
|
|||
camelia | rakudo a8ca88: OUTPUT«Cannot call 'Numeric'; none of these signatures match::(Mu:U \v: Mu *%_) in method Numeric at src/gen/CORE.setting:887 in sub infix:<-> at src/gen/CORE.setting:3282 in sub infix:<-> at src/gen/CORE.setting:3280 in sub hyper at src/gen/CORE.setting:14604 … | 22:45 | |
lue | because things like *-1 create something called WhateverCode, which expects one argument. The array dereferencer (the [] in @a[]) gives the size of the array as that one argument when it encounters WhateverCode as an index. | ||
notjack_ | yes, I understand .. I'm saying that's undesirable. | ||
lue | r: my @a = 1,2,5; say @a[*-*]; # size of array minus size of array == 0 | ||
camelia | rakudo a8ca88: OUTPUT«1» | 22:46 | |
TimToady | it's better than magically wrapping around one end of the array but not the other; if you want modular arithmetic on the array indices, there are better ways to do that | ||
notjack_ | TimToady: not without loss of generality | ||
TimToady | -1 in not general | 22:47 | |
notjack_ | I come from the array programming world (APL, J, K/Q). Negative indices are a big hit. | ||
22:47
notjack left,
grondilu left,
jtpalmer_ left,
rhr left,
integral_ left
|
|||
TimToady | then the best solution is to declare your arrays to take modular indices | 22:47 | |
notjack_ | One of the reasons I like p6 is it seems to have a lot of the benefits of the APL family, plus some extra cool stuff | ||
TimToady | yes, but there are also aspects of APL that drive people away screaming | 22:48 | |
notjack_ | you want to be able to say my @ind=(0,1,-1); and then do things like @a[@ind] and @b[ind] and @a[@ind >>-<<1] etc | ||
lue | .oO(Like lack of a decent Linux-based compiler, IIRC) |
||
notjack_ | TimToady: s/APL/perl/ | ||
lue: AFAICT, no compiler exists for APL, Linux or otherwise | 22:49 | ||
lue is reminded of his idea to create an APL operators module for P6 | 22:50 | ||
notjack_ | lue++ | ||
I'm trying to write a J in p6, but hung up because I'm completely ignorant | |||
lue | r: my @a = 1,2,3,4; say @a[*/2]; | ||
camelia | rakudo a8ca88: OUTPUT«3» | ||
notjack_ | though the lexing went pretty well. | 22:51 | |
donaldh | github.com/rakudo/rakudo/pull/181 | 22:52 | |
22:52
lelf` joined,
colomon joined
|
|||
lue | The most interesting part of an APL module though would be how it works in relation to the non-APL ones (precedence-wise, that is). | 22:52 | |
notjack_ | imo, one of the most ingeneous design decisions of J is it did away with precedence, almost entirely | 22:53 | |
that wouldn't work for a syntax-rich language like p6 | |||
22:53
lelf left
|
|||
notjack_ | but it is quite cozy in J | 22:53 | |
timotimo | donaldh++ # make install for rakudo.jvm | ||
TimToady | unfortunately, most peeople prefer some precedence | ||
notjack_ | the challange is quantifying "some" | 22:54 | |
lue | precedence isn't an issue within APL (it's right-to-left all the time), but mingling those operators with P6's would be interesting to figure out. | ||
notjack_ | silicon computers are better at maintaing huge tables of precedence than carbon ones are | ||
especially the mushy gray kind | |||
lue | .oO(S03 didn't have an issue quantifying the levels of precedence) |
||
TimToady | lue: obviously you'd just have to pick one precedence level to put them all at | ||
lue: yeah, S03 makes it look like no work every went into it :) | 22:55 | ||
*eve | |||
*ever !!! | |||
notjack_ | *even | ||
there are two precedences of operators in APL, which correspond, roughly, to subs and hyper/meta-operators in p6 | 22:56 | ||
then anomalous things like indexing brackets, which you don't have to worry about | |||
TimToady | hypers don't have their own precedence in p6 | 22:57 | |
lue | .oO( ⍝ would require at least a macro and at most a slang. ) |
||
timotimo | r: say say "yeah" | ||
camelia | rakudo a8ca88: OUTPUT«yeahTrue» | ||
timotimo | does the bool return value for say actually make sense? | ||
TimToady | it does when it returns False because your disk is full | ||
notjack_ | surely the []s in [+] have a higher precedence than the + | 22:58 | |
timotimo | oke | ||
TimToady | though that's probably a fail | ||
notjack_ | else, they couldn't pick up the + as an argument | ||
timotimo | notjack_: those are listop precedence, yes | ||
22:58
konundra joined
|
|||
timotimo | oh, er, no that's not the [ ] being an operator, they are syntax | 22:58 | |
with their own grammar rule actually | |||
this isn't a question of precedence then. | |||
notjack_ | what about >><< and friends? | ||
TimToady | hypers don't have their own precedence in p6 | 22:59 | |
timotimo | they are also syntax. | ||
notjack_ | um, what about R? | ||
TimToady | though X and Z are list infixes | ||
timotimo | r: sub frob(Str $foo) { say "succ" }; frob(say "yay"); | ||
camelia | rakudo a8ca88: OUTPUT«yayNominal type check failed for parameter '$foo'; expected Str but got Bool instead in sub frob at /tmp/1gmHxfMmAg:1 in block at /tmp/1gmHxfMmAg:1» | ||
notjack_ | yeah, Z was my next question | ||
timotimo | i think i'll annotate say with "returns Bool" then | ||
TimToady | so slightly looser than list prefixes | ||
22:59
benabik left
|
|||
timotimo | that ought to make lots of code much more performant! because you end up using the return value of "say" all the time! | 22:59 | |
notjack_ | anything that can take e.g. + as an argument in APL is termed an "operator" (or, in J, an adverb/conjunction) and has the highest precedence | 23:00 | |
23:00
iSlug left
|
|||
notjack_ | anything like + or * or % that operate on data (instead of functions) is called a function (in J, verb) and has medium precedence | 23:00 | |
data, like 'abcded' or 1 2 3 has the lowest precedence | |||
so, in APL, / is an operator (not syntax) and can take a function argument, like +/, which is equivalent to [+] in p6 | 23:01 | ||
~ is similar, and analogous to R | 23:02 | ||
" is similar, and is analogous to >><< | |||
timotimo | right. in APL that may very well make a lot of sense. in perl6land i don't think it makes that much sense – at least at first glance | ||
TimToady | the main difference is that in p6 we wanted very strange things to look very strange, not hide among the other operators | 23:03 | |
donaldh | PERL6LIB=hello ./perl6 -e 'use Anything' # breaks for me | ||
Could someone try this on rakudo jvm ? | 23:04 | ||
TimToady | "This representation can not unbox to a native str" | 23:05 | |
23:05
colomon left
|
|||
donaldh | PERL6LIB=blib ./perl6 -e 'use Test' # works | 23:05 | |
Yep, that's what I get. | |||
23:05
sitaktif left
|
|||
donaldh | good, isolated test case. | 23:06 | |
notjack_ | is there a idiomatic way to be able to take a bare operator as an argument ? | ||
timotimo | TimToady: does it make sense to go through the setting and sprinkle it with type annotations where they are correct? how about prefering returns SomeType:D over returns SomeType? | ||
notjack_ | as in zipWith(+,@a)? | ||
23:06
nebuchadnezzar joined
|
|||
timotimo | you have to use &infix:<+> or some similar notation | 23:06 | |
(especially since + could be prefix, postfix or infix in that case) | |||
TimToady | @a Z+ @b | ||
timotimo | (although postfix:<+> isn't in the setting, someone could make it up) | 23:07 | |
TimToady | the Z is uppercase for visibility | ||
notjack_ | I know Z is zipwith, was wondering how I'd write my own | ||
TimToady | I believe it's 'zipwith', yes. | ||
timotimo | i'd think a macro would be the right way to do that, if you know you want the infix:<whatevs> version | ||
notjack_ | can you make a identifier synonym for infix:<+> ? | ||
timotimo | what do you mean by that? | ||
notjack_ | hmm, macros are a good call | ||
23:08
larks left
|
|||
notjack_ | (magical declaration) plus = infix:<+>; | 23:08 | |
zipWith(plus, @a); | |||
23:09
jferrero left
|
|||
timotimo | r: my &the_op = &infix:<+>; say(&the_op) | 23:09 | |
23:09
flussence left
|
|||
camelia | rakudo a8ca88: OUTPUT«sub+{<anon>}+{precedence} infix:<+>($a?, $b?) { ... }» | 23:09 | |
23:09
BooK left
|
|||
timotimo | could also use the $ sigil of course | 23:10 | |
TimToady | r: constant plus = &infix:<+>; say plus | ||
camelia | rakudo a8ca88: OUTPUT«sub+{<anon>}+{precedence} infix:<+>($a?, $b?) { ... }» | ||
timotimo | or that, yes | ||
notjack_ | nice | ||
that's enough for my purposes | |||
TimToady | note that in constant form, you must use () to call it | ||
notjack_ | I'd just write constant plus = infix:<+>; fancyAPLOperator(plus, operands); | ||
TimToady | r: constant plus = &infix:<+>; say plus 1, 2 | ||
camelia | rakudo a8ca88: OUTPUT«===SORRY!===Two terms in a rowat /tmp/cp2wCLrIqo:1------> constant plus = &infix:<+>; say plus ⏏1, 2 expecting any of: postfix infix stopper infix or meta-infix statement end statem… | ||
TimToady | r: constant plus = &infix:<+>; say plus(1, 2) | 23:11 | |
camelia | rakudo a8ca88: OUTPUT«===SORRY!===CHECK FAILED:Undefined routine '&plus' called (lines 1, 1)» | ||
TimToady | hmm | ||
r: constant plus = &infix:<+>; say plus.(1, 2) | |||
camelia | rakudo a8ca88: OUTPUT«3» | ||
TimToady | there you go | ||
r: constant plus = &infix:<+>; say (plus)(1, 2); # also works | |||
camelia | rakudo a8ca88: OUTPUT«3» | ||
23:12
flussence joined
|
|||
notjack_ | r: say (1,2,3) +Z 1; | 23:13 | |
camelia | rakudo a8ca88: OUTPUT«===SORRY!===Undeclared name: Z used at line 1» | ||
notjack_ | n: say (1,2,3) +Z 1; | ||
camelia | niecza v24-88-g1f87209: OUTPUT«===SORRY!===Undeclared name: 'Z' used at line 1Unhandled exception: Check failed at /home/p6eval/niecza/boot/lib/CORE.setting line 1502 (die @ 5)  at /home/p6eval/niecza/src/STD.pm6 line 1147 (P6.comp_unit @ 36)  at /home/p6ev… | ||
TimToady | Z+ | ||
notjack_ | n: say (1,2,3) Z+ 1; | ||
camelia | niecza v24-88-g1f87209: OUTPUT«2» | ||
TimToady | and you don't need the parens, due to *precedence* :) | ||
you do need the parens for the hyper version, since hypers are more APL-y | |||
nr: say (1,2,3) »+« 1; | 23:14 | ||
camelia | niecza v24-88-g1f87209: OUTPUT«Unhandled exception: Non-dwimmy scalar used with complex item at /home/p6eval/niecza/lib/CORE.setting line 1531 (die @ 5)  at /home/p6eval/niecza/lib/CORE.setting line 3361 (ANON @ 15)  at /home/p6eval/niecza/lib/CORE.setting line 3364 (hyper @ 16) … | ||
..rakudo a8ca88: OUTPUT«Lists on both side of non-dwimmy hyperop of infix:<+> are not of the same lengthleft: 3 elements, right: 1 elements in sub hyper at src/gen/CORE.setting:14591 in sub hyper at src/gen/CORE.setting:14579 in block at src/gen/CORE.setting:14570 in block at /… | |||
TimToady | nr: say (1,2,3) «+« 1; | ||
camelia | niecza v24-88-g1f87209: OUTPUT«Unhandled exception: Non-dwimmy scalar used with complex item at /home/p6eval/niecza/lib/CORE.setting line 1531 (die @ 5)  at /home/p6eval/niecza/lib/CORE.setting line 3361 (ANON @ 15)  at /home/p6eval/niecza/lib/CORE.setting line 3364 (hyper @ 16) … | ||
..rakudo a8ca88: OUTPUT«2» | |||
TimToady | bah | ||
nr: say (1,2,3) «+» 1; | |||
camelia | rakudo a8ca88, niecza v24-88-g1f87209: OUTPUT«2 3 4» | ||
23:15
jferrero joined
|
|||
TimToady | that has the precedence of +, not the precedence of listops | 23:15 | |
notjack_ | hypers and metas are definitely one of the most exciting things about p6 for me | ||
TimToady | because hypers are expected to work more on existing finite structures, not infinite lists | ||
APL assumes finite structures, generally, so made decisions more like hypers | 23:16 | ||
23:16
FROGGS left
|
|||
notjack_ | both clauses are true, but logically unconnected | 23:16 | |
TimToady | so you say | ||
notjack_ | there's nothing stopping (e.g.) J from allowing +/i._ where _ is infinity | ||
23:16
rom1504 joined
|
|||
notjack_ | we've discussed it any number of times, but nobody donated the tuits | 23:17 | |
there are drawbacks to the simplified syntax, for sure | |||
timotimo | on the subject of hypers, TimToady, are you planning to review my pull request early enough for me to still have time to fix it up for the upcoming compiler release? | 23:18 | |
notjack_ | among them, function declaration is fairly primitive | ||
(another reason p6 attracts me) | |||
donaldh | night o/ | ||
23:18
BooK joined
|
|||
timotimo | night donaldh and thanks for your PR :) | 23:19 | |
TimToady | timotimo: your notes are a bit terse, but I presume when you say put 'is nodal' into Any, you're talking about putting the trait in, not about making it inherit somehow | ||
23:19
donaldh left
|
|||
TimToady | that is, it inherits the possibility of the trait only | 23:19 | |
timotimo | yes, that's it. i haven't figured out how to make the inheritance part of it actually work | ||
TimToady | probably okay for now, though in that state it forces every class that 'is Iterable' to add 'is nodal', but maybe that's okay for now, and a conservative default | 23:20 | |
especially if it looks up the most general form of the method | 23:21 | ||
timotimo | indeed. should i go through and put "is nodal" everywhere that already has "is Iterable"? what about positional and associative then? | ||
TimToady | are there any uses of that which aren't iterable? | 23:22 | |
timotimo | ah, good point. i'll look | ||
23:24
census_ joined
|
|||
TimToady isn't entire sure how ».foo is implemented any way | 23:24 | ||
*anyway | |||
timotimo | Buf does positional, but not Iterable | ||
TimToady | so should Buf default to acting more like a scalar or more like an array? :) | 23:25 | |
it's a little of both | |||
timotimo | EnumMap does associative but not iterable | ||
23:26
jferrero left,
jferrero joined
|
|||
TimToady | r: my $b = Buf.new; say @$b ~~ Iterable | 23:26 | |
camelia | rakudo a8ca88: OUTPUT«True» | ||
TimToady | r: my $b = Buf.new; say $b ~~ Iterable | 23:27 | |
camelia | rakudo a8ca88: OUTPUT«False» | ||
TimToady | r: my $b = Buf.new(65, 66, 67); say $b»++ | ||
camelia | rakudo a8ca88: OUTPUT«No such method 'succ' for invocant of type 'Buf' in sub postfix:<++> at src/gen/CORE.setting:2075 in sub postfix:<++> at src/gen/CORE.setting:2074 in sub hyper at src/gen/CORE.setting:14624 in sub hyper at src/gen/CORE.setting:14579 in sub METAOP_HYPER_PO… | ||
TimToady | heh | ||
r: my $b = Buf.new(65, 66, 67); say @$b»++ | |||
camelia | rakudo a8ca88: OUTPUT«65 66 67» | ||
TimToady | arguably that's wrongish | 23:28 | |
r: my $b = Buf.new(65, 66, 67); say ++«$b | 23:29 | ||
camelia | rakudo a8ca88: OUTPUT«No such method 'succ' for invocant of type 'Buf' in sub prefix:<++> at src/gen/CORE.setting:2068 in sub prefix:<++> at src/gen/CORE.setting:2067 in sub hyper at src/gen/CORE.setting:14624 in sub hyper at src/gen/CORE.setting:14579 in sub METAOP_HYPER_PREF… | ||
TimToady | r: my $b = Buf.new(65, 66, 67); say ++«@$b | ||
camelia | rakudo a8ca88: OUTPUT«66 67 68» | ||
TimToady | r: my $b = Buf.new(65, 66, 67); ++«@$b; say $b | 23:30 | |
camelia | rakudo a8ca88: OUTPUT«Buf:0x<41 42 43>» | ||
TimToady | r: my $b = Buf.new(65, 66, 67); ++«@$b; say $b.Str | ||
camelia | rakudo a8ca88: OUTPUT«Cannot use a Buf as a string, but you called the Str method on it in method Str at src/gen/CORE.setting:8063 in method Str at src/gen/CORE.setting:898 in block at /tmp/G8xZ0D_U4n:1» | ||
TimToady | r: my $b = Buf.new(65, 66, 67); ++«@$b; say $b.decode("UTF-8") | ||
camelia | rakudo a8ca88: OUTPUT«ABC» | ||
TimToady | aww | ||
timotimo | what about List; it does Positional, but not Iterable ... the iterable part comes from the @ container, yes? | 23:31 | |
TimToady | r: say List.^mro | ||
camelia | rakudo a8ca88: OUTPUT«(List) (Iterable) (Cool) (Any) (Mu)» | ||
TimToady | looks Iterable to me | ||
timotimo | oh, btw, should Mu be nodal, too? | ||
TimToady | why? | ||
timotimo | huh? in my code it just does Positional | ||
i dunno. because Any is ;) | 23:32 | ||
TimToady | Any is nodal to make all the list methods defined in it nodal | ||
what list methods are defined in Mu? | |||
timotimo | oooh | ||
List is iterable in Bootstrap! | |||
TimToady | my question is where we look up the 'least derived' method to see how it's marked | 23:33 | |
timotimo | good point. none are defined in Mu. | ||
afaict that part is handled by protos entirely; at least i hope so. | 23:34 | ||
TimToady | @foo».bar pretty much has to do that on the first call to .bar, since you can't call .can without an invocant | ||
timotimo | i suppose a test case is in order for a class hierarchy with protos and stuff | ||
TimToady | timotimo: most of the methods in Any are not multis | ||
so don't have a proto | |||
timotimo | so you're saying if i derive from a class that has a method bar, i can never get rid of its nodalness no matter how hard i try? | 23:35 | |
TimToady | why I changed the spec to say 'least derived' | ||
say List.^can('elems') | |||
r: say List.^can('elems') | |||
camelia | rakudo a8ca88: OUTPUT«elems elems elems» | ||
TimToady | r: say List.^can('elems')[*-1] | ||
camelia | rakudo a8ca88: OUTPUT«elems» | ||
TimToady | that's the elems you want to check for 'is nodal' | 23:36 | |
timotimo | oh! | ||
but that's so easy! how is that even possible! ;) | |||
TimToady | but instead of List, probably have to use the first element of the structure to do the lookup | ||
timotimo | yeah, currently i try to look it up on SELF | ||
i can change that. | 23:37 | ||
TimToady | self might be an array of something entirely unarray-like, so self won't work | ||
timotimo | good point. | ||
TimToady | Dog.bark might not be nodal even if Tree.bark is | ||
the other question is the extent to which we can assume all the elements of the structure have the same type | 23:38 | ||
timotimo | that's hard. | 23:39 | |
TimToady | yeah, suddenly we're in static-typing land | ||
timotimo | one more problem is that the hyper function gets passed a block -> \obj { obj."$name"(|c) } | ||
not really sure how to make that properly signal outwards if obj."$name"(|c) is actually nodal. | |||
23:40
fridim__ joined
|
|||
timotimo | the block itself never would be just like that. | 23:40 | |
TimToady | maybe it ends up coming back to requiring a different dispatcher, as the original duckmapping did | 23:41 | |
one that will fail on an attempt to dispatch to something nodal | |||
you'd need an extra bit if you want to cache whether you know something is nodal or not | 23:43 | ||
so you call ."elems" the first time, it doesn't know whether it is nodal, so looks up to *-1 and copies the bit into the earlier method routines | 23:44 | ||
the spec does say that you can guarantee a single such dispatch for natively typed arrays, since native types don't carry an internal type that could be more specific than the 'of' type | 23:45 | ||
for non-native arrays, you can at least cache whether the method name is nodal in the most specific method, and not look it up every time in the most general method | 23:46 | ||
timotimo | okay, but native arrays are NYI, no? | ||
TimToady | yes, but just figuring how hard to push the static typing thing | ||
vs just guessing from the first element | 23:47 | ||
or letting each element make its own decision, with caching in the first place it'll find the method | |||
timotimo | i'm interested to know how far i have to push this into the "absolutely correct" corner before a first attempt can be merged ;) | ||
TimToady | (rather than the last place) | ||
I guess we don't have to make any decision until we find an element that is Iterable (is that what it uses to decide whether to descend?) | 23:48 | ||
23:48
colomon joined
|
|||
timotimo | yes, if istype(..., Iterable) succeeds, it will attempt to descend | 23:49 | |
23:49
iSlug joined
|
|||
TimToady | (1,2,3)»[1] is simply going to fail outright | 23:49 | |
timotimo | however, at that point, our "op" thing is a block that wraps the method call and i don't see how to figure out if that method call will end up being nodal or not without a very big signaling mechanism around it | 23:50 | |
TimToady | well, as I said above, if we have a form of ."name" dispatch that fails on something nodal, we can just trap that | ||
timotimo | with an exception, yes? | 23:51 | |
TimToady | it will automatically propagate outside the block on failure | ||
yes | |||
I think a good case could be made then for latching the decision, and never trying for Iterable again | 23:52 | ||
since it's highly likely that if one .elems is nodal, all of them are | |||
timotimo | in that case, what's the difference between checking the first element for nodality and latching upon first finding one that is nodal? | 23:53 | |
TimToady | otoh, if you're throwing a nodal method at a list of things, it's also pretty certain that all of the elements of the list are Iterable | 23:54 | |
so that just degenerates to examining the first element anyway | |||
23:54
pupoque joined
|
|||
TimToady | right, I think we agree on that | 23:54 | |
23:54
benabik joined
|
|||
TimToady | so for now, just check first arg and go with it | 23:55 | |
that should be an easy enough first approximation, and might work forever :) | |||
timotimo | thanks! that's something i can certainly implement with a shred of certainty :P | ||
is it considered acceptable to link to irclogs from source code? | 23:56 | ||
otherwise i'll summarise why this is an approximation and put up a comment. | |||
TimToady | beats me | ||
timotimo | i'll briefly summarise | 23:57 | |
23:57
Ulti left
|
|||
timotimo | r: ()[*-1] | 23:58 | |
camelia | rakudo a8ca88: OUTPUT«Cannot use negative index -1 on Listcurrent instr.: 'throw' pc 353484 (src/gen/CORE.setting.pir:151255) (src/gen/CORE.setting:9273)called from Sub 'sink' pc 385900 (src/gen/CORE.setting.pir:163561) (src/gen/CORE.setting:10552)called from Sub 'MAIN' pc 401 (src/g… | ||
23:58
Ulti joined
|
|||
timotimo | ah, i'll need to check for that. | 23:58 | |
23:58
iSlug left
|
|||
timotimo | r: Bool.^can("i_cant_do_this")[*-1] | 23:58 | |
camelia | rakudo a8ca88: OUTPUT«Cannot use negative index -1 on Listcurrent instr.: 'throw' pc 353484 (src/gen/CORE.setting.pir:151255) (src/gen/CORE.setting:9273)called from Sub 'sink' pc 385900 (src/gen/CORE.setting.pir:163561) (src/gen/CORE.setting:10552)called from Sub 'MAIN' pc 401 (src/g… | ||
timotimo | yes indeed | ||
r: say (Bool.^can("i_cant_do_this") || [Mu])[*-1] | 23:59 | ||
camelia | rakudo a8ca88: OUTPUT«(Mu)» |