»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'perl6: say 3;' or rakudo:, niecza:, std:, or /msg p6eval perl6: ... | irclog: irc.perl6.org/ | UTF-8 is our friend!
Set by sorear on 4 February 2011.
TimToady sorear: here's a Set.pm that works (mostly) under niecza: gist.github.com/1654636 00:01
TimToady is not sure about precedence levels yet... 00:02
[Coke] ooh, TimToady++ 00:06
TimToady something to be said for making them list infixes
so that they can coerce lists to sets automatically 00:07
oops, forgot the Bool returns too 00:08
dalek (sorear) cool, TimToady. 00:10
(sorear) I guess object-keyed hashes would make a nice addition... 00:11
(sorear) also, to keep masak++ happy, needs ASCII aliases. Preferably infix:<\in>, infix:<\subseteq>, etc :D 00:12
00:13 cooper joined
sorear for some reason my connection to host02 just dropped out for about five minutes 00:13
it's been laggy all day
how's host02 been treating you, TimToady?
TimToady dropping lots of packets 00:14
00:16 LlamaRider joined
sorear o/ LlamaRider 00:16
LlamaRider o/
hi there 00:17
00:17 donri left, thou left 00:19 benabik_ joined, benabik left, benabik_ is now known as benabik
jnthn arrrghhh, finally I think I see $nasty-bug 00:20
jnthn feels stupid for not spotting it earlier
LlamaRider oh noes, I just started rebuilding rakudo :D I guess there will be need to do that again 00:21
jnthn LlamaRider: Well, my patch didn't work yet, but also it's not something that impacts current Rakudo master built against the suggested NQP. 00:23
LlamaRider *whew*
good luck with it then :) 00:24
jnthn Thanks.
If it is what I think it is, then it's one of those annoying situations where you spend an hour spotting the issue and then the patch is 1 line long.
TimToady revised to have return types, and set ops can now coerce to sets 00:30
(typing blind, so please forgive typos)
and there are already Texas versions 00:31
currently the list infixes all have the same precedence
arguably (&) should be tighter than (|) for consistency... 00:32
but I don't know what set theoreticians think about the precedence of ∪ vs ∩ 00:33
jnthn uuurah, patch is success \o/
dalek p: bbd5639 | jnthn++ | src/QAST/Compiler.nqp:
Helps to actually have the cstack pulled out of the cursor before we go trying to look at stuff in it.
jnthn phenny: tell moritz latest nqp master fixes pretty much all the failures. rx.t and comb.t I didn't verify as they need ICU; since it's just 3 tests I'm happy to todo those and win the many, many more we get - plus the important backtracking functionality. 00:36
phenny jnthn: I'll pass that on when moritz is around.
00:39 cognominal_ joined 00:43 cognominal left, nwc10 joined
nwc10 To check, Rakudo isn't considered "production ready" yet, is it? 00:44
jnthn nwc10: I don't think of it as such yet. You can do useful stuff with it, for sure, but I don't think any commonly used definition of "production ready" should be applied to it yet. 00:46
nwc10 Good stuff. Otherwise I'd be asking for the non-public security bug reporting address :-) 00:47
Because I assume that all the fun with hash collisions applies to Rakudo too. www.ocert.org/advisories/ocert-2011-003.html
(no-one has mentioned it in this context yet, to my knowledge, so I'm assuming that it will be, as one has to take action to avoid it)
jnthn nwc10: Think github.com/parrot/parrot/commit/cc...8f7d9a6d9a may be related 00:50
No idea *if* Parrot_platform_get_entropy() is sufficiently random 00:51
nwc10 yes, that looks plausible. If it's "working", then hashes should come back in a different order for each run
jnthn nwc10: Plausible, yeah. I ain't tried it.
doy i'd honestly be a bit surprised if it was an issue, considering perl 5 fixed it back in 2003
nwc10 I'm pretty sure I don't have a build of Rakudo anywhere
indeed. It was so strange watching the rest of the world blow up. 00:52
The perl 5 games are here: perl5.git.perl.org/perl.git/blob/HE...il.c#l5802
it doesn't need much to be safe 00:53
doy also, it doesn't require hashes to come back in a different order for each run, necessarily - perl 5 only starts randomizing things if it detects degenerate behavior (unless you set a compile flag)
nwc10 yes, but that was sort of a fudge to get back to binary compatibility with modules which had pre-compiled hash values in them
jnthn Perl_croak(aTHX_ "Your random numbers are not that random");
:D
nwc10 it's sort of useful to always come back with different orders, to set programmer expectations
doy sure, just saying it's not required 00:54
(:
nwc10 but it was a bit too, um, politically awkward to retrofit that
IIRC one of Dan's original stated policies for Parrot was that if something didn't need to be ordered, then that thing should be made to be returned in a non-predictable order
to force people to code defensively, rather than having assumtions that then break 00:55
no idea how well that stuck.
00:55 LlamaRider left, donri joined
TimToady I guess I don't have Texas versions of ∈ or ∋ yet... okay, new gist with (elem) and (cont) too 00:57
00:58 kboga joined
kboga nom: say 0x1000000000000000 <+ 1 00:59
p6eval nom fa821c: OUTPUT«Bool::False␤»
kboga nom: say 0x1000000000000000 +< 1 #oops 01:00
p6eval nom fa821c: OUTPUT«2305843009213693952␤»
japhb *rez* 01:06
phenny japhb: 21 Jan 23:53Z <sorear> tell japhb I have my doubts about $?USAGE as a true compile-time constant. say $?USAGE; multi MAIN ...; say $?USAGE # should the two says differ?
TimToady perl6: my %hash = 'a' .. 'z' X=> 1; say %hash.keys 01:07
p6eval niecza v13-327-g5a9c36f: OUTPUT«z y x w v u t s r a b c d e f g h i j k l m n o p q␤»
..pugs b927740: OUTPUT«*** ␤ Unexpected "%hash"␤ expecting "=", context, ":" or "("␤ at /tmp/KAT84gW118 line 1, column 4␤»
..rakudo fa821c: OUTPUT«a b c d e f g h i j k l m n o p q r s t u v w x y z␤»
japhb sorear, Did you mean to have a BEGIN before the first 'say $?USAGE'? Because otherwise I don't think they would be different. Perhaps I am in violent agreement ... $?USAGE to me can only be set once the unit has been completely compiled, so no, it is not in that sense the same as other compile-time constants. 01:09
jnthn o/ japhb
japhb Note that I am VERY backlogged because of $day-job craziness, so if there has been discussion of this in the last week, I don't know about it.
01:10 nwc10 left
japhb o/ jnthn, long time since we've been on at the same time. :-) 01:10
jnthn japhb: Yeah, I was pretty exhausted by Christmas and took some mostly-offline rest.
japhb Good for you! 01:11
Still feeling charged up, even after 3 weeks of January?
jnthn japhb: Reasonably. Was a bit tired from teaching last week - I had the misfortune of sleeping awfully the night before the course. But rested well today and feeling reasonably good again. :) 01:12
japhb Oh yeah, I hate it when I get bad sleep right before something important. At least you're better now!
I actually got massively bad sleep the night before my job interview for my current job. I babbled. A lot. :-) 01:13
jnthn Yeah. The course went fine, but I was done for after each day.
01:14 nornagest left
japhb What was the subject last week? C# again? 01:15
01:17 LlamaRider joined
jnthn japhb: Yeah. I made this advanced C# course at $dayjob, which for some reason is selling *really* well. I've got bookings for giving it every month through to May or something crazy. 01:17
japhb There are many worse problems to have. ;-)
jnthn Yes, I'm happy with this particular problem. :)
kboga nom: say nqp::p6box_i(pir::shl__III(2**64, 1)); say 2**64 +< 1; say nqp::bitshiftl_I(nqp::p6decont(2**64), nqp::unbox_i(1), Int) 01:18
jnthn (As are my $dayjob :-))
p6eval nom fa821c: OUTPUT«0␤0␤36893488147419103232␤»
japhb I bet! 01:19
kboga looks like nom still uses the pir::shl op for bigints? 01:20
jnthn kboga: If so, that would be decidedly ungood.
kboga: Looks like you're correct :( 01:21
japhb *sigh* From the sounds of the kids, I think I need to disappear again ...
*derez*
kboga ehm, that last p6decont and unbox_i shouldn't be there...
jnthn kboga: Oddness. moritz++ even wrote ops for doing the bigint shl/shr by the looks of it. 01:22
kboga oh, shr too
01:23 shinobicl_ joined
jnthn Yeah 01:23
kboga: It looks like a really easy fix - just change the Int candidates for the ops in Int.pm from nqp::bitshiftl_i to nqp::bitshiftl_I 01:24
kboga: Feel free to try it if you wish...it's 2:30AM here and I want to sleep. :)
kboga: Or if not then please just file a ticket, and somebody will get to it soon no doubt :)
kboga this should fix that: pastebin.com/2KqtY64w 01:26
jnthn kboga: Looks plausible.
kboga: If it works, feel free to send pull request or lemme know and I can apply it tomorrow. Or maybe moritz++ beats me to it. 01:27
jnthn -> sleep; 'night all
LlamaRider good night 01:28
01:30 kboga left 01:39 thou joined 01:40 shinobicl_ left 01:57 kboga joined
kboga pull request filed, good night jnthn & p6 01:57
01:58 kboga left 02:01 Tenzen joined 02:05 icwiener left, icwiener joined
colomon OMG! 02:20
==> Succesfully installed panda-niecza
02:21 jferrero left
colomon sorear: ping? 02:22
02:26 jferrero joined 02:27 s1n left 02:30 kboga joined 02:32 thou left 02:34 donri left
kboga phenny: tell jnthn test summary report of latest nqp (including your patch) & rakudo (with icu) and the shl/shr patch applied: pastebin.com/VLV2Pezx . The only failing test looks a lot like the one that nqp accidently passed for the wrong reasons github.com/perl6/nqp/commit/078ea5...02eed982d2 02:35
phenny kboga: I'll pass that on when jnthn is around.
02:38 LlamaRider left 02:39 kboga left 02:55 _twitch joined
ggoebel colomon++ 02:58
sorear colomon: pong 03:01
colomon sorear: o/
sorear japhb: I was under the impression that $?FOO was reserved for constants, which can only be set at the moment they are defined 03:02
03:02 _twitch left, _twitch joined
colomon at some point, we need to think about making ~/.perl6/lib part of the default path 03:04
though I'm still kind of thinking there should be separate .perl6s for rakudo and niecza.
03:05 Chillance left 03:19 _twitch left 03:20 whiteknight left 03:26 _twitch joined 03:28 orafu left, orafu joined 03:38 Psyche^ joined 03:42 Patterner left, Psyche^ is now known as Patterner 03:50 leprevost left
araujo anybody knows if there exist some 'partial' bindings or initial effort for some Gui toolkit bindings already? 04:14
04:22 PacoAir left 04:25 icwiener left, icwiener joined
dalek Heuristic branch merge: pushed 137 commits to rakudo/str-numeric by japhb 04:26
04:44 icwiener left, icwiener joined 05:06 benabik_ joined, benabik left, benabik_ is now known as benabik 05:14 molaf joined 05:17 icwiener left, icwiener joined 05:20 molaf left 05:22 molaf joined
TimToady araujo: colomon++ was playing with Gtk in December, but for some reason search on the ir clock doesn't find it 05:23
I found a ref by searching for "button" instead
moritz in the niecza repo there are some gtk examples 05:25
phenny moritz: 21 Jan 23:37Z <jnthn> tell moritz thanks for doing the test run, that looks promising; I know a bunch of those that now explode are all doing so due to one underlying cause.
moritz: 00:36Z <jnthn> tell moritz latest nqp master fixes pretty much all the failures. rx.t and comb.t I didn't verify as they need ICU; since it's just 3 tests I'm happy to todo those and win the many, many more we get - plus the important backtracking functionality.
araujo TimToady, ooh, I see, thanks, I might ask him later 05:26
moritz, they work? 05:27
araujo will check
moritz araujo: I haven't tried them, but I have seen screenshots and blogposts about them
perl6: say (-4) 05:29
p6eval pugs b927740, rakudo fa821c, niecza v13-327-g5a9c36f: OUTPUT«-4␤»
moritz perl6: say (-4) +< 2
p6eval pugs b927740, rakudo fa821c, niecza v13-327-g5a9c36f: OUTPUT«-16␤»
moritz perl6: say 4 +< 2
p6eval pugs b927740, rakudo fa821c, niecza v13-327-g5a9c36f: OUTPUT«16␤»
TimToady perl6: say -4 +< 2 05:30
p6eval pugs b927740, rakudo fa821c, niecza v13-327-g5a9c36f: OUTPUT«-16␤»
dalek kudo/nom: 2e84915 | kboga++ | src/core/Int.pm:
Make the bitwise shift subs on Int:D's actually use the bigint arithmetic nqp ops that Moritz++ coded.
kudo/nom: ba6e783 | moritz++ | src/core/Int.pm:
Merge pull request #56 from kboga/fix_bigint_shl/shr

