»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'perl6: say 3;' or rakudo:, niecza:, std:, or /msg p6eval perl6: ... | irclog: irc.pugscode.org/ | UTF-8 is our friend! | Rakudo Star Released!
Set by moderator on 11 August 2010.
00:00 Psyche^ joined
rokoteko rakudo: my $a = Nil; my @b = @($a); say $a.defined ~ "/" ~ @b.defined 00:05
p6eval rakudo 083999: OUTPUT«0/1␤»
rokoteko something to do with context that I dont understand. :) 00:06
tylercurtis rokoteko: nope. Nothing to do with context.
dalek ecza: a99a3e1 | sorear++ | (6 files):
Attach LTM data to Regex objects
ecza: ed21875 | sorear++ | (3 files):
Implement LTM subrule handling
ecza: 4a9b1cf | sorear++ | (2 files):
Add support for embedded blocks in regexes
ecza: cd0927e | sorear++ | test2.pl:
Use {} to much more thoroughly test LTM
rokoteko tylercurtis: mind to elaborate?
tylercurtis rakudo: my @a; say @a.elems; say @a.defined;
p6eval rakudo 083999: OUTPUT«0␤1␤»
tylercurtis rokoteko: arrays are always defined. 00:07
rokoteko Ah. Else it wouldn't be an array. Of course.
rakudo: Mu.new() 00:09
p6eval rakudo 083999: ( no output )
rokoteko rakudo: say Mu.new()
p6eval rakudo 083999: ( no output )
rokoteko rakudo: say Mu.new.defined
p6eval rakudo 083999: OUTPUT«1␤»
tylercurtis rokoteko: "array" in that sentence being somewhat handwavey, since Array.defined !=== True. But a Positional variable as created with "my @foo" will always be defined, I think. Likewise for "my %foo". 00:11
rakudo: my @a; say @a.defined; @a := Array; say @a.defined; # I'm not sure if this is correct behavior. 00:12
p6eval rakudo 083999: OUTPUT«1␤0␤» 00:13
tylercurtis If it is, a @a or %b variable could be undefined in some circumstances, but not without doing funny binding things.
rokoteko what is absolutely not defined in perl6? 00:16
a variable that hasnt been introduced, aka. syntax error? 00:17
tylercurtis rokoteko: not defined in the sense of not $foo.defined?
rokoteko I dunno what .defined() really tests, but yes. as in what I assume it to do. :) 00:18
heh it's 3:18 here (3:18am if you are not from the 12 hour clock zone) so I think it's time for me to get to bed also before thinking of too many Mu's :) 00:19
tylercurtis Type-objects and scalars that have not had anything defined assigned to them (this is just a consequence of the former.
rakudo: my $f; $f.perl.say
rokoteko s/12/24/
p6eval rakudo 083999: OUTPUT«Any␤»
rokoteko rakudo: my $f; my @a := $f; say $f ~ "/" ~ @a 00:20
p6eval rakudo 083999: OUTPUT«Any()/Any()␤»
rokoteko tylercurtis: ok. thanks for explanation. I doubt if I remember anything tomorrow, but I surely do hope my subconscious will handle this for me.. :)
Sweet dreams everyone! :) 00:21
tylercurtis Wow. I wouldn't expect that to work...
masak sorear: while you're implementing LTM, would you mind explaining how it works? :) 00:27
sorear masak: I'm basically just copying the implementation I did for STD.pm6 two months ago
masak ok. 00:28
sorear suppose your parser gets to something like [ for ... | BEGIN ... | \\w+ ... ] (simplified greatly)
masak with you so far.
sorear since the list is so long, trying each one one at a time would be slow 00:29
masak right.
and a DFA can do better.
sorear and there would be a lot of potential for error, since you'd have to manually keep \\w+ at the end of the list
masak right. that's why we have | there instead of ||
sorear: moritz_ sometimes mentions that DFAs don't backtrack, but sometimes we need to backtrack even the declarative part of a regex. how is that solved in your implementation of the LTM? 00:31
sorear The construction of the DFA eliminates backtracking 00:32
we don't turn the declarative parts directly into a DFA
masak oh?
sorear instead we turn them into an NFA, which is basically a DFA that can backtrack
masak and that's enough for our purposes?
sorear instead of one next-state per (char, next-state), it has a list of them
s:2nd/next-/old-//
masak right, hence the 'N' in NFA. 00:33
sorear now
there are 2 basic ways to implement NFAs, an obvious one and a clever one
you could just do ordinary regex backtracking - when you get to a place with >1 next-state, save a decision point
masak right. 00:34
that's what PGE and GGE do.
sorear but you can also keep a Set of *all* NFA states which are valid at the current position
masak sounds like Thompson again.
sorear then you never visit a character more than once
masak neato. 00:35
I'm still eager to try to implement that myself.
sorear DFA generation involves generating 1 DFA node per distinct set of NFA states
so you get a DFA that doesn't backtrack from a NFA that does, with no loss of functionality
masak so we do end up with a DFA eventually? 00:36
sorear I briefly implemented this in STD, but it had unusably slow startup time, so I went for a hybrid approach - DFA nodes are generate lazily as they are entered
a (DFA node, char) tuple can either point to a DFA node, or to a Set(NFA node) thunk
masak sounds reasonable. 00:38
thanks for the explanation, sorear. 00:39
time for me to try and sleep a bit. :)
o/
00:39 Visitor99 joined
tylercurtis sorear: so, you end up with a list of all of the possible matching series of state transitions, and let the one that matched the most of the string win the alternation? 00:40
sorear Yes 00:42
Although it's a little more complicated than just winning 00:43
The one that matches the most of the string (and wins on all four tiebreaking rules) gets first choice
But if the rest of the regex fails, backtracking can use a less-long prefix
tylercurtis Right. 00:44
00:49 jimk joined
diakopter .u CELEBRATION 00:49
phenny diakopter: Sorry, no results for 'CELEBRATION'.
diakopter U+1F64C PERSON RAISING BOTH HANDS IN CELEBRATION 00:50
sorear diakopter: phenny still doesn't know what supplementary characters are 00:52
tylercurtis sorear: U+1F64C also doesn't yet officially exist. 00:54
diakopter finds it funny that google updates its index of irclog.perlgeek.de/perl6/today every few minutes 01:07
dalek ecza: fb22be4 | sorear++ | test2.pl:
Fix testing of backtracking into LTM groups
01:08
ecza: 41f081d | sorear++ | Cursor.cs:
Make prefix length handling work properly in subrules
diakopter sorear: does niecza run the p6 testsuite 01:10
:)
sorear Not the whole thing, no. 01:13
01:20 s1n joined 01:23 ashleydev joined
sorear <[ ?..Z \\\\.._ ]> # Really, TimToady? 01:27
01:42 Visitor99 left
ingy hi sorear 01:42
01:42 Visitor99 joined 01:43 s1n joined
ingy sorear: what's the fastest way to get niecza running on my macbook? 01:44
I have a few minutes to try it :)
TimToady sorear: yes really
control chars are done by xoring the 64 bit, so ^? gives you \\x7f, ^@ gives you \\0, ^A gives you \\x01, etc 01:46
it would be one range except that we reserve \\c[...] so we can't use \\c[ 01:47
sorear and I suppose viv isn't up to the task of <[ ?.._ ]-[ \\[ ]> 01:48
gotcha.
TimToady well, gimme5 certainly wasn't...
sorear ingy: do you already have mono installed?
TimToady but given we have \\e for escape, \\c[ is very necessary 01:49
*n't
sorear I'd be suprised if viv was either. Chararcter classes are suprisingly nasty
01:52 thundergnat joined
sorear ingy: fastest way is to run "xbuild" and "./niecza_eval -e 'say q(hi)'" 01:52
there's a dep list in README.pod, I *think* it's up tod ate
ingy ok 01:53
should I install the default mono?
it looks huge 01:54
I just want the runtime, yeah?
01:54 pnate joined
ingy not the visual basic compiler, etc 01:54
sorear you want the runtime + the standard library + the build engine + the C# compiler 01:55
I think these are all in the 'mono' tarball
(get a binary package. the mono C# compiler is written in C#, so you need one anyway.) 01:56
ingy downloading 02:01
TimToady sorear: so it's looking like avoiding the DLR was a good decision...
btw, I've noticed snaptest is back down to 92%, so something has regressed... 02:02
thundergnat Newby fumbling around with Rakudo Star here. Quick question: How do you access the match variable in a .subst? 02:04
I thought $0 or $/[0], but no happiness.
say 'abc123def456'.subst(/(\\d+)/, { $0 + 10 }, :g); 02:05
TimToady it seems it currently passes it in to the closure as the first arg, but that's not how it's supposed to work
02:05 _jaldhar joined
TimToady rakudo: say 'abc123def456'.subst(/(\\d+)/, -> $/ { $0 + 10 }, :g); 02:05
p6eval rakudo 083999: OUTPUT«abc133def466␤»
thundergnat Hmmm. Not what I'm gettin locally. 02:06
TimToady note the -> $/
thundergnat Ah.
TimToady it's specced to set $/ in the outer scope, which the inner scope's $/ is supposed to default to 02:07
thundergnat Many thanks. Been trying to wrap my head around that for the past hour or so. 02:12
02:18 fod_ joined 02:23 ycheng joined 02:24 ycheng left
sorear TimToady: Would you know anything about why ibus-x11 has a 395MB heap? 02:30
(suprisingly for a _keyboard driver_, and me being typing, 390 of that is swapped out)
TimToady no idea 02:31
dalek ecza: 060d688 | sorear++ | (3 files):
Implement backslash escapes (except \\c) and $ @ % { interpolation for strings
02:33
ecza: b394a13 | sorear++ | test (2 files):
Tests for regex closures + LTM + grammars + backslash escapes are live
02:36 pnate joined 02:40 ashleyde1 joined
pugssvn r31989 | lwall++ | [STD] reduce **{42} to a warning, since **{$x} is allowed 02:48
02:52 kuzuha joined
kuzuha hi 02:53
02:53 justatheory joined 02:54 kuzuha joined
TimToady howdy 02:54
02:55 ashleyde2 joined
au|irc greetings 02:55
02:55 ashleyde1 left, ajs joined
sorear hello 03:05
ingy hihi 03:06
pugssvn r31990 | lwall++ | [sort.t] fix parsefail; reduce op requires whitespace
sorear TimToady: The code you just changed isn't supposed to even trigger on **{42}
TimToady the , is optional, and has a conditional based on whether it maches 03:07
*matches
and it's a longer token than '{'
so matches under quantified atom
sorear it's supposed to catch uses of x{2,5}
not x**{2} 03:08
I guess I should have put it under quantifier
TimToady that would make more sense, yes 03:10
testing 03:11
sorear the change just mentioned? 03:12
TimToady yes
(and reverting my patch)
sorear ok, I won't try it myself
03:12 ashleyde1 joined
TimToady also have to make it last-chance in LTM or it carps about quantifier quantifies nothing 03:17
pugssvn r31991 | lwall++ | [STD] don't use {N,M} check where quantifier not expected 03:18
TimToady that change puts us back up to 93% :) 03:19
03:19 drbean joined
sorear \\o/ 03:19
dalek ecza: b2b37b3 | sorear++ | Kernel.cs:
Use real exceptions for failures like method not found
03:22
ecza: 0644ab9 | sorear++ | Niecza.proj:
Add CheckoutSpecTest build target
ajs So... I've been banging my head against BigInt... trying to figure out why it wasn't working. Seems my parrot was compiled without BigInt support 03:26
But then why wasn't Q:PIR complaining? Does Rakudo put my modules in a Perl 6 namespace or does my defining BigInt in Perl replace the Parrot pmc? Was my "$P0 = new ['BigInt']" just giving me a new instance of my Perl 6 class? 03:29
sorear Rakudo puts your modules in a Perl 6 namespace. 03:31
tylercurtis ajs: There are different namespace for each HLL in parrot.
ajs: if you want to get something from the parrot namespace, you need get_root_global ['parrot'; 'bla'; 'bla'; 'bla'] instead of get_hll_global ['bla'; 'bla'; 'bla']. 03:33
ajs Strange then... I'd love to know why that worked. Oh well... recompiling now
You know, with the Oracle lawsuit... maybe now is the time to approach Google about basing Android apps on Perl 6 ;-) 03:36
sorear That would be insane.
TimToady what around here isn't? 03:37
diakopter see "wishful thinking" under tirania.org/blog/archive/2010/Aug-13.html
ajs That's a funny blog. C# indeed. Heh. 03:40
diakopter I didn't find it funny 03:42
ajs wait... was that serious? Oh. that's a sea slug of a different texture. 03:43
diakopter was my posting of the link serious? or was the blog entry serious? of course; it's written by a VP of Novell, Miguel de Icaza, who started the Mono project in 2000 when Microsoft announced the .NET project 03:44
and wrote most of it
ajs Oh I didn't read that it was a Miguel post. That explains a great deal.
diakopter and the section I referenced was aptly and humbly titled Wishful Thinking :) 03:45
sorear I assure you the lawsuit is serious 03:46
ajs heh
diakopter did someone doubt the lawsuit is serious?
sorear wonders what Microsoft sees in .NET
ajs hahaha
cash?
sorear how? it's not being sold, and it doesn't increase the value of Windows relative to OSX/Linux 03:47
I guess it could be useful in convincing people to upgrade from XP to Win7
diakopter: it looked like ajs was 03:48
ajs I did not doubt the lawsuit was serious... well, it's not serious in that Oracle doesn't actually think they'll win, but they're not fishing for a win, they're fishing for a settlement from Google that involves a piece of the Android pie. 03:51
03:55 ashleyde1 joined
ajs Ah, I remember, back in the day, picketing Lotus with RMS when they did this sort of thing... the good old days ;-) 03:56
03:59 drbean joined
ajs good lord, that was 21 years ago... Perl was 2 years old. 03:59
04:00 envi^home joined
ajs OK, yeah, my BigInt problem was that I was picking up BigInt from perl's namespace, not Parrot's. If I re-name my BigInt class, I find the Parrot one. 04:00
sorear you hung out with RMS back before he went insane? 04:03
ajs There was no "before" ... there were just degrees 04:04
04:13 drbean joined 04:22 Visitor99 left 04:27 redicaps joined 04:28 redicaps left 04:34 drbean joined
dalek ecza: 986e36b | sorear++ | (3 files):
Implement <sym> simple cases
04:35
04:38 orafu joined 04:46 araujo joined 04:52 drbean joined 04:55 drbean_ joined
sorear Is there a difference between proto token and proto rule? 04:55
TimToady there will be when we make proto a wrapper around the specific subrule 04:57
though not in the typical case where the whole body is {*}
sorear I wonder if scope_declarator(:$*endsym = 'nofun') {*} etc could become scoep_declarator { <sym> <.nofun> * } 05:00
TimToady not sure 05:01
the inside would be {*}, not *
(or it's a quantifier) 05:02
sorear Is {*} special syntax?
TimToady yes
see STD.pm6 line 4790 05:04
sorear What's the difference between [*] and {*}? 05:05
TimToady and 1251
[*] doesn't terminate LTM, I suppose
sorear does token/regex affect the function of proto $^a $^b {*} ? 05:07
TimToady I don't understand the question
sorear proto rule foo {*}
proto token foo {*} 05:08
# Are these equivalent?
TimToady yes
what does that have to do with placeholders?
sorear the placeholders were being metasyntax there
05:12 isBEKaml joined 05:15 Axius joined 05:27 jrtayloriv joined 05:33 Guest23195 joined 05:35 jrtayloriv left 05:41 macroron joined 05:46 wolfbytes joined 05:55 drbean_ left
ingy sorear: xbuilding... 06:18
sorear: 06:23
AOT compilation is not supported on this platform.
/Users/ingy/src/niecza/Niecza.proj: error : Command 'mono --aot Kernel.dll' exited with code: 1.
sorear You're the second person to experience a problem which the author of xbuild says is impossible and I can't reproduce locally. 06:24
ingy huh 06:25
sorear Fortunately, there's a workaround switch; set UseAOT to N in Niecza.proj
ingy sorear: works 06:26
super fast
sorear or maybe not. looks like I removed the old "guaranteed to work" one
super fast? 06:27
ingy only about 7 seconds for: ./niecza_eval -e 'say "hi"'
sorear locally, disabling the AOT compiler adds about 10 seconds to niecza_eval run time
which is 3-6 seconds normally 06:28
ingy anyway, now I can play with it
sorear needs to figure out what about the code it is that gives Mono's JIT a hissyfit
loading a 1MB library really shouldn't take 10 seconds
ingy I'm used to taking a a shit while rakudo's make test runs on my modules 06:29
06:38 cls_bsd left 06:48 Mowah joined
sorear \\o/ 07:01
dalek ecza: 3ba22dc | sorear++ | (10 files):
Implement protoregexes
07:02
07:19 coffeeyy joined 07:22 molaf joined 07:31 clem joined
diakopter sorear: by "1MB library" do you mean a .dll? 07:40
sorear: there are several JIT options (on by default) that can be disabled on the command line to mono 07:43
sorear diakopter: yeah 07:56
actually it's only 600k.. hasn't *quite* caught back up 07:57
08:25 awwaiid joined 08:45 tadzik joined
tadzik morning 08:45
sorear hello 08:51
08:51 Axius joined
moritz_ good morning 08:52
phenny moritz_: 13 Aug 22:50Z <tadzik> tell moritz_ the Channel Index link on irc.pugscode.org is broken, shows a calendar for #perl6 rather than a channel list
moritz_ that's the index of entries for that channel, yes 08:53
tadzik hm
moritz_ see irclog.perlgeek.de/ for the overview of channels
better names welcome :-)
09:08 Kiran_ joined
dalek ecza: edaad89 | sorear++ | (6 files):
Avoid traversing outer chains for uncloned values