Make the bitwise shift subs on Int:D's actually use the bigint arithmetic nqp ops that Moritz++ coded.
japhb sorear, Looking at S28, I don't think $*USAGE would be appropriate twigil use; the USAGE does not change from run to run (or during a run, if MOP actions that would alter USAGE are disallowed), and is indeed fixed after compile is complete. However, unlike some of the other $? variables, its value is not fully determined at the instant of a reference to it in single-pass compilation. Thus if you want to constant-fold it, you cannot do so 05:35
on the fly -- you must constant-fold it after the unit has been compiled. Which sounds to me like it needs some special casing, somewhere from very low to medium on the hackishness scale, depending on how the rest of the compiler is architected.
sorear japhb: The most expedient approach would be to make $?USAGE an ordinary (LISimple) lexical 05:36
although this would mean that the user could do $?USAGE := ... and it wouldn't be rejected
TimToady &MAIN.usage is another possibility 05:37
japhb TimToady, in fact, jnthn has suggested that $?USAGE be set at the right time by doing exactly &MAIN.usage . :-) 05:39
TimToady if .usage can be calculated, why bother precalculating it?
it's not like it needs heavy optimization...
japhb Taking the alternate branch in my comment above about having to disallow MOP actions that would change USAGE at runtime, we are then left with a variable that must be handled like a $*, but is more logically named $?
TimToady I'd be perfectly happy blowing $?USAGE away if &MAIN.usage works 05:40
japhb TimToady, I think we may have a winner, then. 05:41
Because that's sure as heck the easiest implementation.
(Though it does leave the tiny bleck that if &MAIN gets .usage() from Routine, then Routine will have a .usage() that only makes sense for one specific use case.) 05:42
TimToady or people should learn to read a more general description of what the routine wants that works either way 05:43
assuming one could finesse that...
sorear huh? 05:44
japhb TimToady, we could make it output a couple of different syntaxen depending on an adverb.
TimToady that's also an option 05:45
japhb --foo=bar v. :foo('bar')
TimToady or .usage vs .USAGE :)
japhb ooh
.oO( If you're going to shout about the Routine's name, perhaps you want to shout about its usage as well? )
05:46
TimToady it's an idea, anyway
sorear TimToady: Does the return value from the mainline code of a file mean anything in Perl 6 under any circumstance?
TimToady I think it'd be less POLA if it's in sink context 05:47
(the last statement)
but allowing explicit return would allow explicit fail too
japhb TimToady, what if the last line of the file happens to be an assignment? 05:48
sorear I don't understand what you're trying to say.
What I'm asking - is there any difference whatsoever between -e 0 and -e 1 ?
05:48 JimmyHoff left
TimToady japhb: assignments don't care if they're in sink context 05:48
I don't think so
japhb Which is to say, were you suggesting forcing sink context on the last line, or just changing from the Perl 5 default?
TimToady how is that different? 05:49
well, Perl 5 has the last line in sink context I believe
japhb Really? Never tried that. 05:50
sorear is still a sink contect unbeleiver, fwiw
TimToady buubot_backup: eval use warnings; 1 + 1 05:51
buubot_backup TimToady: 2
05:51 _twitch left
TimToady well, warns with -2 05:51
-w
Useless use of a constant (2) in void context at - line 1.
buubot is obviously screwing around with the context 05:52
japhb eval use 5.10; sub context { my $c = wantarray; say $c ? "list" : defined $c ? "scalar" : "void"; } context; 05:53
buubot_backup japhb: ERROR: Perl v5.100.0 required (did you mean v5.10.0?)--this is only v5.14.2, stopped at (eval 20) line 1. BEGIN failed--compilation aborted at (eval 20) line 1.
TimToady "useless use of" are some of the most useful warning that Perl 5 gives
japhb eval use 5.10.0; sub context { my $c = wantarray; say $c ? "list" : defined $c ? "scalar" : "void"; } context;
buubot_backup japhb: scalar 1
japhb Interesting! Using -E locally, that's void. 05:54
TimToady it's obvsiously in scalar context if it reports the result
japhb Oh, duh.
*sigh*
japhb is clearly not thinking with all oars in water tonight
dalek p: 0b6d2f1 | moritz++ | VERSION:
bump VERSION to 2012.01
05:55
japhb Sadly, I think that means I should not code.
TimToady sorear: sink context has *only* the use of triggering side effects; if the last operation has no side effects, it makes no sense in a sink context 05:58
and very nearly always indicates a misunderstanding of something like precedence 05:59
so sink context is very important for figuring out awesome error messages
buubot_backup: eval use warnings; 2 + rand; 3 06:01
buubot_backup TimToady: Useless use of addition (+) in void context at (eval 20) line 1. 3
TimToady perl6: 2; 3; 06:02
p6eval pugs b927740, rakudo ba6e78, niecza v13-327-g5a9c36f: ( no output )
TimToady we have a ways to go there
dalek kudo/nom: 66c4b84 | moritz++ | tools/build/NQP_REVISION:
bump NQP revision
06:03
kudo/nom: 17ae87e | moritz++ | docs/ChangeLog:
update ChangeLog
japhb TimToady, is that Perl 5 warning altered by an overload of '+'? 06:04
TimToady I doubt it; and if you overload '+' with something with side effects, you deserve whatever you get
japhb Heh.
TimToady knowing which functions are really functions might be important enough to distinguish a 'fun' keyword from the 'sub' keyword 06:09
I don't want to see 90% of the functions marked 'is pure'
alternately, we say that any subs that default to returning something are by default functions unless declared otherwise 06:10
japhb Hmmm. And the consequences of lying about purity?
TimToady sometimes you get caught sooner, sometimes later 06:11
it's pretty easy to spot whether you're changing something outside the function most of the time
at least in the immediately available code 06:12
dalek kudo/nom: 70b2ce7 | moritz++ | docs/ (3 files):
2012.01 release announcement
06:13
TimToady it would be interesting to go through our current settings and see how much is pure already
japhb
.oO( "Cannot call impure routine from code declared to be a pure function." )
moritz phenny: tell jnthn I mostly prepared the January release; is there anything in your TODO worth waiting for? 06:14
phenny moritz: I'll pass that on when jnthn is around.
TimToady for an immutable type like Set, every method is pure
dalek ast: 6556f08 | moritz++ | / (4 files):
fudge a rakudo regression (which we bogusly passed before), and several unfudges
06:16
TimToady otoh, something like ff is pure only if both sides of it are pure
moritz we really need a better immutability marker than WHICH
infix:<does> also need to check if an object is immutable
TimToady thinks that immutable is really the default, and mutators should check if an object is mutable 06:17
more capabilities based than prohibition based 06:18
moritz any objects wihch have no rw accessors and simply don't assign to attributes are immutable
TimToady effectively immutable, but maybe hard to determine 06:19
moritz right 06:20
which is why I'd like some kind of declaration
TimToady let's not call it 'data' like Haskell calls things that aren't data 06:21
sorear I also need an immutability check for constant folding 06:23
TimToady sure; note how Perl 5 complains about 1+1 as constant 2 rather than infix '+' :) 06:24
buubot_backup: eval 2+2; 3 06:25
buubot_backup TimToady: 3
TimToady buubot_backup: eval use warnings; 2+2; 3
buubot_backup TimToady: Useless use of a constant (4) in void context at (eval 20) line 1. 3
TimToady like that
sorear eval use warnings; 2+2; 3
buubot_backup sorear: Useless use of a constant (4) in void context at (eval 20) line 1. 3
sorear you don't even need the nick
TimToady ah
eval is one of my favorite functions :P
buubot_backup TimToady: ERROR: No such class favorite at (eval 20) line 1, near "of my favorite" syntax error at (eval 20) line 1, near "of my favorite"
sorear blech, p5 indirect object syntax 06:26
TimToady I don't suppose we can make it recognize p5eval instead...
sorear japhb: now starting to try to port your MAIN_HELPER 06:28
japhb sorear, sorry to hear it. ;-) 06:32
sorear wait, seriously, Perl 6 MAIN doesn't suppport permutation? 06:37
japhb ? 06:38
sorear ls /var -l
japhb Right, that is not supported.
Thus, you can't do an interface like ImageMagick. 06:39
But nothing stops you from parsing @*ARGS yourself ...
TimToady for offbeat argument processors, one can either preprocess @*ARGS or avoid MAIN entirely
sorear meh, I'm just spoiled by GNU getopt 06:40
TimToady it's not an important enough feature to make it do everything
though if we required use of MAIN, there'd be more pressure in that direction 06:41
japhb Why would we require that?
TimToady to be prescriptionist like other language designers :)
japhb Heh.
TimToady Sorry, "Heh." does not contain a verb. 06:42
japhb It contains a weakened interjection.
TimToady
.oO(a weekend interjection)
06:43
japhb
.oO( Interjections! Show excitement, or emotion! They're set apart from a sentence by an exclamation point, or by a comma when the feeling's not as strong. )
TimToady Oh--are those the only two ways? 06:44
japhb School House Rock had entirely too much influence on my English lessons as a child.
TimToady conjunction junction...
japhb Exactly. I loved that one. Heck, I loved almost all of the grammar and science ones. 06:45
I didn't find out until I had children of my own that I'd missed the entire season of multiplication ones.
06:45 benabik left
japhb My favorite of all of them though is still The Tale of Mr. Morton, I think. 06:46
TimToady sorear: you have to realize I'm a bit irrational when it comes to getopt routines; I've never ever used one in C.
I've also never used lex/flex, probably for similar reasons 06:48
06:48 icwiener left
TimToady (not necessarily good reasons...) 06:48
I guess it's not surprising that Perl 6 tries to make all those at least somewhat obsolete 06:49
sorear perl6: my $?FOO 06:56
p6eval niecza v13-327-g5a9c36f: OUTPUT«===SORRY!===␤␤Variables with the ? twigil cannot be declared using my; they are created using 'constant'. at /tmp/W8ChKzy5Qg line 1 (EOF):␤------> my $?FOO⏏<EOL>␤␤Unhandled exception: Check failed␤␤ at /home/p6eval/ni…
..pugs b927740, rakudo 70b2ce: ( no output )
TimToady speaking of obsolete, I'd better go to bed... 06:58
zzz &
sorear good night
japhb o/
sorear japhb's MAIN_HELPER does some funny things with constraint_list ... 07:03
japhb lemme go pull up my ancient code 07:04
07:04 icwiener joined
japhb sorear, yeah, some of that is Rakudo-isms. It tries to DWIM when the original constraint was a constant, for instance. 07:06
IIRC, that is.
sorear japhb: 'ancient' code?
japhb In nom years.
;-)
sorear I see 07:07
japhb It's been too long since I've done anything but bug fix in here, because my supply of readily available tuits dried up before Failure and val() were ironed out.
Which is why my comment about being sorry you had to port the current version was only half joking. 07:08
07:11 icwiener left
sorear nom: sub MAIN() { }; @*ARGS = '--help' 07:35
p6eval nom 70b2ce: OUTPUT«Unexpected named parameter 'help' passed␤ in sub MAIN at /tmp/VtShIBsnEA:1␤ in sub MAIN_HELPER at src/gen/CORE.setting:7709␤ in block <anon> at /tmp/VtShIBsnEA:1␤ in <anon> at /tmp/VtShIBsnEA:1␤»
sorear nom: say Code.^methods(:local);
p6eval nom 70b2ce: OUTPUT«Method 'gist' not found for invocant of class 'Sub'␤ in method gist at src/gen/CORE.setting:4056␤ in sub say at src/gen/CORE.setting:5931␤ in block <anon> at /tmp/Yv4v3fXyXP:1␤ in <anon> at /tmp/Yv4v3fXyXP:1␤»
08:06 drbean joined 08:19 Patterner left 08:21 Psyche^ joined, Psyche^ is now known as Patterner, Trashlord left 08:33 Patterner left 08:36 kaare_ joined 08:38 Psyche^ joined, Psyche^ is now known as Patterner 08:50 Trashlord joined 08:51 GlitchMr joined
tadzik good morning 08:52
sorear o/ tadzik 08:53
GlitchMr hi
sorear o/ GlitchMr
08:54 kaare__ joined, kaare_ left
sorear Why isn't Signature.perl just a call to map and join? 08:57
...And why does this code read so much like NQP? 09:06
dalek ecza: 41df027 | sorear++ | main.pl:
Start drafting port of Sub introspection, MAIN_HELPER
09:10
sorear -> sleep
tadzik g'night 09:15
09:24 kaare_ joined, kaare__ left 09:49 kaare_ left 09:53 dbr joined
fsergot good morning :) 10:06
10:10 mj41 joined 10:18 birdwindupbird joined 10:26 kaare_ joined 10:49 donri joined 11:02 cognominal_ left 11:03 cognominal joined 11:12 bbkr1 joined 11:13 fsergot left, sftp_ joined 11:14 sftp left 11:20 bbkr1 left 11:35 fsergot joined 11:39 fsergot left 11:45 mauror joined 11:48 MayDaniel joined 11:54 mauror left 11:57 fsergot joined, fsergot left 11:58 fsergot joined, am0c joined 11:59 mauror joined 12:01 birdwindupbird left, birdwindupbird joined 12:05 MayDaniel left
moritz hmmmmmmmmmmr cf7…....... 12:09
12:10 whiteknight joined, fsergot left 12:14 mauror left
jnthn afternoon 12:15
phenny jnthn: 02:35Z <kboga> tell jnthn test summary report of latest nqp (including your patch) & rakudo (with icu) and the shl/shr patch applied: pastebin.com/VLV2Pezx . The only failing test looks a lot like the one that nqp accidently passed for the wrong reasons github.com/perl6/nqp/commit/078ea5...02eed982d2
jnthn: 06:14Z <moritz> tell jnthn I mostly prepared the January release; is there anything in your TODO worth waiting for?
tadzik moritz: oh, hello Ronja :) 12:16
12:16 mauror joined
moritz wow, she even managed to produce a character I don't know how to write on that keyboard 12:18
jnthn moritz: Thanks for that! The only thing I wanted to do was make sure MiniDBI can work under nom. In the worst (though hopefully unlikely) case it'd need fixes in the dyncall handling code. I will check that out within the next few hours. So, we can put out that release today :)
tadzik moritz: try alt+comma, or alt+dot 12:19
moritz tadzik: neither does it
and I haven't even configured a compose key :-)
masak g'day, #perl6. 12:20
jnthn o/ masak 12:21
tadzik :)
hey masak
masak hey hey hey -- from a train!
:D
I don't know why I find that so fascinating every time. 12:22
tadzik :P
jnthn masak: I did it on a plane in December!
masak whoa.
jnthn masak: How fascinating would that be? :)
12:22 bbkr1 joined
masak that's Internet without even touching the ground! 12:22
I bet that requires some sort of wire-less technology. 12:23
tadzik as if the internet was in the air!
nah, I doubt it. I think the plane has this roll of cable, and it's plugged in somewhere on the airport
that'd be SO MUCH FASTER 12:24
jnthn Oh...and that's why they only do this on shorthaul flights? The cable isn't long enough to do longhaul flights yet? Now I see it...
moritz it's very thin glas fiber, that's why you normally don't see it
tadzik or maybe it's using a wireless fiberoptics
like, you know, a flashlight and a receiver
jnthn OK so...MiniDBI is so old it mentions proto.
Also
I don't have a commit bit on it :(
masak in fact, contrails are just glass fiber glittering in the air. 12:25
jnthn Ah, but moritz++ does :)
tadzik hah, git-proxy :P
moritz jnthn: and I think I can even give you a commit bit 12:26
jnthn moritz: ah, ok
12:26 hugme joined
moritz provided I get that stupid bot running :-) 12:26
12:26 ChanServ sets mode: +v hugme
moritz hugme: add jnthn to MiniDBI 12:26
jnthn I just did a fork but if you can give me a bit on the real thing... :)
hugme moritz: You need to register with freenode first
moritz uhm, can somebody else please try that? 12:27
tadzik hugme: add jnthn to MiniDBI
hugme tadzik: You need to register with freenode first
tadzik I _am_ registered!
moritz seems the bot is b0rked
I'll work around it
12:27 hugme left
jnthn hugme: add jnthn to MiniDBI 12:27
tadzik :)
moritz jnthn: please re-check if you now have access 12:31
jnthn Seems so! :)
moritz++
moritz jnthn, masak: do you already have travel plans for DPW2012 (like, which flights you take)? 12:40
12:40 fsergot joined 12:41 PacoAir joined
masak moritz: no, not yet. 12:45
jnthn masak: I looked up the train, fwiw. 10 hours! 12:51
masak about what I'd expect. 12:52
tadzik heh, my bus ride will take about 14 :P
jnthn yeah
12:53 hugme joined, ChanServ sets mode: +v hugme
moritz hugme: add jnthn to MiniDBI 12:54
hugme hugs jnthn. Welcome to MiniDBI!
moritz \o/
masak \o/ 12:55
jnthn Just successfully pushed there too :) 12:56
moritz long story short, the freenode responses had changed
has anybody seen or heard from mberends lately? 13:00
jnthn No :( 13:01
13:01 am0c left
masak misses mberends 13:01
moritz too
masak he's probably very busy, as he was in the latter half of 2011. 13:02
jnthn Last I saw him was the Perl 6 workshop.
er
London Perl Workshop
:)
tadzik (:
masak .oO( Freudian Slip Perl Workshop ) 13:03
jnthn :P 13:04
Hm. Well, now MiniDBI loads the mysql driver and gets to the point of trying to connect. :)
colomon araujo: see github.com/colomon/mandelbrot/blob...delbrot.pl for example 13:05
moritz now sent an email to mberends++ 13:12
moritz adds a META.info to MiniDBI 13:17
dalek p: 9c20151 | jnthn++ | src/pmc/sixmodelobject.pmc:
Revert a commit I thought I'd already reverted, but musta only done in a branch.
13:30
13:32 tokuhirom joined 13:33 Alias left 13:35 tokuhir__ joined 13:38 bbkr1 left 13:39 tokuhirom left
moritz nom: role A { has $!foo }; class B does A { method x() { $!foo = 'bar' } }; B.new.x 13:40
p6eval nom 70b2ce: OUTPUT«===SORRY!===␤Attribute $!foo not declared in class B␤at /tmp/lPtQ_Qrpe8:1␤»
moritz that one is stopping MiniDBD::Pg
jnthn moritz: I just updated MiniDBD::mysql for the nom semantics in that regard. 13:41
masak yeah; nom is right there.
jnthn I get it to connect to mysql and prepare a statement, but it's blowing up on executing it.
masak moritz++ jnthn++ # working on MiniDBD 13:44
moritz jnthn: I've copied your fix over to MiniDBD::Pg 13:45
Ronja is having fun with the water she was supposed to drink, sucking it out of the bottle and spreading it all over the table 13:48
jnthn :)
moritz: OK. Just pushed another few fixes (mostly for .new semantics having changed)
just visiting the shop, bbi10 13:49
13:57 fsergot left
jnthn back 14:02
14:05 am0c joined
dalek kudo/nom: 2e26f35 | moritz++ | tools/build/NQP_REVISION:
undo bump to nqp 2012.01 until we decide to actually cut the release
14:07
14:25 MayDaniel joined 14:29 hundskatt left 14:33 MayDaniel left 14:34 fsergot joined
fsergot nom: %hash<ABC> = 1,2,3; 14:34
p6eval nom 2e26f3: OUTPUT«===SORRY!===␤Variable %hash is not predeclared at line 1, near "<ABC> = 1,"␤»
fsergot nom: my%hash; %hash<ABC> = 1,2,3;
p6eval nom 2e26f3: ( no output ) 14:35
fsergot nom: my %hash; %hash<ABC> = 1,2,3;
p6eval nom 2e26f3: ( no output )
14:35 Jay_S joined 14:38 shinobicl___ joined 14:40 Jay_S left
fsergot nom: if 1 ~~ any( 1,2,3 ){ say 1; } 14:42
p6eval nom 2e26f3: OUTPUT«===SORRY!===␤Missing block at line 1, near ""␤»
fsergot nom: if 1 ~~ any( 1,2,3 ) { say 1; }
p6eval nom 2e26f3: OUTPUT«1␤»
fsergot rakudobug?
Why there have to be a space between ) and { ? :) 14:43
moritz because otherwise it is parsed as a postcircumfix 14:44
just like the {'foo'} in %hash{'foo'}
not a bug
std: if 1 ~~ any( 1,2,3 ){ say 1; }
p6eval std 40d10f7: OUTPUT«===SORRY!===␤Missing block at /tmp/zge26wo5ai line 1 (EOF):␤------> if 1 ~~ any( 1,2,3 ){ say 1; }⏏<EOL>␤Parse failed␤FAILED 00:01 111m␤»
14:49 tokuhir__ left
shinobicl___ perl6: role myrole {}; my sub infix:<¬>(myrole $s1, myrole $s2) { say "$s1 ¬ $s2" }; my Str $s1 = "s1" does myrole; my Str $s2 = "s2" does myrole; say $s1 ¬ $s2; 14:51
p6eval niecza v13-327-g5a9c36f: OUTPUT«s1 ¬ s2␤Bool::True␤»
..rakudo 2e26f3: OUTPUT«===SORRY!===␤CHECK FAILED:␤Calling 'infix:<\xAC>' will never work with argument types (Str, Str) (line 1)␤ Expected: :(myrole $s1, myrole $s2)␤»
..pugs b927740: OUTPUT«decodeUTF8': bad data: '\172'␤decodeUTF8': bad data: '\172'␤decodeUTF8': bad data: '\172'␤*** Unknown syntactic construct: Syn "does" [Ann (Cxt (CxtItem (mkType "Str"))) (Val (VStr "s1")),Val (VType (mkType "myrole"))]␤ at /tmp/9MRTn_zVWM line 1, column 87-108␤»…
shinobicl___ std: role myrole {}; my sub infix:<¬>(myrole $s1, myrole $s2) { say "$s1 ¬ $s2" }; my Str $s1 = "s1" does myrole; my Str $s2 = "s2" does myrole; say $s1 ¬ $s2; 14:54
p6eval std 40d10f7: OUTPUT«ok 00:01 115m␤»
14:56 donri left
moritz std doesn't do type checks 14:57
maybe it helps if you don't type-constrain your variables to Str
does that mean we can't statically analyse role type checks? 14:58
shinobicl___ rakudo: role myrole {}; my sub infix:<¬>(myrole $s1, myrole $s2) { say "$s1 ¬ $s2" }; my $s1 = "s1" does myrole; my $s2 = "s2" does myrole; say $s1 ¬ $s2;
p6eval rakudo 2e26f3: OUTPUT«s1 ¬ s2␤Bool::True␤» 14:59
shinobicl___ :D
moritz our type system isn't really designed for union types, but they sneak in through the backdoor through mixins 15:07
TimToady we tend to use types as our discriminants, and polymorphic containers that allow the types in question 15:12
what we don't have is polymorphic containers that allow a list of types
the old 'my Cat|Dog $catdog' 15:13
can define a 'subset CatDog of Any where Cat | Dog' 15:14
that's as close as we get right now
subset Tree where Node | Leaf 15:15
fsergot moritz: it is burdensome, isn't it? :)
15:17 dbr left 15:18 dbr joined, birdwindupbird left
TimToady subset Union of Subset where *.constraint ~~ Any[Type]; # :) 15:19
15:28 bbkr1 joined 15:41 am0c left 15:44 LlamaRider joined, LlamaRider left 15:45 LlamaRider joined
LlamaRider \o #perl6 15:45
tadzik hey LlamaRider 15:48
colomon \o 15:50
jnthn back...long skype call :)
15:50 cognominal left
colomon what's the difference between calling nextwith(blah) and self.my-method-name(blah)? 15:50
jnthn shinobicl___: Think you've spotted a case where the compile time type analysis doesn't know what it doesn't know. Please do ticket it. 15:51
colomon or is it self.Parent::my-method-name(blah)?
15:52 cognominal joined
jnthn colomon: nextwith goes to the next candidate the current dispatcher knows about 15:52
colomon: What it means is context sensitive - it depends on what dispatcher you're in (wrap, multi-dispatch, method dispatch)
15:54 dbr left, dbr joined
LlamaRider ok, i have safely concluded that the most confusing feature of Perl6 are arrays :) I think 50% of my questions here were about arrays. 15:56
And as you can guess I have a new one "why doesn't this work" :
rakudo: my @a = [0 xx 3] xx 4; say @a.perl; @a[1][2] = 5; say @a.perl;
p6eval rakudo 2e26f3: OUTPUT«Array.new([0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0])␤Array.new([0, 0, 5], [0, 0, 5], [0, 0, 5], [0, 0, 5])␤»
LlamaRider i'm trying to set the second row, third column element of a 2D array 15:57
not sure exactly what is wrong with the approach
i guess i'm indexing it wrong 15:58
colomon that's a nom bug, isn't it? 15:59
niecza: my @a = [0 xx 3] xx 4; say @a.perl; @a[1][2] = 5; say @a.perl;
p6eval niecza v13-327-g5a9c36f: OUTPUT«[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]].list␤[[0, 0, 0], [0, 0, 5], [0, 0, 0], [0, 0, 0]].list␤»
LlamaRider oO... rakudo , you fail me again :( 16:00
ideas for workarounds are most welcome 16:01
jnthn colomon: It looks like Rakudo just implements the spec as it used to be, before the change to say that xx should thunk its left hand side. 16:02
16:02 am0c joined
LlamaRider accessing works as expected, but setting is somehow off 16:03
jnthn LlamaRider: Well, all that's happening is that it's creating an array [0,0,0] and then repeating the same one 4 times
LlamaRider oh my 16:04
jnthn LlamaRider: That used to be the way it was spec'd to work, until cases like your one showed it was a bad idea. Then the spec changed, somebody patched Niecza, and nobody patched Rakudo yet.
geekosaur congratulations, you can emulate python :)
LlamaRider no references in Perl6 huh? the advent calendar sure was hiding things from me :D
jnthn Ah, we have an RT ticket about it. 16:05
So it won't be forgotten.
nom: my @a = ([0 xx 3] for ^4); say @a.perl; @a[1][2] = 5; say @a.perl; 16:06
p6eval nom 2e26f3: OUTPUT«Array.new([0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0])␤Array.new([0, 0, 0], [0, 0, 5], [0, 0, 0], [0, 0, 0])␤»
16:06 mj41 left
jnthn Taht's the easy workaround. 16:06
*That
LlamaRider \o/ thanks 16:08
16:09 pomysl left
LlamaRider but this is interesting to dig into 16:11
16:11 pomysl joined
LlamaRider rakudo: my $a = [1,2]; my @b = $a xx 3; my @c = $a.clone xx 3; say @b.perl; say @c.perl; 16:11
p6eval rakudo 2e26f3: OUTPUT«Array.new([1, 2], [1, 2], [1, 2])␤Array.new(1, 2, 1, 2, 1, 2)␤»
LlamaRider why is clone dereferencing?
16:14 colomon left
moritz bug 16:29
LlamaRider I need to stay away from arrays, they're dangerous 16:32
moritz that's a bit like saying "I need to stay away from human language; it's ambiguous" 16:34
maybe you should rather stay away from .clone. There's no universal way to clone an arbitrary object 16:35
jnthn wonders what clone on an array means with regard to the unevaluated parts 16:36
moritz jnthn: fwiw the mysql tests segfault after test 2
16:36 xinming left
moritz (MiniDBI, that is) 16:36
that's with your latest nqp patch 16:37
LlamaRider moritz: it's not my fault the arrays are buggy :) 16:38
or clone for that matter
moritz LlamaRider: neither is it your fault that human language is buggy :-)
LlamaRider well, I try to avoid using "this sentence is false" in casual discussions ;D 16:39
jnthn moritz: Yeah, I've found running mysql_connect in a loop
segfaults also
Running with debug memory allocation libraries complains very quickly about heap corruption.
16:40 xinming joined 16:45 benabik joined 16:47 am0c left 16:50 LlamaRider left 16:56 az5112 joined
az5112 Hello p6 -- how do I reverse a hash in p6 (i.e. exchange keys and values)? I tried %h.reverse but it does sth different. 16:59
16:59 MayDaniel joined
flussence nom: {a=>1, b=>2}.invert.perl.say 16:59
p6eval nom 2e26f3: OUTPUT«(1 => "a", 2 => "b").list␤»
az5112 Thanks,that's better than reverse :) 17:05
jnthn moritz: fwiw, I did manage to get MiniDBI to successfully do an insert into a table. So the issues mostly seem to revolve around tracking down the memory management issues. 17:07
az5112 And how do I prevent flattening of a hash when pushing to an array? (i.e. I'd like to get an array of hashes, not a flat list)
jnthn az5112: Could try .item on the thing you're pushing. 17:08
az5112 thanks
moritz or @array.push: [things here] 17:19
cognominal jnthn, I have a fix for the problem with --target=parse : gist.github.com/1657774 17:34
TimToady or @array.push: $%hash where implemented 17:43
sorear: I suspect our connection problems are actually related to the solar storm that blew through last night 17:46
probably some microwave link somewhere... 17:47
17:47 bbkr1 left
dalek p: 20df103 | jnthn++ | src/ops/nqp_dyncall.ops:
Don't try and calculate needed stack space - it ain't quite that simple. Just do what all the docs do and allow a decent amount.
17:48
17:50 MayDaniel left 18:02 Chillance joined 18:19 _dbr joined 18:21 dbr left 18:27 birdwindupbird joined 18:34 GlitchMr42 joined 18:35 icwiener joined 18:37 GlitchMr left 18:39 nebuchadnezzar left
jnthn moritz: I have latest DBD::mysql doing inserts, selects etc. It runs, but there's some instability. 18:44
moritz: Annoyingly, the cause of that is proving hard to track down.
18:48 nebuchadnezzar joined 18:50 Tenzen left 18:51 icwiener left, icwiener joined 18:58 should joined
should nom: my $str = "abcabcabc";my @x = $str ~~ m:g/abc/;say ~@x 18:58
p6eval nom 2e26f3: OUTPUT«False␤»
benabik nom: my $str = 'abcabcabc'; my $x = $str ~~ m/abc/; say $x.perl 18:59
p6eval nom 2e26f3: OUTPUT«Match.new(orig => "abcabcabc", from => 0, to => 3, ast => Any, list => ().list, hash => EnumMap.new())␤»
should hi perl6,why it false 19:00
moritz looks wrong to me
but I don't know what m:g is supposed to return
niecza: say ('abcabcabc' ~~ m:g/abc/).perl
p6eval niecza v13-327-g5a9c36f: OUTPUT«===SORRY!===␤␤Regex modifier g not yet implemented at /tmp/ytVUdzhvN4 line 1:␤------> say ('abcabcabc' ~~ m:g⏏/abc/).perl␤␤Unhandled exception: Check failed␤␤ at /home/p6eval/niecza/boot/lib/CORE.setting line 919 (die… 19:01
jnthn nom: my $str = "abcabcabc";my @x = $str.match(/abc/, :g); say ~@x
p6eval nom 2e26f3: OUTPUT«abc abc abc␤»
should oh!yhanks moritz
jnthn should: Using the .match method with :g would seem to work out rather better.
should thanks jnthn
19:05 Trashlord left
moritz nom: my $str = "abcabcabc";my @x = $str ~~ m:g/abc/; say @x.perl 19:06
p6eval nom 2e26f3: OUTPUT«Array.new(Bool::False)␤»
moritz wtbh
should hi moritz !how to translate the perl code to perl6 19:08
my $s = "aaaa";my $i;while ($s =~/../g){pos($s) -=1;$i++};say $i
moritz nom: my $s = 'aaaa'; my $i = $s.chars - 1; say $i 19:10
p6eval nom 2e26f3: OUTPUT«3␤»
moritz should: no need to do all that stuff just to count how many two-character matches fit into a string :-)
should i see ! thanks
if I want count 'aaa' repeate how many times? 19:14
my $s = "aaaacbaaaab";my $i;while ($s =~/aaa/g){pos($s) -=2;$i++};say $i 19:15
moritz nom: my $s = 'aaaacbaaaab'; say $s.match(:overlap, :g, /aaa/).elems 19:16
p6eval nom 2e26f3: OUTPUT«4␤»
should oh ! thank you !moritz
moritz nom: my $s = 'aaaacbaaaab'; say $s.match(:overlap, /aaa/).elems 19:17
p6eval nom 2e26f3: OUTPUT«4␤»
sorear good * #perl6
moritz \o sorear 19:19
19:21 Trashlord joined 19:24 bkolera left
mikemol Interesting: enki2.tumblr.com/post/16299354659 19:25
moritz jnthn: t/10-mysql.t ......... 1/86 Method 'disconnect' not found for invocant of class 'Any' 19:27
mikemol I'm still chewing, though. Trying to figure out how much if it is trading CPU for memory, and pondering parallelization as a way of handling the NFA. But neither regex nor hard CS are my areas of expertise...
tadzik more readable version: swtch.com/~rsc/regexp/regexp1.html 19:30
moritz mikemol: one thing is that grep only needs to determine whether and where a match occurs, but there is no need to construct match variables like $0, $1 19:32
which means that it's much easier for grep to transfrom the NFA to a DFA
should nom: my $s = "abcde"; say $0 if $s ~~ /(abc)/ 19:35
p6eval nom 2e26f3: OUTPUT«=> <abc>␤␤»
jnthn moritz: Ah, looks like the test file needs a bunch of database setup to take place first :S 19:37
should Hi moritz~ it's weird why not just output 'abc' ? is it a bug? 19:38
moritz should: no. Use say ~$0 or say $0.Str if you want that 19:39
benabik nom: my $s = 'abode'; say ~$0 if $s ~~ /(abc)/
p6eval nom 2e26f3: ( no output )
benabik nom: my $s = 'abcde'; say ~$0 if $s ~~ /(abc)/
p6eval nom 2e26f3: OUTPUT«abc␤»
should yes !! thanks moritz. 19:40
benabik By default $0 has more information... 19:41
nom: my $s = 'abcde'; say $0.perl if $s ~~ /(abc)/
p6eval nom 2e26f3: OUTPUT«Match.new(orig => "abcde", from => 0, to => 3, ast => Any, list => ().list, hash => EnumMap.new())␤»
should thanks benabik ! 19:42
az5112 Given the following: my @arr = [ 1, 2 ], [ 2, 3]; can I flatten the array using map? my @brr = @arr.map( { ........... } ); 19:46
moritz nom: my @arr = [ 1, 2 ], [ 2, 3]; say @>>.flat.perl 19:47
p6eval nom 2e26f3: OUTPUT«===SORRY!===␤Non-declarative sigil is missing its name at line 1, near "@>>.flat.p"␤»
moritz nom: my @arr = [ 1, 2 ], [ 2, 3]; say @arr>>.flat.perl
p6eval nom 2e26f3: OUTPUT«([1, 2], [2, 3])␤»
moritz nom: my @arr = [ 1, 2 ], [ 2, 3]; say @arr>>.list.perl
az5112 I tried |@_ but I guess the vertical bar is only for sub arguments.
benabik I don't think you need the » in there...
p6eval nom 2e26f3: OUTPUT«([1, 2], [2, 3])␤»
moritz nom: my @arr = [ 1, 2 ], [ 2, 3]; say @arr.flat.perl
benabik nom: my @arr = [ 1, 2 ], [ 2, 3]; say @arr.flat.perl
p6eval nom 2e26f3: OUTPUT«Array.new([1, 2], [2, 3])␤»
moritz ok, let's try it with map :-)
benabik Hm. 19:48
moritz nom: my @arr = [ 1, 2 ], [ 2, 3]; say @arr.map( { @($_) 0} ).perl
p6eval nom 2e26f3: OUTPUT«===SORRY!===␤Unable to parse blockoid, couldn't find final '}' at line 2␤»
moritz nom: my @arr = [ 1, 2 ], [ 2, 3]; say @arr.map( { @($_) } ).perl
p6eval nom 2e26f3: OUTPUT«(1, 2, 2, 3).list␤»
moritz better.
az5112 Thanks, @($_) does the trick. 19:52
moritz >> doesn't work because hypers now hyper all the way down
moritz hates that 19:53
19:58 birdwindupbird left
benabik Maybe we need >> and >>>> ? 19:59
moritz +1 20:04
then we can have >> descend just one level, and >>> recursively 20:05
mikemol Would it be plausible to have something act as a breaker, a "don't recurse beyond this point" marker?
moritz you mean that you pass such a marker to the iterator? 20:10
if yes, that's more the task for a method, not an op
20:11 mj41 joined
should moritz ~ my @a = [1,2],[3,4];what's diffrence between my @z = @a.map: *.list and my @z = @a>>.list 20:16
moritz should: the difference is that 1) map is lazy, >> is eager 2) >> recurses into arrays, .map does not and 3) >> does not execute in order, map does 20:17
should why diffrent result 20:19
moritz because of 2)
20:20 nebuchadnezzar left
should thanks moritz 20:20
moritz the >>.list version calls 1.list, 2.list, 3.list, 4.list, not never [1,2].list 20:21
should I see ,thanks! 20:22
20:23 nebuchadnezzar joined
moritz should: in English it is usual to placed the space after a punctuation, not before it. So 'I see, thanks' would be much more readable 20:24
should yes ! moritz! thank you. 20:25
moritz ! is also a punctuation character. 20:27
should moritz! you are a good teacher. 20:28
sorear joins the welcoming party 20:35
az5112 Is there an array replication operator in perl6? 20:39
moritz yes, xx 20:40
nom: say ('a', 'b') xx 5
p6eval nom 2e26f3: OUTPUT«a b a b a b a b a b␤»
az5112 Thanks -- I think the book fails to mention that. 20:41
moritz az5112: care to open a TODO ticket at github.com/perl6/book/issues ? 20:43
az5112 sure
moritz release preview at moritz.faui2k3.org/tmp/rakudo-2012.01.tar.gz -- please test 20:44
20:46 should left
moritz that tarball doesn't have VERSION bumped :/ 20:47
but it won't make any difference for the spectest run
dalek kudo/nom: b23e8f0 | moritz++ | tools/build/NQP_REVISION:
bump to NQP 2012.01
kudo/nom: 2b53639 | moritz++ | VERSION:
bump VERSION to 2012.01
sorear moritz: what's the state of star these days? 20:49
moritz sorear: it's waiting for the January compiler release, which I'm doing right now 20:50
sorear: ie we plan to do a star release this month
sorear cool.
20:52 Radvendii joined
sorear o/ Radvendii 20:52
Radvendii o/
is perl6 compiled into C code like perl5? 20:53
cognominal moritz, can you pull this patch in rakudo? gist.github.com/1657774
sorear Radvendii: mu
1. Perl 6 is purely a language name and doesn't mean a specific iplementation 20:54
moritz 2. there's no Perl 5 compiler that translates into C code
sorear 2. perl5 (the compiler currently maintained by rjbs) doesn't generate C, although it is written in C
moritz cognominal: should that go into the release?
jnthn cognominal: I'm dubious about that patch.
moritz then "no" :-)
sorear moritz: there's B::C, although it's unmaintained, hasn't worked at all since 5.8 or so, and never worked particularly *well* to begin with 20:55
Radvendii what about pp or whatever it is... i found some CPAN module that would give you C code out of the perl5 code (at least i thought so...)
cognominal jnthn, its fixes the problem with --target=parse
jnthn cognominal: I don't really understand why it would do what it claims to do.
moritz Radvendii: pp barely embeds the perl5 compiler and the source program and the modules into a single file 20:56
jnthn cognominal: Yes, what's the reason it does this? :)
moritz Radvendii: similarly rakudo's perl6.exe is also just rakudo's PBC (bytecode) plus an embedded parrot
jnthn cognominal: Because: token unitstart { <?> }
cognominal: Oh...is it because we always have to call that in order to validly parse? 20:57
cognominal with the --target=parse is set the action for unitstart is not called
dalek ar: 68c7b81 | jnthn++ | skel/docs/announce/2012.01:
First draft of the 2012.01 release announcement for Star.
Radvendii moritz: okay... then i guess iw as mistaken
cognominal and it is necessary to set the context necessary for the dump 20:58
jnthn cognominal: Yeah, I see it now.
tadzik Star!
Radvendii Also, how do i define postcircumfix operators for a class. should i declare it as a subroutine that takes the class as the first variable? or is there some way to do it as a method...
cognominal I don't claim to understand everything it does but it works for me.
jnthn cognominal: Yeah, I was bothered because I didn't see why it worked. But now I do.
Radvendii and by subroutine that takes the class as the first variable i mean a standard postcircumfix sub that takes the object as the thing before the postcircumfix 20:59
jnthn Radvendii: method postcircumfix:<[ ]>($index) { } 21:00
moritz, tadzik: That announcement is very draft. Feel free to twiddle/hack on it. 21:01
21:01 _dbr left
Radvendii and that's called with $obj[$index] or $obj.[$index]? 21:01
tadzik as soon as I finish my filesystem :P
jnthn Radvendii: Either.
Radvendii: Those two are the same really.
Radvendii jnthn: oh. weird. okay. and what about multi-dimensional arrays? how does $obj[$i][$j] work? 21:02
21:02 GlitchMr42 left
benabik If $obj[$i] returns something you can index, I think. 21:03
cognominal jnthn, indeed the unitstart rule is not called anymore, so it could be dropped.
jnthn Radvendii: It does $obj[$i], and then takes the result and does [$j] on it
Radvendii benabik: oh... that makes sense. sorry.
moritz jnthn: oops, I wrote an announcement too. Did I forget to push it? 21:04
oh, that's star. Never mind. 21:05
jnthn moritz: Right :)
Radvendii I've never seen this in the articles I've looked through, but i assume one can do "has @.arr" (ive only seen it with scalars)
benabik nom: class A { has @.a }; say A.a.perl 21:06
p6eval nom 2b5363: OUTPUT«Cannot look up attributes in a type object␤ in method a at src/gen/CORE.setting:1384␤ in block <anon> at /tmp/W1E7eNpfcy:1␤ in <anon> at /tmp/W1E7eNpfcy:1␤»
jnthn Yes, you can
benabik nom: class A { has @.a }; say A.new.a.perl
jnthn benabik: .new :)
p6eval nom 2b5363: OUTPUT«Array.new()␤»
benabik jnthn: Realized I had forgotten it just as I hit enter.
moritz nom: class A { has @.a handles <at_pos> }; my $a = A.new; $a[0] = 3; say $a[0];
p6eval nom 2b5363: OUTPUT«3␤»
Radvendii oh! handles <at_pos> makes the []s fall through to that variable? 21:07
moritz Radvendii: basically [] handles things like slices and Whatever objects, and then calls at_pos 21:08
Radvendii o-oh. i understand.
jnthn Yes, implemetning at_pos is often far easier :)
moritz Radvendii: and since postcircumfix:<[ ]> is defined in Any, you can get Array-ish behavior simply by implementing at_pos
though you should define .elems and .list too 21:09
Radvendii and what does postcircumfix:<{}> call?
jnthn at_key
Radvendii is there a way to make all array-like functions fall through to an array variable? 21:10
moritz inherit from Array
or maybe you can do has @.a handles Array; 21:11
Radvendii nom: class A { has @.a handles Array }; my $a = A.new; $a[0] = 3; say $a[0];
moritz nom: class A { has @.x handles Array; }; say A.new.push: <foo bar>;
p6eval nom 2b5363: OUTPUT«foo bar␤»
nom 2b5363: OUTPUT«A.new(a => Array.new(3))␤»
21:11 mj41 left
Radvendii hahaha 21:11
i guess it works...
sweet
moritz but I don't think that's any better than inheritance
it just flattens the MRO 21:12
Radvendii MRO?
moritz method resolution order
Radvendii if i had the class inherit from Array, how would i tell it which instance variable to use as the array? 21:13
nom: class A is Array { }; my $a = A.new; $a[0] = 3; say $a[0]; 21:15
p6eval nom 2b5363: OUTPUT«3␤»
Radvendii ah
i see
benabik nom: class A is Array { method a() { say self[0] }; my $a = A.new; $a[0] = 1; $a.a 21:16
p6eval nom 2b5363: OUTPUT«===SORRY!===␤Unable to parse blockoid, couldn't find final '}' at line 2␤»
benabik nom: class A is Array { method a() { say self[0] } }; my $a = A.new; $a[0] = 1; $a.a
p6eval nom 2b5363: OUTPUT«1␤»
Radvendii i was just about to test that. :P 21:17
sweet. i've got my answer
moritz or you could even write 21:18
class A is Array { }; my @a := A.new;
jnthn nom: class Harray is Array is Hash { }; my $x = Harray.new; $x<a> = 'hi'; $x[0] = 42; say $x<a>; say $x[0]; # curious if it works...
p6eval nom 2b5363: OUTPUT«hi␤42␤»
jnthn Though I guess that's really an Arrash :) 21:19
Radvendii hahaha. i was just about to test hash-arrays
so it stores them separately?
jnthn You'll need to do a bit more to have that work out well with things like .perl, .list, etc.
moritz I've updated the tarball at moritz.faui2k3.org/tmp/rakudo-2012.01.tar.gz 21:20
now it contains the latest roast commit and correct VERSION
Radvendii: yes, separately
spectesting the new tarball, and if everything is fine, I'll tag the release tomorrow
but now i need to go to bed 21:21
have fun!
jnthn 'night, moritz
Radvendii jnthn: oh... because it wouldnt know whether to use the array or hash for .perl?
jnthn Radvendii: It'll just follow the MRO and call whichever shows up first in that. So, depends if you wrote "is Hash is Array" or "is Array is Hash"
Radvendii nom: class Harray is Array is Hash { }; my $x = Harray.new; $x<a> = 'hi'; $x[0] = 42; say $x<a>; say $x.perl;
p6eval nom 2b5363: OUTPUT«hi␤[42]␤» 21:22
Radvendii or... both?
jnthn nom: class Harray is Array is Hash { }; say Harray.^mro
p6eval nom 2b5363: OUTPUT«Harray() Array() List() Hash() EnumMap() Iterable() Cool() Any() Mu()␤»
Radvendii it prints both...
jnthn Radvendii: Yes, but with method dispatch the first one wins.
Radvendii method dispatch?
jnthn nom: class A { method m() { say 1 } }; class B is A { method m() { say 2 } }; B.m # says 2 21:23
p6eval nom 2b5363: OUTPUT«2␤»
Radvendii right, but what methods are implimented by both Hash and Array?
jnthn Radvendii: .perl, .elems, .keys, ... :) 21:24
Radvendii Array has .keys?
jnthn Sure
Radvendii nom: my @a = 1,2,3,4; say @a.keys
p6eval nom 2b5363: OUTPUT«0 1 2 3␤» 21:25
Radvendii everything except the last..?
oh
no
the indicies
jnthn nom: my @a = <foo bar baz>; for @a.kv -> $idx, $val { say "Index $idx has value $val" }
p6eval nom 2b5363: OUTPUT«Index 0 has value foo␤Index 1 has value bar␤Index 2 has value baz␤»
jnthn Yeah. Can be useful.
Radvendii right
nom: class Harray is Array is Hash { }; my $x = Harray.new; $x<a> = 'hi'; $x[0] = 42; say $x<a>; say $x.keys; 21:26
p6eval nom 2b5363: OUTPUT«hi␤0␤»
Radvendii so it does both, for all of those...
jnthn ..does both?
Radvendii it does the Hash .keys and the Array .keys
jnthn No
It only outputs the 0
Not a 21:27
Swap around Array and Hash in the class decl and see the difference.
Radvendii oh
i was getting confused because of the say $x<a> statement...
nom: class Harray is Array is Hash { }; my $x = Harray.new; $x<a> = 'hi'; $x[0] = 42;say $x.keys;
p6eval nom 2b5363: OUTPUT«0␤»
Radvendii nom: class Harray is Hash is Array { }; my $x = Harray.new; $x<a> = 'hi'; $x[0] = 42;say $x.keys;
p6eval nom 2b5363: OUTPUT«Odd number of elements found where hash expected␤ in method STORE at src/gen/CORE.setting:5460␤ in block <anon> at /tmp/zMGJ6WT1y3:1␤ in <anon> at /tmp/zMGJ6WT1y3:1␤»
Radvendii ..? 21:29
jnthn oh, curious. :)
I'm...not quite sure. :)
Radvendii nom: class Harray is Hash is Array { }; my $x = Harray.new; $x<a> = 'hi'; $x[0] = 42;
p6eval nom 2b5363: OUTPUT«Odd number of elements found where hash expected␤ in method STORE at src/gen/CORE.setting:5460␤ in block <anon> at /tmp/aOX0MJnyKi:1␤ in <anon> at /tmp/aOX0MJnyKi:1␤»
jnthn nom: class Harray is Hash is Array { }; my $x = Harray.new;
Radvendii it has to do with the storing, not the printing...
p6eval nom 2b5363: ( no output )
jnthn Yeah. Still odd. 21:30
Guessing there's some unfortunate conflict somewhere.
Radvendii nom: class Harray is Hash is Array { }; my $x = Harray.new; $x[0,1] = <hi 12>; say $x<hi>;
p6eval nom 2b5363: OUTPUT«Cannot assign to a non-container␤ in method STORE at src/gen/CORE.setting:4110␤ in block <anon> at /tmp/908VnZBsOq:1␤ in <anon> at /tmp/908VnZBsOq:1␤»
jnthn If you actually wanted to do something like this, you'd be better off doing delegation anyway, fwiw. 21:31
Radvendii delegation?
jnthn Radvendii: has @.array handles 'at_pos'; has %.hash handles 'at_key';
Radvendii: And then decide what .perl and .elems and so on should do :)
Radvendii someone was saying that that wasn't a good idea...
they said something about flattening the MDO 21:32
or something...
MRO
jnthn Radvendii: If you want to create something with *both* hash and array semantics, it's a better way to go. If you just want to inherit from and tweak one of them, then yeah, inheritnace probably is neater. 21:33
Radvendii: They're different mechanisms with different use cases.
Radvendii okay... but what does it mean to flatten the MRO?
jnthn Radvendii: It means that you aren't inheriting from as many things. Many people dislike deep inheritance hierarchies, though inheriting from Array probably isn't a problematic case. 21:35
Radvendii okay. 21:36
well, i am implementing a Harray (harrash?) so i guess i'll do the handles method
jnthn Radvendii: If you're doing both then yeah, that's the way I'd go.
Radvendii also, if i want it to do mostly the same thing as at_pos on an instance array, except also do something else, i should impliment the at_pos method and call @.arr.at_pos() and then do whatever else, right? 21:38
jnthn Radvendii: Yeah. Be aware that at_pos returns a container, so if you want to allow modification of the underlying array then you'll need to be a little careful. 21:40
(Like, label your at_pos method with "is rw"
)
21:41 mauror left
jnthn away for a bit 21:41
cxreg not to nag, but it has been over 100 days since the last rakudo.org post, an update would be cool 21:48
jnthn cxreg: Next Rakudo Star release is iminent (within next couple of days), we'll certainly post about that there. 21:50
sorear o/ jnthn 21:51
jnthn o/-ish, sorear 21:52
jnthn only now and then wondering past the keyboard :)
21:54 cooper left 21:55 icwiener left, icwiener joined
cxreg jnthn: right, cool 22:03
sorear hmm... 22:09
I am now thinking of having a Mu.immutable() method
because Pair, Parcel, etc are immutable iff their children are 22:10
22:13 cooper joined 22:22 kaare_ left 22:23 Radvendii left
sorear niecza: say $?CORE::ORIG 22:25
p6eval niecza v13-327-g5a9c36f: OUTPUT«Potential difficulties:␤ Unrecognized variable: $?CORE::ORIG at /tmp/wy7DsPotwk line 1:␤------> say ⏏$?CORE::ORIG␤␤Any()␤»
sorear niecza: say CORE::<$?ORIG>
p6eval niecza v13-327-g5a9c36f: OUTPUT«Any()␤»
sorear niecza: say $?ORIG
p6eval niecza v13-327-g5a9c36f: OUTPUT«say $?ORIG␤»
sorear niecza: say MY::<$?ORIG> 22:26
p6eval niecza v13-327-g5a9c36f: OUTPUT«Any()␤»
sorear perl6: say { :a, :b }.values.WHAT 22:33
p6eval pugs b927740: OUTPUT«a 1␤b 1␤␤*** Not a keyed value: VBool True␤ at /tmp/HwsRVb_5Hd line 1, column 1 - line 2, column 1␤»
..rakudo 2b5363, niecza v13-327-g5a9c36f: OUTPUT«List()␤»
22:34 az5112 left 22:39 LlamaRider joined
jnthn -> rest 22:40
22:41 ksi joined 22:46 techskilled joined
shinobicl___ jnthn: ticket sent 22:50
22:56 Radvendii joined
Radvendii o/ 22:57
what is the "super" entity in classes? 22:58
shinobicl___ perl6: role MyRole is Date {}; my $var1 does MyRole; $var1 = "2011-12-12"; my Str $var2 = $var1.succ; say $var1.perl; say $var2.perl; 23:00
p6eval niecza v13-327-g5a9c36f: OUTPUT«===SORRY!===␤␤Unhandled trait Date for this context at /tmp/EBDz6QeDsb line 1:␤------> role MyRole is Date ⏏{}; my $var1 does MyRole; $var1 = "2011-␤␤Trait does not available on variables at /tmp/EBDz6QeDsb line 1:␤---…
..rakudo 2b5363: OUTPUT«"2011-12-12"␤"2011-12-13"␤»
..pugs b927740: OUTPUT«*** Unknown syntactic construct: Syn "does" [Ann (Decl SMy) (Var "$var1"),Val (VType (mkType "MyRole"))]␤ at /tmp/HrYrPRUv9z line 1, column 25-45␤»
23:04 icwiener left 23:11 techskilled left
sorear Radvendii: 'super' is not, and afaik never has in Perl, meaningful in any context 23:11
23:12 LlamaRider left
sorear Radvendii: 'SUPER' was used to call overriden methods in 5 and old 6, but that functionality is part of nextsame() now 23:12
Radvendii okay. i didn't end up needing it in any case. what i do need is a way to do something like "has @.a handles <at_pos>" and then also do something else when at_pos() get's called. 23:13
i tried overwriting at_pos and calling @.a.at_pos($i) from within it, but that doesn't seem to work...
shinobicl___ nom: role MyRole is Date {}; my Str $s1 does MyRole; say $s1.WHAT; my Date $s2 = $s1; say $s2.WHAT; 23:17
p6eval nom 2b5363: OUTPUT«Str()␤Type check failed in assignment to '$s2'; expected 'Date' but got 'Str'␤ in block <anon> at /tmp/p_P1ZVXc_8:1␤ in <anon> at /tmp/p_P1ZVXc_8:1␤»
sorear Radvendii: you might need to remove handles, if you're going to write your own at_pos 23:18
shinobicl___ maybe i'm going to far asking that to the type system, but in another case, $s1 seems to get the 'Date' behavoir when i apply the role to it
Radvendii the issue is that when i do "return @.a.at_pos($i)" it returns the number, which is a readonly value
sorear Radvendii: then you should make your definiton of at_pos 'is rw' 23:19
Radvendii so i say method at_pos($i) is rw?
sorear yes 23:20
Radvendii that doesn't seem to help...
23:20 LlamaRider joined
Radvendii nom: class A {has @.b; method at_pos($i) is rw { return @.b.at_pos($i) } }; my A $a .= new; $a[0]=1; say $a[0]; 23:22
p6eval nom 2b5363: OUTPUT«Cannot assign to a readonly variable or a value␤ in block <anon> at /tmp/AN0norus94:1␤ in <anon> at /tmp/AN0norus94:1␤»
23:26 LlamaRider left
Radvendii any ideas? 23:26
benabik nom: my @a = 1; @a.at_pos(0) = 2; say @a[0]
p6eval nom 2b5363: OUTPUT«2␤»
sorear Radvendii: try not using return?
shinobicl___: don't use "s1" does role 23:28
shinobicl___: you wanted 'but'
Radvendii and... that does the trick 23:30
thanks sorear
sorear nom: foo
p6eval nom 2b5363: OUTPUT«===SORRY!===␤CHECK FAILED:␤Undefined routine '&foo' called (line 1)␤»
sorear nom: return-rw
p6eval nom 2b5363: OUTPUT«Attempt to return outside of any Routine␤ in block <anon> at /tmp/8S1Xu2Z4i8:1␤ in <anon> at /tmp/8S1Xu2Z4i8:1␤»
sorear you might be able to use that instead, if you have to bail in the middle
Radvendii okay. sweet. 23:31
shinobicl___ rakudo: role MyRole is Date {}; my Str $s1 but MyRole; say $s1.WHAT; my Date $s2 = $s1; say $s2.WHAT; 23:32
p6eval rakudo 2b5363: OUTPUT«Str()␤Type check failed in assignment to '$s2'; expected 'Date' but got 'Str'␤ in block <anon> at /tmp/1OH3wxBec8:1␤ in <anon> at /tmp/1OH3wxBec8:1␤» 23:33
benabik nom: my @a = 1; sub f { return-rw @a.at_pos(0) }; f() = 2; say @a[0] 23:34
p6eval nom 2b5363: OUTPUT«2␤»
Radvendii i didnt know dashes were legal characters in subroutines... hm. 23:35
benabik nom: sub they_are() {...}
p6eval nom 2b5363: ( no output )
sorear nom: sub this'is'legal'too() { ... } 23:36
p6eval nom 2b5363: ( no output )
sorear - and ' are interpreted as identifiers only if they are flanked by alnums without spaces
benabik std: sub foo'() { ... } 23:37
p6eval std 40d10f7: OUTPUT«===SORRY!===␤Malformed block at /tmp/gWTx0cgg72 line 1:␤------> sub foo⏏'() { ... }␤ expecting any of:␤ new name to be defined␤ routine_def␤ trait␤Parse failed␤FAILED 00:01 107m␤»
awwaiid sorear, flankes you say? so I can't do....
what benabik just did
benabik nom: sub foo'() { ... }
p6eval nom 2b5363: OUTPUT«===SORRY!===␤Malformed block at line 1, near "'() { ... "␤»
benabik Pity. My haskell-self is sad 23:38
awwaiid my ocaml-self feels the same
sorear right, if you want U+02B9 MODIFIER LETTER PRIME you have to explicitly write that
awwaiid tend to use f' to wrap f where f' is the recursive version that needs an iterator
Radvendii alright, i know this is kind of silly, since i was just trying to avoid this, but when i say "has @.b handles <at_pos>" it makes it read-write. even if i say "has @!b handles <at_pos>". how do i make it only let you access the elements, not write to them (without declaring a separate method at_pos?
sorear ASCII ' won't DWIM here :|
nom: sub fooʹ() { ... } 23:39
p6eval nom 2b5363: ( no output )
awwaiid looks awefully similar :)
and by awefully... I mean awefully
Radvendii sub foo`() { ... }
nom: sub foo`() { ... }
p6eval nom 2b5363: OUTPUT«===SORRY!===␤Malformed block at line 1, near "`() { ... "␤»
Radvendii oh, so apostrophe and prime doesnt work
awwaiid you gotta use that unicode prime that sorear used, not backtick 23:40
Radvendii what's the character you used?
geekosaur backtick won't work, no
benabik .u ʹ
phenny U+02B9 MODIFIER LETTER PRIME (ʹ)
awwaiid sorear used U+02B9
Radvendii ah
23:41 PacoAir left
awwaiid two characters that render the same and act differently are a recipe for pain. But that's where we're all heading I suppose. 23:41
geekosaur see also punycode 23:42
awwaiid I guess their not quite the same... 'ʹ'ʹ'ʹ'ʹ'ʹ
Radvendii and when splat (*) does like 4 different things you're in big trouble... :P
awwaiid well as long as the splat consistently does those things then I'll be ok
like () doing grouping vs parameters 23:43
benabik nom: (* * *)(*)
p6eval nom 2b5363: OUTPUT«Not enough positional parameters passed; got 1 but expected 2␤ in whatevercode <anon> at /tmp/C9lcpmJYzo:1␤ in block <anon> at /tmp/C9lcpmJYzo:1␤ in <anon> at /tmp/C9lcpmJYzo:1␤»
benabik Awh
nom: (* * *)(*, *)
p6eval nom 2b5363: OUTPUT«No applicable candidates found to dispatch to for 'Numeric'. Available candidates are:␤:(Mu:U \$v, Mu %_!)␤␤ in method Numeric at src/gen/CORE.setting:649␤ in sub infix:<*> at src/gen/CORE.setting:2236␤ in whatevercode <anon> at /tmp/laWwCXY9uW:1␤ in block <anon> …
Radvendii (* ** *).WHAT 23:54
benabik WhateverCode()
Radvendii nom: (* ** *).WHAT
p6eval nom 2b5363: ( no output )
Radvendii lol
nom: say (* ** *).WHAT
p6eval nom 2b5363: OUTPUT«WhateverCode()␤»
Radvendii nice
benabik Radvendii: told ya. ;-) 23:55
23:55 ksi left
Radvendii nom: (* ** * * *)(1,2,3) 23:55
p6eval nom 2b5363: ( no output )
Radvendii nom: say (* ** * * *)(1,2,3)
p6eval nom 2b5363: OUTPUT«3␤»
Radvendii WIN
:
:P
nom: say (* ** * * * ** * * *)(0,0,0,0,0) 23:56
p6eval nom 2b5363: OUTPUT«0␤»
sorear have you seen the 'starry obfu'? 23:59