instead of in the pad chain, so they can be accessed using much less code. Cuts 50K off SAFE.dll.
09:11
09:14 isBEKaml joined 09:24 karb joined, barney joined 09:25 kar joined
clem hi,I am a new guy to perl6,what's the *.pm file? 09:30
sorear Perl Module
a single source file that isn't the main program
clem sorear: thanks
09:32 karb joined 09:45 tadzik joined
isBEKaml .u U+2735 09:49
phenny isBEKaml: Sorry, no results
isBEKaml .u tone 09:50
phenny U+0EC8 LAO TONE MAI EK (◌່)
dalek ecza: ea4bc04 | sorear++ | (3 files):
Use indexed variables for compiler temporaries
09:53
isBEKaml are inline comments valid within quotes ? 10:03
rakudo: say " foo #`{ Im a comment } bar ";
p6eval rakudo 083999: OUTPUT«Could not find sub &comment␤ in main program body at line 22:/tmp/Z6AHXODvZf␤»
10:03 M_o_C joined
isBEKaml rakudo: say #`{ Im a comment } " foo bar "; 10:04
p6eval rakudo 083999: OUTPUT« foo bar ␤»
dalek ecza: 0e0c3d5 | sorear++ | (3 files):
Use out of line code for throwing exceptions
10:05
sorear isBEKaml: *no* comments are valid within quotes. 10:06
isBEKaml right 10:07
sorear niecza: say '????'.chars 10:09
p6eval niecza edaad89: OUTPUT«2␤»
jnthn morning
(ish) :-) 10:10
sorear hello jnthn
isBEKaml hi, jnthn :) 10:11
sorear: what charset was that? I have set my client to utf8 and I don't see it proper. 10:17
sorear utf8 10:19
it's a character that doesn't officially exist yet, you won't have it in any of your fonts
moreover, it's a character with index >64K
.net 'char' is 16 bits type 10:20
10:20 kst joined
isBEKaml I see. 10:21
10:22 envi^home joined
sorear I was wondering if niecza would blow up on seeing it, or if it would do something else 10:22
10:22 isBEKaml_ joined, isBEKaml_ left
sorear has reduced SAFE.dll from 600k to 400k... out of low-hanging fruit in the code generator, I think 10:23
10:23 meppl joined
isBEKaml oh, all I saw was 01F 64C. :) 10:23
dalek ecza: b251ab8 | sorear++ | (2 files):
Use a more efficient encoding of filename data
10:24
10:36 orafu joined 10:51 orafu joined 10:59 whiteknight joined 11:06 pmurias joined 11:08 Mowah joined 11:09 masak joined
masak weekend! whee! \\o/ 11:10
jnthn wheekend! \\o/
11:10 redicaps joined
tadzik it's almost half of August! :( 11:10
lolitsweekend 11:11
11:19 zby_home joined
masak std: / x ** {42} / 11:25
p6eval std 31912: OUTPUT«[31m===[0mSORRY![31m===[0m␤Unsupported use of {42} as general quantifier; in Perl 6 please use X**42 at /tmp/Pde3G66tj6 line 1:␤------> [32m/ x ** {42}[33m⏏[31m /[0m␤Check failed␤FAILED 00:01 114m␤»
masak I find this highly suspect. 11:26
don't see anything wrong with it.
isBEKaml std: / x ** {1,42} / 11:27
p6eval std 31912: OUTPUT«[31m===[0mSORRY![31m===[0m␤Unsupported use of {1,42} as general quantifier; in Perl 6 please use X**1..42 at /tmp/Kr1NJYLMDE line 1:␤------> [32m/ x ** {1,42}[33m⏏[31m /[0m␤Check failed␤FAILED 00:01 114m␤»
masak right.
isBEKaml huh?
doesn't this mean match x min 1 time, max 42 times ? 11:28
masak so maybe tonight's discussion between TimToady and sorear was saying that the latter error inadvertently triggers on the former case too.
isBEKaml: in Perl 5 it does.
isBEKaml: in Perl 6 we use a range.
just like the error message says.
isBEKaml :D I find it hard to compartmentalise p5 and p5. 11:29
s:2nd/5/6
masak I can see that :P 11:32
isBEKaml rakudo: my @a //= list(1,2,3); @a.perl.say; 11:33
p6eval rakudo 083999: OUTPUT«maximum recursion depth exceeded␤ in 'Block::count' at line 5614:CORE.setting␤ in 'Block::count' at line 5618:CORE.setting␤ in 'Any::join' at line 1␤ in 'Array::perl' at line 2826:CORE.setting␤ in <anon> at line 2826:CORE.setting␤ in 'Any::join' at line 1␤ in
..'Array::perl' a…
isBEKaml :/
masak: you got it right! :P
masak isBEKaml: I'm thinking about how to implement simple subs in Yapsi. 11:34
isBEKaml: there's also a lot of low-hanging fruit possible right now, in terms of things that can be implemented.
isBEKaml masak: I'm always on the lookout for LHFs. I'm currently going over the synopses(long since I touched one. :s) 11:35
masak nice. anything in particular you're looking for in the synopses? 11:36
isBEKaml masak: no, just reading over whatever I had read since last.
work constraints didn't give me any opportunity to dedicate time to go over synopses or learn more about p6. So I was just trying to learn-on-the-go from this channel. :P 11:38
masak tadzik: commit pulled into ufo. thanks. tadzik++
isBEKaml: in my experience, the synopses themselves give a quite shallow insight into Perl 6. actually writing code is what really helps. 11:39
isBEKaml masak: even to begin writing code, you'd need some foundation to start with! :D
masak the lack of such never stopped me. :P 11:40
isBEKaml so far, I haven't even got to the extent of writing good code. (babble babbly babble) :P
11:40 ajs joined
masak good code is more about common sense and experience than about extreme familiarity with the programming language. 11:40
isBEKaml oh, not extremes or expert level. just dip in, watch out for slippery sand and wade into the sea. :) 11:41
I haven't even succeeded in balancing myself on the sand. :P
11:45 azert0x joined 11:48 echosystm joined
isBEKaml masak: yapsi no longer uses alpha? 11:50
perl6?
#!/usr/bin/env perl6 11:51
masak correct.
that happened during the refactor right before this month's release.
I had considered it, and took the plunge when I realized how easy it was.
isBEKaml why did we need alpha in the first place ?
masak back in April, that was what I wrote stuff in.
you probably would've too :) 11:52
isBEKaml legacy. :)
time to use poc to install ufo. :)
masak let me know how it goes. 11:53
I'm not sure poc will generate a Makefile that puts bin/ufo in any install location. :/
ajs Question about overloading 11:54
Tene lolitsmasak
ajs I have this in my BigInt.pm: our BigInt multi sub infix:<+>(BigInt $lhs, BigInt $rhs) is export { ... }
isBEKaml masak: I'm surprised. no README ?
how do i pass an install target? 11:55
masak work in progress :/
ajs But when I try do to $a + $b where both are BigInt, it seems to convert both to numerics
Am I doing something wrong, there?
masak isBEKaml: you don't, currently. it's meant to be automatic. (but possibly overridable, that's a nice idea)
currently it's neither.
isBEKaml :/
masak ajs: you are aware that Int is spec'd to be a bigint type already? 11:56
ajs yes, but it doesn't work that way, and I want access to Parrot's BigInt PMC from Perl 6
masak isBEKaml: I wasn't planning on hacking on poc now, but I could try and fic it for you quickly.
ajs: I see. no, I don't know why it converts to numerics. sounds like a #parrot question. 11:57
isBEKaml masak: ok, anything I need to do?
masak isBEKaml: hold on for 10 minutes or so :)
isBEKaml :)
ajs Um... masak, this isn't a Parrot thing. My BigInt is a Perl class. It encapsulates an attribute that holds the Parrot BigInt 11:58
masak ajs: right, but the + operation you delegate to is on the Parrot level, isn't it?
ajs There is a Parrot call within my inline<+>, but that routine is never invoked, that's my problem 11:59
isBEKaml masak: I'm reading over the code. Nicely demarcated responsibilities across classes. :)
masak isBEKaml: in pls? yes, that's the whole idea. 12:00
isBEKaml masak: nice.
masak isBEKaml: it's probably the most elaborate Perl 6 type hierarchy I've created to date.
12:00 nadim joined
isBEKaml Not even GGE ? :) 12:01
ajs Actually, I take that back. I'm not sure what it's doing. It's not calling my .Numeric or .Int either.... I need to look into this some more. I've done something odd, clearly.
masak GGE might be on par with this one. but it ended up being a quite faithful copy of PGE's hierarchy... so I didn't really create it :)
isBEKaml masak: I find the MAIN sub that takes 3 arguments. so, um, how do I use them? 12:02
masak isBEKaml: ./proof-of-concept --force ufo
(for example)
eventually, that'll be 'pls install --force ufo' 12:03
isBEKaml I'm not forcing it. :) 12:04
masak no, probably no need.
12:04 desertm4x joined
isBEKaml Segfaulted :O 12:05
Hash: unsupported key_type
Segmentation fault
that was on Star.
masak I'd be very happy if you could isolate that error for me. 12:06
isBEKaml yes, looking over it.
masak isBEKaml++
12:15 isBEKaml joined
isBEKaml wtf? it seems to work with the latest rakudo, but not star. 12:20
well, not latest. built 2 days ago.
masak then there's probably no need to go bug-hunting. 12:21
12:21 Mowah joined
isBEKaml anyway, it fetched ufo. but tests failed and I'm not seeing the log file that it says I should see. 12:22
Couldn't install ufo: the test step failed. 12:23
You'll find a log file `test-ufo.log` in the current
masak isBEKaml: noted. will try to reproduce that here.
huh. for me, the fetch step failed. 12:24
isBEKaml :) 12:25
masak ah, it's a lingering cache/ dir with no perms. removing and retrying.
isBEKaml do you see any logs?
masak yes, I had a fetch-ufo.log telling me exactly that.
right. the test step fails here as well. 12:26
investigating.
ok. I also get no logfile for that. 12:27
there's no Makefile in cache/ufo/
wonder why that is.
isBEKaml++ # this is exactly the kind of testing pls needs
isBEKaml erm, about ufo, why do you need to do a 'which' on ufo when I'm providing the exact path?
which: no ufo in (/usr/local/bin:/usr/bin:.... 12:28
masak I also just saw that in bin/ufo. I don't know why ingy added that.
for some reason, ufo wants to find its installed self nowadays.
isBEKaml odd.. 12:29
btw, we don't need ufo in the makefile anymore since the job of generating the makefile is already done by ufo and it should get out the way, right? 12:31
I don't see why we need UFO in the makefile?
transitive dependency checking? 12:32
masak I'm afraid I can't answer that.
maybe I should just remove that line and see what ingy complains about.
either that, or just ask him. :P
isBEKaml phenny: ask ingy why we need UFO defined in the generated makefile that it generates. 12:33
phenny isBEKaml: I'll pass that on when ingy is around.
isBEKaml we'll just bug him with that qq. :P
masak ah. proof-of-concept doesn't generate the Makefile, because it doesn't find a lib/ dir. 12:35
that's probably wrong nowadays, thanks to lib/-less projects such as ufo.
removing that clause. 12:36
in the long run, we'll want to turn the ufo part of proof-of-concept into something that doesn't generate a Makefile, but runs things in pure Perl 6.
actually, in the not-so-long run, we'll want that. :) 12:37
isBEKaml ufo part of POC?
ah, I see now. :) 12:38
masak in a weak moment, I copy-pasted ufo into POC.
the real ufo and the copy inside POC are now two quite different beasts. they diverged really wuickly, actually. 12:39
12:40 ruoso joined
isBEKaml I see. weak-moment. :D 12:40
"weak-moment" has a different connotation where I live. 12:41
:P
masak do tell.
India, right?
isBEKaml women. Men fall prey to scheming women in their weak moments. :D 12:42
yes, India.
masak rakudo: my @files = dir("a-dir-that-does-not-exist");
p6eval rakudo 083999: OUTPUT«Operation not permitted in safe mode␤ in 'Safe::forbidden' at line 2:/tmp/afe6zdg5no␤ in main program body at line 22:/tmp/afe6zdg5no␤»
masak isBEKaml: I think that connotation exists in English as well.
maybe it's even the dominant one.
12:43 redicaps left
masak I should probably have said "a moment of temporary confusion" :) 12:43
isBEKaml masak: oh, I don't know. I find that used here sometimes. :)
masak or It Seemed Like a Good Idea at The Time.
jnthn Heh, "in a moment of weakness" has quite wide range of meaning rather than just that in my dialect of English, at least. :-)
isBEKaml That's Better(tm). :P 12:44
masak isBEKaml: now dir() dies because it didn't find the file it was looking for. fixing.
isBEKaml Let the Briton give us more insight into ther native language! :) 12:45
masak: aren't you checking for makefile with :e switch? 12:46
build() method.
masak isBEKaml: yes, but ufo doesn't have one. 12:47
isBEKaml: it's self-hosting nowadays.
so poc tries to build one.
isBEKaml I see.
masak but currently it has a number of checks that prevent it from doing so with a project without a lib/ dir, or without modules in the lib/ dir, etc. 12:48
all of which assumptions are wrong about ufo.
isBEKaml purge ufo from poc and refactor the rest?
pmichaud good morning, #perl6 12:49
masak that's the idea. right now I'm just trying to make ufo install.
isBEKaml more precisely, purge the ufo clone from poc.
masak pmichaud: morning!
isBEKaml: aye.
isBEKaml morning, pm! :) 12:50
masak isBEKaml: if you want to help with that, I'd much appreciate it.
isBEKaml masak: sure! by now, I have a hazy idea about the structure of poc.
masak excellent.
my "10-minute" patch seems to be nearing completion. 12:51
isBEKaml ufo should be a prerequisite then, right?
masak I'm sacrificing a bit of the current ufo in poc, since that's going away anyway.
nope.
it's more like poc/pls will have its own built-in pure-Perl6 ufo.
isBEKaml install ufo if not found. not a prerequisite.
?
masak no, ufo is completely separate from pls. 12:52
that's why I copied it in in the first place.
because I figured it's a different thing, but we want to do the same stuff.
ok, now it creates the Makefile.
test step still fails.
Unable to open filehandle from path 't/' 12:53
heh :)
isBEKaml :)
masak ok, so I'll just create a t/ dir then.
the test step now works. the install step fails. 12:54
and it gives odd error output. 12:55
isBEKaml ?
masak Couldn't install ufo: the 0 step failed.
there's no 0 step.
rakudo: my $a = "a"; my $b = do given $a { when "a" { 42 ?? "foo" !! "bar" } }; say $b 12:56
p6eval rakudo 083999: OUTPUT«foo␤» 12:57
masak hm.
isBEKaml perhaps it doesn't match any of the states? perhaps there's no "built" state?
masak investigating. 12:58
still don't see where the 0 is coming from.
isBEKaml rakudo: my $a = "buuss"; my $b = do given $a { when "a" { 42 ?? "foo" !! "bar" } }; say $b
p6eval rakudo 083999: OUTPUT«0␤»
isBEKaml :)
there.
masak isBEKaml++ 12:59
isBEKaml masak: ^^
masak submits rakudobug
rakudo: say do given 'x' { when 'y' {} }
p6eval rakudo 083999: OUTPUT«0␤»
masak I think it should be Nil or something. 13:00
13:00 araujo joined
masak or maybe something undefined :P 13:00
isBEKaml I'd hazard a guess at Any()
masak ah; the state is 'tested' and there's no 'when' for that.
isBEKaml but that doesn't make sense since this is more of a programmer error.
masak isBEKaml: in this case, yes. in the general case, not necessarily. 13:01
isBEKaml masak: generally, shouldn't there be a default case then? 13:03
masak: do given $x { when .. { } when ..{} otherwise/default {} } or something like that?
masak the 'default' block is just sugar for 'when True'. 13:04
it might as well be omitted at the end of the given block. 13:05
ok, poc now claims to have installed ufo, but I don't find it in ~/.perl6/bin
isBEKaml so we keep it at the end of the block to denote the default case? is it guaranteed that the compiler wil jump out of the block as soon as it finds a match?
PERL6PATH? 13:06
masak ah, the things I copied over from ufo don't seem to find bin/ufo
isBEKaml: I didn't understand what you said about the default case, sorry. 13:07
pmichaud the 0 is the result of the failed test
(against the "a") 13:08
isBEKaml masak: my $y = 't';my $x = do give $y { given 'a' {} given 'b' {} } 25; # $x would contain 25
13:08 orafu joined
masak pmichaud: oh! 13:08
so there is some logic to it anyway.
pmichaud yes, I don't know what spec would say here. But there was a smartmatch performed, and Rakudo is using that as the return value since it's the last operation performed 13:09
(in the block)
13:10 karb joined
isBEKaml rakudo: my $x = 't'; my $y = do given $x { when 'a' { 23 }; when 'b' { 0 }; } 55; say $y; 13:11
p6eval rakudo 083999: OUTPUT«===SORRY!===␤Confused at line 22, near "my $y = do"␤»
isBEKaml rakudo: my $x = 't'; my $y = do given $x { when 'a' { 23 }; when 'b' { 0 }; }; say $y; 13:12
p6eval rakudo 083999: OUTPUT«0␤»
isBEKaml rakudo: my $x = 't'; my $y = do given $x { when 'a' { 23 }; when 't' { 42 }; when 'b' { 24 } }; say $y;
p6eval rakudo 083999: OUTPUT«42␤»
masak pmichaud: the simplest thing would be to leave it like it is, returning False. 13:13
isBEKaml rakudo: my $x = 't'; my $y = do given $x { when 'a' { 23 }; when 'b' { 24 } } // 42; say $y;
p6eval rakudo 083999: OUTPUT«0␤»
pmichaud masak: I agree; and I liked 'simplest' here :)
*like 13:14
13:14 Mowah joined
masak aye. 13:14
masak closes ticket
poc installs ufo! \\o/
masak ships it
isBEKaml \\o/ 13:15
masak++
masak isBEKaml: pushed to the pls branch. please try it out. 13:16
isBEKaml: you might have to 'rm -rf cache/ poc-projects.state' before you re-run poc.
isBEKaml masak: I just rm-rf'd cache. ll remove .state too. 13:17
13:17 uniejo joined
isBEKaml masak: let's see how that goes now. :) 13:17
segfaulted. forgot about the latest perl6 thingy. : 13:18
:D
isBEKaml tries again. 13:19
masak I'm glad that segfault is gone. 13:20
13:20 kid51 joined, dudulz joined
isBEKaml is glad too 13:21
masak goes for lunch
isBEKaml phenny: tell masak, tests failed. I think I got an older version of prove installed. the -e and --nocolor switches are not recognised. prove --version gives prove v2.64, using Test::Harness v2.64 and Perl v5.10.0 13:29
phenny isBEKaml: I'll pass that on when masak is around.
13:37 tadzik joined
tadzik hello again 13:37
isBEKaml lolitstadzik! # loli'd again. :) 13:38
13:40 drbean joined
isBEKaml \\o/ ufo installed! (with slightly modified switches to prove in tune with my local version) 13:47
tadzik hmm? 13:51
13:51 pmurias joined
isBEKaml tadzik: ? 13:51
tadzik isBEKaml: installed with what, pls?
isBEKaml tadzik: yes. 13:52
tadzik nice!
pmurias ruoso: do you think prototyping mildew's optimizer in haskell (so that i don't have to port hoopl before i understand it fully or am sure it's the right choice) a sane idea?
isBEKaml tadzik: masak++ did a few changes to poc since tests started to fail. 10-minute-patch! :D
tadzik :) 13:53
poke driven development? :P
isBEKaml event driven development! :P
the-turn-of-events-triggered-masak-into-patching-poc! 13:54
:) 13:55
tadzik :) 13:56
pmichaud phenny: tell TimToady could I get some clarification on your comments quoted in RT #71112? Are there any conditions in which @_ would be writable? It's also worth noting that "might-be-lvalue" doesn't appear to be much of a penalty in Rakudo (it's less cost than "enforces readonly-ness" in this case). 14:13
phenny pmichaud: I'll pass that on when TimToady is around.
14:15 isBEKaml_ joined 14:20 tom_tsuruhara joined
jnthn pmichaud: ping 14:20
pmichaud jnthn: pong
jnthn pmichaud: If you have a PAST::Op of pasttype bind, and there's a PAST::Var within it, it would seem that we need to code-gen things differently than if it was just a PAST::Var in r-value context. 14:21
14:21 risou joined
jnthn pmichaud: How do you approach this in PAST::Compiler? Does something pass down to that PAST::Var that tells it to code-gen differently, or...? 14:21
pmichaud jnthn: I think pasttype<bind> sets the lvalue flag on the PAST::Var 14:22
(evil, because it makes the tree mutable, but that's the approach I took for the time being)
jnthn Ah, OK
pmichaud we could probably do a bit better using dynamic vars now
we didn't have them at the time that code was written
jnthn Yeah, I was pondering a dynamic var solution.
Anyway, if it's just that something tells PAST::Var to code-gen differently, then I think I'm not thinking about this too wrongly. :-) 14:23
pmichaud well, PAST::Var already knows to code-gen differently depending on lvalue and decl
otoh, I don't know how much I'd want to use the current PAST::Compiler as a model. Much of what is there is trying to work around Parrot's lack of decent lvalue handling 14:24
and the fact that Parrot confuses binding and assignment
jnthn I haven't been looking at it really. :-)
Just "how do I get from PAST to runnable" :-) 14:25
It'd seem that it relies on PAST::Var as an l-value evaluating to some kinda node that it can push the value we want to bind into though.
s/into//
oh wait 14:26
s/that/onto which/ :-)
pmichaud you have to do something that knows how to handle b-values, yes.
in PCT's case, the value gets passed down to PAST::Var as a bindvalue parameter or something like that 14:27
(note "b-value" !== "bindvalue")
in pct, bindvalue is the rhs 14:28
jnthn Right, it's kinda the opposite direction of flow, in a sense.
pmichaud (just clarifying to avoid potential confusion :-)
jnthn Yes, thanks. :-)
Let's see what I can make work. :-) 14:29
karb In signatures is it required to mark a parameter as "is copy"? Can't we use copy-on-write like mechanism? 14:39
pmichaud karb: I think the intent is to make it very clear what is happening. 14:40
dalek kudo: 9e1bcd4 | pmichaud++ | src/binder/bind.c:
Some refactors to array creation in the binder prior to @_ updates.
14:41 masak joined
karb pmichaud: Ok. Can explicitness not be optional? 14:41
jnthn karb: Are you finding that you use "is copy" a lot? 14:42
Most Perl 6 code I've seen makes little use of it, that's all.
yaymasakisback
masak 'is rw' and 'is copy' are, in some very vague sense, code smells. 14:43
phenny masak: 13:29Z <isBEKaml> tell masak tests failed. I think I got an older version of prove installed. the -e and --nocolor switches are not recognised. prove --version gives prove v2.64, using Test::Harness v2.64 and Perl v5.10.0
karb i seem to as in other languages you hardly mark it that way as those 'other' languages tend to copy values by default
masak isBEKaml: yeah, I recognize that failure, and it has to do with versions of whatever module prove is in.
isBEKaml: Test::Harness, yes.
isBEKaml: I think we should be a bit strict there and just require the newer one. 14:44
isBEKaml_ masak: yes, I fixed it locally with some different arguments passed in. :)
masak I'll happily accept a patch that checks what Test::Harness is installed, and fails the test step if it's a not-new-enough version.
isBEKaml_ masak: just prove --perl 'perl6' -r t/ worked.
I believe --perl exists in all versions atleast since 2.64 that I have here. 14:46
and --nocolor isn't needed, is it? 14:47
masak no, not really. 14:48
masak removes it
tadzik masak: working on pls? 14:49
masak tadzik: I was, earlier today, thanks to isBEKaml++.
tadzik: it was a pleasant little yak shaving session.
I now feel eager to get back to pls after the GSoC grant finishes.
jnthn \\o/
masak++
jnthn takes a break 14:50
masak turning the Makefile-generation into pure Perl 6 instructions instead.
someone else could probably beat me to that, if they wanted.
tadzik nice! 14:51
masak isBEKaml_: --nocolor now removed in both ufo and pls. 14:54
isBEKaml_ masak: great! All that is needed with prove is to warn if the new version isn't found ,degrade gracefully to whatever older version available and complain loudly if that fails. :) # I have yet to figure out how to do that. tadzik? 14:55
tadzik isBEKaml_: Hm? 14:56
14:56 karb left
isBEKaml_ tadzik: ^^ 14:56
masak isBEKaml_: yes, that would be the long-term solution.
isBEKaml_ tadzik: how do I do that? :)
tadzik yes, I see. But I don't know what do you mean, and what do you actually want to do
(and why)
masak isBEKaml_: I guess perl can be made to return the version number of the installed Test::Harness.
tadzik: we want to switch behaviours (the flags we send in) based on installed Test::Harness version. 14:57
isBEKaml_ masak: -r exists in both. -e is available in newer versions while older ones seem to have --perl to select which perl to work with.
masak huh.
tadzik hm
arnsholt Yeah, that's an annoying detail 14:58
isBEKaml_ masak: -e or --exec whatever is suitable in newer versions.
arnsholt I discovered that myself a while back
14:59 jimk joined
masak arnsholt: it would be nice to solve it once and for all in pls. 14:59
arnsholt: so that newer users get the perks, but older users don't get errors.
arnsholt Indeed. I can't remember which version of Test::Harness changed from --perl to --exec though, I'm afraid 15:00
masak that's easy enough to find out. 15:01
15:01 stereonaut joined
arnsholt True. Me knowing would be even easier though =) 15:01
isBEKaml_ :)
15:01 justatheory joined
isBEKaml_ cpansearch.perl.org/src/ANDYA/Test-...21/Changes 15:06
changelogs don't show anything. If at all, I see only older versions with --exec. :/
masak I remember finding out once by going through the older versions and looking at the Pod HTML. 15:07
isBEKaml_ cpansearch.perl.org/src/ANDYA/Test-...anges-2.64 15:09
" The current version of test harness is a complete rewrite of this code." :O 15:10
Should we inform the author he broke --perl ? :D 15:11
masak possibly. 15:12
isBEKaml_ 2.99_02 2007-09-07 --> Added support for non-forking Perls. # this is the closest I see. 15:13
15:13 Axius joined
masak that looks completely unrelated to me. 15:13
isBEKaml_ or I don't get it. older version of perl maybe.
TimToady std: 42 15:14
phenny TimToady: 14:13Z <pmichaud> tell TimToady could I get some clarification on your comments quoted in RT #71112? Are there any conditions in which @_ would be writable? It's also worth noting that "might-be-lvalue" doesn't appear to be much of a penalty in Rakudo (it's less cost than "enforces readonly-ness" in this case).
p6eval std 31912: OUTPUT«ok 00:01 111m␤»
TimToady std isn't updating
15:17 fod joined
masak TimToady: at some point, I'd like to talk about Nil and definedness. some other people also seem to want that. :) 15:18
TimToady: irclog.perlgeek.de/perl6/2010-08-13#i_2701269 15:21
15:25 Mowah joined
masak yapsi: my $a = 42; say $a 15:40
p6eval yapsi: OUTPUT«42␤»
masak yapsi: my $a := 42; say $a
p6eval yapsi: OUTPUT«Couldn't handle instruction `bind '$a', <constant>`␤»
masak huh.
moritz_, diakopter: would it be possible to add a commit SHA1 hash for the yapsi target, like rakudo and std have? 15:42
moritz_ would be possible, yes
just have your default 'make' target write the SHA1 into a file
15:42 whiteknight joined
masak is that what rakudo and std do? 15:43
moritz_ more or less
yapsi: my $a := 42; say $a
p6eval yapsi: OUTPUT«Couldn't handle instruction `bind '$a', <constant>`␤»
moritz_ seems it didn't rebuild 15:44
yapsi: my $a := 42; say $a
p6eval yapsi: OUTPUT«Couldn't handle instruction `bind '$a', <constant>`␤»
masak as far as I know, that might be the latest behaviour.
moritz_ that's 513948d3b034fa9aea07828a7cbc855ba0e174a2 now
masak I'm having problems getting yapsi to run (fast) locally. 15:45
oh, that's ancient.
15:46 stereonaut joined
moritz_ Makefile was locally modified, which prevented pulls 15:46
yapsi: my $a := 42; say $a
p6eval yapsi: OUTPUT«Unable to open filehandle from path 'yapsi'␤current instr.: 'perl6;PCT;HLLCompiler;evalfiles' pc 1303 (src/PCT/HLLCompiler.pir:707)␤called from Sub 'perl6;PCT;HLLCompiler;command_line' pc 1489 (src/PCT/HLLCompiler.pir:794)␤called from Sub 'perl6;Perl6;Compiler;main' pc -1 ((unknown…
masak it's bin/yapsi nowadays. 15:47
whiteknight how do I interact with a normal Parrot PMC type from Rakudo? Is there something like NQP's Q:PIR that I can use? 15:48
masak Rakudo has Q:PIR too.
whiteknight nice'
masak there's also pir::some_op
whiteknight are there any good examples of it's use in Rakudo that I can look at?
masak src/core 15:49
moritz_ ack -iw pir src/
15:49 p6eval joined 15:51 karb joined 15:56 Axius joined 16:04 Axius_ joined
masak seems like proto regexes didn't exist in the first snapshot of STD. github.com/moritz/Mu/commit/1a2d70b...77ff7206ac 16:06
16:07 Mowah joined
moritz_ masak: they just weren't called proto 16:09
github.com/moritz/Mu/commit/1a2d70b...6ac#L0R184
masak moritz_: indeed. 16:10
16:11 Trashlord joined
masak hm, blog post idea. "Places where Perl 6 diverges from Perl 5 and why we did it" 16:14
sigil invariance.
16:15 Axius joined
masak qx instead of backticks. 16:15
rokoteko what's wrong with qx in perl 5? 16:16
moritz_ p5 also has px
rm, qx
rx vs. qr
adverbs up front
masak right.
rokoteko moritz_: the words you speak are relatively short.
masak rokoteko: oh, I didn't know that.
moritz_ rokoteko: good huffman coding :-) 16:17
rokoteko masak: nods. if you need some ideas, I tried to output some of my thoughts (as having perl5 background) to moritz last night. maybe you could share them. :)
masak rokoteko: definitely. 16:18
rokoteko: so, they're in the channel backlog?
moritz_ no, private message 16:19
rokoteko mentioned p5 references vs. p6 captures, for instance
I'd gladly delegate that to you, masak :-)
rokoteko moritz_: captures/parcels. and explaining the relation to perl 5 references and also whats the difference with parles and captures. :) 16:20
masak moritz_: :)
rokoteko s/parles/parcels/
masak .oO( parsley, parley... )
rokoteko masak: fascinating. that just reminded me that forgot to put parsley on my root vegetable stew that about ready to come out of oven. :) 16:21
masak rokoteko: you're welcome. 16:22
rokoteko :)
masak zips off in the air to help the next citizen
rokoteko the Herb-Man did it again! 16:23
masak plays theme music out of nowhere
16:24 Axius_ joined
moritz_ hums "Scarborough Fair" .... "she once wasn a true love of mine" 16:24
jnthn Only the best singers bring out the \\n as they sing it. 16:26
pugssvn r31992 | pmurias++ | [mildew] add a -Cast-haskell backend to Mildew to spit out the AST as a
r31992 | haskell literal (to be read in by read)
r31993 | pmurias++ | [mildew-hoopl] start prototyping the mildew optimiser with haskell and hoopl
moritz_ can talk punctuation -- sometimes :-) 16:27
pmurias masak: i have started the mildew-hoopl experiment ;)
masak pmurias: yeah, I suspected that from your question to ruoso. :)
pmurias: how's it going?
pmurias got the feed the AST to haskell part done 16:29
now i have to start writing the optimalisations
masak cool. 16:30
16:35 risou joined
pugssvn r31994 | moritz++ | [t/spec] unfudge MAIN tests, patrickas++ 16:37
r31995 | moritz++ | [t/spec] simplify, extend and fudge any-bool.t
16:39 awwaiid joined, stereonaut joined
pugssvn r31996 | moritz++ | [ext/CGI] make CGI.pm compile with rakudo; also use auto-generated accessors 16:40
pmurias masak: i'll have to transform the AST into a form that hoopl can work with before writing them first 16:41
masak makes sense.
pmurias what can cause a jump? an exception, a control exception , a goto? 16:46
masak the lower end of a loop or the upper end of an if statement :P 16:47
pmurias masak: i'm trying to figure all the magic jumps 16:48
16:49 Mowah joined, awwaiid joined
pmurias does goto and loop control flow a control exception? 16:50
masak SORRY cannot parse, near 'loop control flow a'. 16:53
pmurias does goto and loop control flow (last,next) throw a control exception? 16:56
masak: sorry for not using proper english
;) 16:57
masak pmurias: no worries. it's just hard with a sentence that doesn't the main verb.
could be 'throw', could be 'ignore', could be 'hug'... :)
pmurias: anyway, your question. I'm pretty sure last and next throw exceptions, since they're dynamical in nature. 16:58
pmurias: but goto isn't, really. it needs to be able to jump inwards into blocks as well as to roll back the call stack. 16:59
isBEKaml masak: ./yapsi -e 'my $a=3; while --$a { say my $b; $b=42; }; ' # :) 17:00
Unknown instruction: $1 = fetch [0, 0]
masak isBEKaml: yeah, something seems to be amiss. I'm guessing something changed in Rakudo recently. 17:01
isBEKaml masak: I don't know. that was SIC. 17:02
:/
masak right, but that definitely used to work.
the fact that it says 'unknown instruction' means that the corresponding regex no longer matches. 17:03
and I didn't change anything.
pmurias masak: goto also scans for the label both dynamically and lexically
masak true, true. but the jump itself cannot be executed with an exception alone. 17:04
with next and last, it can.
isBEKaml masak: yes, looks like a failed regex match. I see the regex here. 17:06
masak question is why. 17:07
isBEKaml Unknown instruction: $1 = fetch [0, 0] 17:10
oops
['[(0)||'-'(\\d+)]', '(\\d+)']' $ # the first 0 is always 0, just curious. 17:11
?
pmurias masak: any thing else that jumps strangely?
masak pmurias: junctions? not sure if those count.
pmurias: they do run the same code many times, just like loops, though. 17:12
isBEKaml: ok, I know what's wrong.
isBEKaml: the literal string is line-broken. 17:13
isBEKaml masak: that's a problem?
masak well, it makes it try to match a newline and a lot more spaces.
isBEKaml masak: I thought p6 regexes don't count whitespaces? 17:14
masak they don't... outside of literals.
much like non-regex p6.
isBEKaml I see. 17:15
masak I pushed a fix. testing it now. 17:16
dalek psi: 542b528 | masak++ | lib/Yapsi.pm:
[Yapsi] unbroke cleaning-up change
17:17 risou_ joined
pugssvn r31997 | audreyt++ | * C<'> is an apostrophe, not a hyphen. :-) 17:18
r31998 | audreyt++ | * A couple more Differences.pod nits. 17:21
whiteknight in Rakudo, can I call a method on a normal PMC, or will ever method call attempt to use the rakudo signature binder? 17:23
ingy greetings 17:24
phenny ingy: 12:33Z <isBEKaml> ask ingy why we need UFO defined in the generated makefile that it generates.
moritz_ whiteknight: I think it should work
masak isBEKaml: speaking of Yapsi, do you also get a failure on line 363 of lib/Yapsi.pm when running 'make test'? it's after test 17 of t/runtime.t
jnthn whiteknight: The signautre binder is callee side.
whiteknight ah, okay.
perfect
isBEKaml masak: lemme check. 17:25
moritz_ whiteknight: the invocant decides what dispa... jnthn was faster
ingy isBEKaml: you still need to know?
isBEKaml ingy: yes. 17:26
ingy make Makefile deps on it
so you can make Makefile if the makefile is out of date
because you installed a new ufo
isBEKaml ingy: I only guessed at other dependencies for the modules to be installed so that ufo can detect and generate makefiles. 17:27
ETOOSLOWTYPING
masak ingy: why not just do 'ufo' in that case?
ingy: that's what ufo does, after all.
isBEKaml masak: dannit, prove is my undoing! :/ 17:28
masak isBEKaml: edit Makefile manually?
isBEKaml masak: yes, that's what I'm doing.
ingy masak: why run ufo if the Makefile is already up to date?
it's just a good make practice 17:29
isBEKaml ingy: that's what ufo should detect. That Makefile is up to date and do nothing.
masak was just going to say that
ingy isBEKaml: but ufo takes years to run
:P
whiteknight how do I do slurpy positional args, *@args? 17:30
isBEKaml ingy: don't say that again. I'll really have to cry. ;)
ingy anyway, it's not critical. then again, neither is perl 6
moritz_ whiteknight: yes 17:31
whiteknight yay! I'm perl6ing!
masak whiteknight++
isBEKaml ingy: so we can remove it?
masak ingy: ok. I might remove the feature. I'm also a bit wary about ufo leaving a signature like that in a Makefile.
isBEKaml ingy: pending ufo features, ofcourse. :> 17:32
ingy isBEKaml: if you have commit :P
I'll keep it in my fork ;)
ufi
masak by all means. 17:33
ingy: by the way, thanks for your contributions to ufo a while ago. it really made things better.
ingy++
ingy sure!
isBEKaml ingy: thanks. :)
ingy it seems a little backwards having ufo worry about things that make should 17:34
17:34 karb left
ingy I'm not saying that the Makefile target was doing everything it needed to 17:35
isBEKaml ingy: I'd just say, "Make is stupid. Do something!"
:P
ingy make is not. make is great technology
I really believe in it
it has issues, but it works well almost everywhere 17:36
isBEKaml ingy: no offence. I was just joking. :) 17:37
ingy ok :)
fwiw, I wasn't ;) 17:38
masak isBEKaml: ok, found the cause of the error.
ingy just woke up
isBEKaml masak: I'm still running the tests on my slow machine. :)
stillll....
t/compiler....FAILED tests 27, 33
masak right. I know about those.
those are honest failures. 17:39
isBEKaml: something that was expected to be a Str was really an Any in @sic.
17:39 ashleydev joined
ingy masak: I had considered having all the targets check if the Makefile was up to date, like Makefile.PL does 17:39
masak: but I stopped short, because it might be a rathole 17:40
masak ok.
isBEKaml masak: yes, I get the same error.
masak isBEKaml: hopefully this fixes it. will push after running the tests myself.
ingy has jnthn evaporated?
and pmichaud
TimToady reconstituted recently 17:41
17:41 ashleydev joined
isBEKaml reconstituted? :) 17:42
isBEKaml goes dreaming about teleporting tech...
masak isBEKaml: sleep tight! 17:43
isBEKaml masak: oh, I don't know. I might end up somewhere. :P
pugssvn r31999 | moritz++ | [t/spec] test for RT #77134, !~~ did not set $_ to the LHS
isBEKaml or horror of horrors, spliced! :O
17:45 ashleydev joined
isBEKaml how do I turn on backtraces in Rakudo? 17:46
dalek psi: c2f5490 | masak++ | lib/Yapsi.pm:
[Yapsi] unbroke an error in smartmatching

Str. Fixed the symptom.
17:48 plobsing joined
isBEKaml tests++ masak++ :) 17:50
again, how do I turn on backtraces in Rakudo?
17:51 tylercurtis joined
masak isBEKaml: you already get backtraces in Rakudo. I don't understand the question. 17:51
isBEKaml masak: sorry, I meant that I want to see those tracebacks from parrot too. :D 17:53
masak not sure how to do that. 17:54
maybe find the Rakudo commit that turned them off? :)
isBEKaml settings-library?
moritz_ src/Perl6/Compiler.pir
rename method backtrace to something else 17:55
isBEKaml moritz_++ #thanks 17:56
I'm used to running builds when I go to sleep. Just wanted to do something 2nite. :) 17:59
'nite all! :)
masak running & 18:03
18:04 Axius joined
cognominal rakudo: say Perl6::Compiler.^methods 18:12
p6eval rakudo 9e1bcd: OUTPUT«Method 'methods' not found for invocant of class ''␤ in main program body at line 22:/tmp/zhk_Z1ndb9␤»
cognominal rakudo: say Perl6::Compiler.WHAT 18:14
p6eval rakudo 9e1bcd: OUTPUT«Perl6::Compiler()␤»
18:15 Mowah joined
sorear good * #perl6 18:15
FWIW I'm thinking of making niecza default to is ro-copy or so 18:17
18:17 Axius_ joined
whiteknight is there a method I can override, like ToString or somethign that controls stringification? 18:18
jnthn Str 18:19
whiteknight and while I have your attention, how do I include files together? using? 18:21
18:22 Axius joined 18:25 awwaiid joined
sorear 'use' is used to pull in code from other files, yes 18:25
jnthn whiteknight: "use" 18:26
sorear but it's not strictly inclusion
18:27 s1n joined 18:29 Eevee joined
moritz_ rakudo: class A { method Str { 'foo' } }; say A.new() 18:35
p6eval rakudo 9e1bcd: OUTPUT«foo␤»
moritz_ whiteknight: see above
18:35 itz joined 18:48 fod joined, rindolf joined
rindolf Hi all. 18:48
sorear Hello rindolf. 18:50
rindolf sorear: what's up?
moritz_ nevers knows how to answer that question 18:53
sorear neither 18:54
cognominal what's up, doc?
rindolf What's up, RTF. 19:00
19:06 cono joined
whiteknight how do you make a constructor in Perl6? I can't find any examples 19:17
moritz_ you get one for free 19:18
whiteknight of course, I'm probably looking in the right place
colomon whiteknight: rakudo/src/Rat.pm has an example
whiteknight moritz_: I want to overload it, make my own
moritz_ whiteknight: perlgeek.de/blog-en/perl-6/object-c...ation.html
19:23 alester joined 19:38 Axius joined 19:42 molaf joined 19:44 jferrero joined 19:56 tylercurtis joined 19:58 dha joined 19:59 kid51 joined
tylercurtis .u ellipsis 20:00
phenny U+0EAF LAO ELLIPSIS (ຯ)
tylercurtis .u horizontal elipsis
phenny tylercurtis: Sorry, no results for 'horizontal elipsis'.
sorear .u DOTS 20:01
phenny U+205E VERTICAL FOUR DOTS (⁞)
sorear .u THREE
phenny U+0033 DIGIT THREE (3)
moritz_ whiteknight: did that link help you? 20:02
sorear .u 2026
phenny U+2026 HORIZONTAL ELLIPSIS (…)
20:07 alester joined 20:12 Guest23195 left
TimToady pmichaud: re @_, I'm fine with whatever is the least overhead, which is likely to be "is parcel" semantics, i.e. don't care whether it's readonly or rw 20:18
the compiler is allowed to assume readonly semantics where violations can easily be detected statically, and where it might improve optimization of subcalls 20:19
but I think we can label violations of readonliness as "erroneous" and not worry too much 20:20
sorear In LOOP: while(1) { ... }, what is the type of LOOP? 20:21
S04 says it supports methods like .redo
TimToady er...Label?
sorear hadn't noticed that type before 20:22
TimToady it's more like a constant, really
sorear ack Label in docs/spec picks up nothing
TimToady anyway, it defines a word that parses like a type or enum
20:22 molaf joined
sorear I think it also has some sub-nature, in that it has to bind to a single dynamic frame 20:23
TimToady phenny: tell masak I can see where splitting Nil/() into undefined/defined variants could have some benefit, especialy since @foo = Nil might be the only way to mark @foo as undefined, and @foo = () leaves it defined 20:24
phenny TimToady: I'll pass that on when masak is around.
sorear something like sub foo($l, $k) { X: while(1) { $l.last if $l; foo(X, $k-1); } } 20:25
; foo(Any, 1)
if $l is an uncloned object, then the inner call to foo will return and the outer call will loop forever 20:26
but I think the inner call should force the outer call to return
TimToady yes, I can see that, sort of forcing the lexotic choice at that point
sorear by my interpretation of lexoticism
Loop labels look a lot like &?BLOCK 20:29
TimToady phenny: tell masak but I'd like to get pmichaud++'s and jnthn++'s take on the idea of Nil as a kind of bottom type sepearate from (), or anyone else's opinion as well
phenny TimToady: I'll pass that on when masak is around.
sorear which also has to be not quite a constant, in order to close over lexicals right 20:30
TimToady yes, sort of the notion that every statement to the end of the block is an implicit subblock/continuation
kinda like the REPL is currently implemented 20:31
lue ohello o/ 20:36
colomon \\o 20:37
20:38 Mowah joined
sorear TimToady: Actually, the REPL implementation was completely redone by pmichaud++ 20:54
TimToady: Nowadays there's only one subblock at a time and the pad is hash-merged into the parent on each iteration 20:55
20:55 masak joined
masak \\o/ 20:55
phenny masak: 20:24Z <TimToady> tell masak I can see where splitting Nil/() into undefined/defined variants could have some benefit, especialy since @foo = Nil might be the only way to mark @foo as undefined, and @foo = () leaves it defined
masak: 20:29Z <TimToady> tell masak but I'd like to get pmichaud++'s and jnthn++'s take on the idea of Nil as a kind of bottom type sepearate from (), or anyone else's opinion as well
masak ok, sounds good. I think. 20:56
I don't like the current state, but I'd have to play with the proposed alternatives to know whether I like them better or worse. :)
lue hai masak o/ 20:57
masak well hellue!
someone giving a non-exaggerated negative opinion about Camelia: twitter.com/nkhlss/status/21174362743 20:58
(usually the negative people use hyperbole of different kinds)
lue
.oO(hypobole?)
21:00
cognominal Finalement Nil est deux fois rien... (French pun)
masak two times nothing? 21:01
or 'twice nothing', rather...
cognominal yup 21:02
masak and 'finalement' means more 'eventually' than 'finally'?
cognominal probably both. 21:03
lue
.oO(The only ones I couldn't guess were 'fois' and 'rien'. I guessed 'Final nothing is two fois rien')
21:06
masak in a change that went into the spec in 2009-11-24 replaced a lot of C<undef>s with C<Nil>s. 21:07
s/in //
and another change from 2010-02-28 clarifies that .defined on Nil as an unevaporated object still returns True. 21:08
but that's probably more of a clarification of somehting that was already the case, rather than an actual change. 21:09
lue: how are you doing? any exciting hacking projects lately? 21:12
lue Fine. I've been working on a website, not much else. 21:15
[ I had a case of computer apathy, so I didn't feel like using my computer for a couple of days :) ]
masak I should probably have those more often.
std: class A {}; sub A {} 21:16
p6eval std 31912: OUTPUT«[31m===[0mSORRY![31m===[0m␤Illegal redeclaration of routine 'A' (see line 1) at /tmp/TvG3ha_pMu line 1:␤------> [32mclass A {}; sub A[33m⏏[31m {}[0m␤Check failed␤FAILED 00:01 112m␤»
masak rakudo: class A {}; sub A { say "OH HAI" }; say A.new; A()
p6eval rakudo 9e1bcd: OUTPUT«A()<0x6ec9d70>␤OH HAI␤»
masak submits rakudobug
std: sub A {}; class A {}
p6eval std 31912: OUTPUT«ok 00:02 112m␤»
jnthn erm. 21:17
masak rakudo: sub A { say "OH HAI" }; class A {}; say A.new; A()
p6eval rakudo 9e1bcd: OUTPUT«A()<0x6ecdba0>␤OH HAI␤»
masak at least Rakudo is consistent. :)
jnthn I think Rakudo has it right there, fwiw.
Subs get stashed with an & sigil
So there's no an ambiguity. 21:18
*not
masak in some sense classes and subs share the same namespace, though.
above, they're both referrable to as 'A'.
lue rakudo: say (16**15-1 == 0xFFFFFFFFFFFFFFFF)
21:18 awwaiid joined
p6eval rakudo 9e1bcd: OUTPUT«0␤» 21:18
masak rakudo: say sprintf "0x%x", 16 ** 15 - 1 21:19
p6eval rakudo 9e1bcd: OUTPUT«0x1000000000000000␤»
lue rakudo: say 16**15; say 0xFFFF_FFFF_FFFF_FFFF;
p6eval rakudo 9e1bcd: OUTPUT«1.15292150460685e+18␤-1␤»
lue
.oO(curse you undersized integers)
21:20
waitaminute. 16**15 > 0xFFFF_FFFF_FFFF_FFFF . So why does 16**15 not say -2 ? 21:23
colomon it never is -2
16**15 becomes a Num 21:24
Juerd lue: Does it matter which wrong number you get?
masak :)
lue I like always wrong over sometimes wrong :) 21:25
colomon 16**15 calls upgrade_to_num_if_needed(pir::pow__NNN(16, 15))
upgrade_to_num_if_needed tests against +-2**31 to see if the result should be an Int or a Num 21:26
21:27 jasonmay joined
lue rakudo: say (16**15 - 1).fmt('%x') 21:28
p6eval rakudo 9e1bcd: OUTPUT«1000000000000000␤»
colomon rakudo: say (16**15 ).fmt('%x')
p6eval rakudo 9e1bcd: OUTPUT«1000000000000000␤»
colomon more proof you're looking at a Num, if you needed it. :) 21:29
masak not many languages actually get this right. 21:30
lue Not that I need a 16-digit hex number anyway :) .oO(although it would be a great format for telephone numbers) 21:31
colomon there's no reasonable way to get it right if you've got a floating point number, is there?
Juerd fmt is an ugly name.
masak Juerd: I kinda like it. it has the right length. 21:33
lue using fmt for decimal -> hex is an ugly way of doing so :)
masak lue: if you don't like that way of doing it, write a wrapper sub with a different name. 21:34
lue: or propose a way that we all like so much better that we agree to put it in the spec.
Juerd masak: It's a rather pointless abbreviation; format may be twice as long but is still short.
masak: Abbreviations make typing easier, at the expense of reading and remembering. 21:35
lue I was just thinking: I ought to continue complaining when I find a solution :)
masak Juerd: for some reason, 'fmt' reminds me a bit of 'sprintf'. I guess it's the consonant density that does it. kind of an almost-mnemonic. 21:36
Juerd But you're insane :)
masak admittedly.
Juerd sprintf is a horrible name too.
masak oh, very much so.
Juerd strftime is one of the worst.
masak did we get rid of that one? 21:37
we didn't, did we?
Juerd Did we even get it?
at all?
masak I think so...
it was in there with Temporal somewhere.
Juerd Maybe we should just steal Python's %
tylercurtis Please no! 21:38
masak sounds like a great thing for a module to do.
Juerd masak: That wouldn't solve the fmt-sucks problem.
Sure, I could write a wrapper and use a less sucky identifier in my own code. But I'd still encounter fmt in other code and other people would have to learn my identifiers on top of the original ones. 21:39
masak Juerd: got a commit bit? go and change .fmt to .format in the spec. I don't mind changing all of my application code that uses .fmt.
Juerd Is changing something without discussing it first a good idea?
I don't want to start an edit war
masak Juerd: we are discussing it. 21:40
if you want, you can throw off an email to p6l as well.
but I wouldn't recommend it.
Juerd forgot how to use the commit bit.
masak now that's just a shame.
Juerd It's been years
masak time to dust off that old password. 21:43
.fmt is mentioned in S02 and S32/Str. 21:44
Juerd I don't even know my password
Wow.
masak there are parameters in S32/IO that are named $fmt but should probably be named $format, too.
Juerd What changed your mind? 21:45
masak I'm not necessarily agreeing with you. just enabling you to take action.
I'm not disagreeing with you enough to dissuade you.
for me, it's a great little method, three letter or six. 21:46
Juerd I'm going to bed now. Maybe I'll remember the password when I'm more awake
masak hopes so
Juerd I could just hack the repository and destroy all consistency 21:47
masak in the meantime, people may vote: .fmt or .format? let the voice of the roaring masses be heard. 21:48
Juerd Votes for .f or whatever you prefer are welcome too :)
f would be strangely appropriate, considering printf
It does the f, not the print.
jnthn .frmt ;-) 21:49
masak Juerd: oh, and I'll throw in another bonus for you: if your change goes, through, I'll change my Advent Calendar post to reflect it: perl6advent.wordpress.com/2009/12/0...ormatting/
sorear .fmt, it has a very 1970s libc feel to it
"I would spell creat with an e."
masak I'll count Juerd's opinion as one vote, too. 21:50
Juerd masak: Are you counting .f or .format? :)
masak yes. 21:51
Juerd Wise
pmurias masak: re camelia my roomate (who doesn't know perl) thinks the Perl 5 camel logo is horrid but he thinks Camelia is ok 21:56
masak :) 21:57
pmurias: probably a person who goes by smells. :P
sorear <3 camelia
TimToady: Did you see my question about name collisions and action methods? 21:58
pmurias if we were going from the Camelia to the camel there would likely be a lot of opposition too
dalek ecza: 6c3d690 | sorear++ | CodeGen.pm:
Always generate labels inorder
22:05
ecza: 0b4529f | sorear++ | (2 files):
Code generation for body tree in postorder
ecza: 2372b67 | sorear++ | (4 files):
Move defined, WHAT, isa, does into the RI so non-DynObjects can be more first
22:11 molaf joined 22:15 molaf joined 22:17 daemon joined 22:19 c0nspiracy__ left, petdance joined 22:40 alester joined
lue rakudo: say '2' + 1 22:44
p6eval rakudo 9e1bcd: OUTPUT«3␤»
lue rakudo: say '0xFF' + 1
p6eval rakudo 9e1bcd: OUTPUT«256␤»
22:54 xinming joined 23:02 tadzik joined
tadzik whew, finally home. Hello #perl6 23:02
jnthn o/ tadzik 23:04
tadzik what a funny night!
I got home with plenty of walking, a bus, and two times hitchhiking 23:05
gods bless friendly people in the middle of the night
jnthn :-)
tadzik anything funny to do? :) 23:13
jnthn Wódka? ;-) 23:15
cognominal rakudo: Perl6::Compiler.new.parse: 23:16
tadzik :D
p6eval rakudo 9e1bcd: OUTPUT«===SORRY!===␤Confused at line 22, near "Perl6::Com"␤»
tadzik jnthn: I'm drinking mint at the moment :) 23:17
jnthn tadzik: Ah, I just has piwo. :-)
tadzik jnthn: two after me :)
and a concert
jnthn Nice :-)
cognominal rakudo: Perl6::Compiler.new.parse("1") 23:20
p6eval rakudo 9e1bcd: OUTPUT«Method 'parse' not found for invocant of class 'Undef'␤ in main program body at line 22:/tmp/gojodnTMch␤»
cognominal rakudo: Perl6::Compiler.new.parse
p6eval rakudo 9e1bcd: OUTPUT«too few positional arguments: 1 passed, 2 (or more) expected␤ in main program body at line 22:/tmp/Fs_W4irOfp␤»
cognominal I am totally confused
jnthn ...me too! 23:22
oh
Did you want Perl6::Grammar.parse ?
cognominal maybe, but that does not explain the error messages 23:23
jnthn No, those are odd. :S
Oh
cognominal the compiler has an heisen-parse method?
jnthn .new probably doesn't make much sense.
There's probably an instance with the grammar etc already. 23:24
sorear jnthn: Do you think we could usefully collaborate on the MOP stuff? I need a new MOP for my .NET runtime too 23:27
jnthn sorear: Perhaps, yes. 23:28
sorear: I've got some increasingly concrete ideas on what I want things to look like, and am prototyping 'em.
sorear Care to share? 23:29
jnthn I've not written much up yet
There's some initial hacking in github.com/jnthn/6model/
But I plan to blog a bunch of motivation for the design and details etc.
What's in that repo so far is a very-tiny-PAST subset to .Net translator. 23:30
sorear s/http/git/; s|/$|.git|
jnthn And a small bit of runtime stuff. 23:31
Oh, and a ROADMAP. :-)
Once I get happy enough with the design, I plan to port it to Parrot.
I expect we'll end up with a branch of NQP for a while.
And then re-build Rakudo atop of that branch, in another branch 23:32
Kinda like the alpha => ng transition, but not so painful. :-)
Anyway, my primary goal is to get Rakudo the speed gain ASAP, but also get us towards another backend. 23:33
And as part of that, I wanted to do the first cut of the meta-model off Parrot, given I'm familiar with how Parrot looks, and wanted to make sure I didn't design something that'd be hard to port elsewhere later. 23:34
gist.github.com/524444 is a gist of the (few!) things it can handle so far.
Once it's bootstrapped, I expect the whole compilation model for objects to change quite a bit. 23:35
So we'll make the meta-objects at parse time.
We'll likely get there on Parrot first.
Well, unless the bootstrapping onto .Net happens really fast. :-) 23:36
pmichaud good evening, #perl6 23:46
jnthn hi, pmichaud
23:46 M_o_C joined
tadzik goodnight :) 23:50
23:57 ashleydev joined 23:58 ashleydev joined