»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'p6: say 3;' or rakudo:, std:, or /msg camelia p6: ... | irclog: irc.perl6.org | UTF-8 is our friend!
Set by masak on 12 May 2015.
00:00 jack_rabbit joined
TimToady .tell jnthn I think it would be sanest if submethods do not compose like methods, but have some mechanism for getting themselves all called at the same time as the corresponding class submethod in either build-ish or destroy-ish order as pseudo-parents located between this class and its actuall parents 00:19
yoleaux TimToady: I'll pass your message to jnthn.
00:36 Akagi201 joined, Akagi201 left, Akagi201 joined 00:39 AlexDaniel left 00:41 aborazmeh joined, aborazmeh left, aborazmeh joined 00:44 beastd left 00:45 laouji joined 00:58 aborazmeh left 01:21 BenGoldberg joined
ugexe my $proc = Proc::Async.new("echo","foo","bar"); $proc.stdout.tap(-> $v { print "Output: $v" }); say "Starting..."; my $promise = $proc.start; await $promise; say "Done"; 01:40
01:41 smls left
ugexe a recent change appears to make that stuck in await 01:41
in the last 24-36 hours i would guess 01:42
zostay is there a way to interrupt a thread in P6? say to cause a long running operation to timeout? 01:43
as you might do with a SIGALRM in P5 01:44
TimToady ugexe: Proc::Async has been unstable for a long time, but a recent change to avoid spinlocks has exposed some failure modes 01:45
ugexe ah. im not sure what a failure mode is, but it looks like the Promise just stays as Planned 01:47
TimToady zostay: we don't actually deal directly with threads much in P6; work gets assigned to worker threads as needed; if you want to interrupt the execution of a promise, you can interrogate a supply (such as the Signal supply) for async events 01:48
well, "interrogate" is the wrong word...
ugexe: otoh, the restart-concurrent test seems to be hanging consistently now, so maybe you're onto something... 01:50
zostay ok... i think what i want to know is if i can cause a blocking read to exit with EINTR
TimToady dinner & 01:51
zostay (or blocking write or whatever system like call)
01:53 Sqirrel left 02:07 llfourn joined
gagalicious hi i'm a hard core perl5 programmer. is there anything i u guys would like to tell me what i am missing here on perl6 which i cant do on perl5? 02:08
skids gagalicious: are you a Moo/Moose user in P5? 02:12
gagalicious nope
what's that?
skids It's a module that adds a lot of OO niceness. 02:13
So you are mostly a perl5 core user, then, right?
TimToady what kind of data do you deal with, mostly?
certain kinds of math are a lot nicer in P6 02:14
m: say 1, 1, *+* ... *
camelia rakudo-moar c2a57e: OUTPUT«1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309 3524578 5702887 9227465 14930352 24157817 39088169 63245986 102334155 165580141 267914296 433494437 70140873…»
TimToady like there's a fibonacci series
m: say [*] 1..10 02:15
camelia rakudo-moar c2a57e: OUTPUT«3628800␤»
TimToady there's 10 factorial
02:15 yqt left
TimToady p6 arguably has better Unicode support now, if you're into text processing 02:15
skids There are better control structures and loop handling. 02:16
gagalicious yeah perl5 me
TimToady there's more "everything is an object", if you're into OO, and if you're not into OO, you can still pretend numbers aren't objects :)
it's also easier to do functional programming, if you're into that 02:17
gagalicious better unicode? i havent come across any major issues in perl5
i dont really like the reliance on object too much.. not everything for sure. 02:18
02:18 vendethiel joined
TimToady well, the main thing is the runtime is never confused about whether a string is text or binary in p6 02:18
02:18 jack_rabbit left
TimToady whereas p5 can get confused about that 02:18
but p6 also has better support for languages that use lots of diacritics 02:19
this shows up more outside the typical latin-1 langauges though
skids m: for flat ^5 Z "a".."d" -> $a, $b { "$a $b".say }; # multiple loop control variables are easy 02:20
camelia rakudo-moar c2a57e: OUTPUT«0 a␤1 b␤2 c␤3 d␤»
TimToady and most USians say "What's with these fancy accents? Why can't people just ASCII like normal people?"
*use ASCII
so we wouldn't tend to notice the internationalization support 02:21
gagalicious: you also don't have to memorize so many things, like which functions take $_ for a default 02:22
skids m: say gather while (++$ < 4) { "HERE".say; take 42; "THERE".say }; # You can take results from the middle of loops like this 02:23
camelia rakudo-moar c2a57e: OUTPUT«HERE␤THERE␤HERE␤THERE␤HERE␤THERE␤42 42 42␤»
TimToady p5 has 15 or so magical symbols like STDOUT that span all packages
in p6 global symbols are specially marked 02:24
$*OUT instead of STDOUT
so that's another list you don't have to remember
02:24 kurahaupo joined
TimToady p6 also tends to have better error messages, generally 02:25
02:25 [Sno] joined
raydiak don't forget the way more awesomer regexes 02:25
skids m: say <jack queen king> X~ "of" X~ <diamonds hearts> # it is very easy to generate all sorts of things
camelia rakudo-moar c2a57e: OUTPUT«jackofdiamonds jackofhearts queenofdiamonds queenofhearts kingofdiamonds kingofhearts␤»
02:25 ][Sno][ left
TimToady raydiak: that too :) 02:25
raydiak and grammars
TimToady p6 has better extensibility 02:26
m: sub postfix:<!>($x) { [*] 2..$x }; say 42! 02:27
camelia rakudo-moar c2a57e: OUTPUT«1405006117752879898543142606244511569936384000000000␤»
TimToady so it's easy to write your own operators, like factorial there
and you'll notice the precision doesn't max out at 32 or 64 bits
decommute & 02:28
skids m: multi sub f ( $x where * > 5 ) { "LOTS".say }; multi sub f ($x where 1 < *) { $x.say }; f(6); f(4); f(0); # you can separate up those subs that do different things based on input, and also get good error messages for out-of-domain arguments 02:32
camelia rakudo-moar c2a57e: OUTPUT«LOTS␤4␤Cannot call f(0); none of these signatures match:␤ (Any $x where { ... })␤ (Any $x where { ... })␤ in block <unit> at /tmp/5vQilEsxZS:1␤␤»
skids gagalicious: you can use as much or as little type-checking as you want for you particular purpose 02:33
02:35 rmgk_ joined, rmgk left, rmgk_ is now known as rmgk
gagalicious i thought type check is supposed to speed up an app... but i heard perl6 is slower than perl5. is that right/ 02:35
i like perl5 coz there's no type checking in the first place... if only perl6 built in a type check optimizer.. that'll make it better. 02:36
skids gagalicious: Currently perl6 is slower than perl5 but faster mostly than perl5+Moose so it depends what features you need. P6 is much faster than it was a month ago and keeps getting faster. Some of that is because the type-checking optimizations are starting to get impleented. 02:38
02:38 noganex_ joined
skids gagalicious: one of the first things new P6 users notice is much better error messages that help you correct mistakes faster. 02:40
m: sub foobar { 1 }; fooobar(); 02:41
camelia rakudo-moar c2a57e: OUTPUT«5===SORRY!5=== Error while compiling /tmp/ZCULqCYlKQ␤Undeclared routine:␤ fooobar used at line 1. Did you mean 'foobar'?␤␤»
02:41 noganex left, kaare_ joined 02:42 vendethiel left
skids And you can use type checking to help you find errors before the code is actually run, if you like. 02:44
m: sub do_dangerous_thing( Int $x ) { say "DANGER!" }; do_dangerous_thing("foo");
camelia rakudo-moar c2a57e: OUTPUT«5===SORRY!5=== Error while compiling /tmp/C1YqEaP_Od␤Calling do_dangerous_thing(str) will never work with declared signature (Int $x)␤at /tmp/C1YqEaP_Od:1␤------> 3rous_thing( Int $x ) { say "DANGER!" }; 7⏏5do_dangerous_thing("foo");␤»
tony-o_ is that color stuff new? 02:47
skids Not super-new, did you change terminals/irc clients? 02:48
02:49 flaviusb joined 02:51 xargs joined 03:14 kurahaupo left 03:16 bin_005 joined, xargs left
zostay m: Buf.new(0x31 .. 0x34) ~~ /2/ 03:26
camelia rakudo-moar c2a57e: OUTPUT«Cannot use a Buf as a string, but you called the Str method on it␤ in block <unit> at /tmp/pM4HwHFEjs:1␤␤»
03:28 skids left, skids joined 03:37 spider-mario left 03:38 spider-mario joined
zostay m: Buf.new(0x31 .. 0x34).decode('ascii') ~~ /2/ 03:43
camelia ( no output )
zostay m: (Buf.new(0x31 .. 0x34).decode('ascii') ~~ /2/).perl.say
camelia rakudo-moar c2a57e: OUTPUT«Match.new(ast => Any, list => (), hash => EnumMap.new(), orig => "1234", to => 2, from => 1)␤»
03:54 laouji left, bin_005 left 03:56 laouji joined 04:40 kurahaupo1 joined 04:44 flaviusb left 04:54 kurahaupo1 left 05:01 atweiden left 05:07 Sqirrel joined 05:13 kst` joined 05:15 kst left, kst` is now known as kst 05:16 _mg_ joined 05:22 jack_rabbit joined 05:29 jack_rabbit left 05:31 eiro joined 05:33 sebm3 left 05:36 telex left 05:38 telex joined 05:41 gfldex joined 05:46 Psyche^ joined 05:50 Patterner left 05:59 Ben_Goldberg joined 06:02 BenGoldberg left 06:10 diana_olhovik joined 06:17 _mg_ left 06:19 meis joined 06:23 _mg_ joined
masak morning, #perl6 06:23
06:23 Ben_Goldberg left 06:26 domidumont joined
itz www.youtube.com/watch?v=T4sZYSiXSgI 06:26
hi 06:27
06:28 aborazmeh joined, aborazmeh left, aborazmeh joined 06:29 flaviusb joined
masak m: my $n = 1e0; $n /= 2 for ^1075; say $n 06:30
camelia rakudo-moar c2a57e: OUTPUT«0␤»
masak m: my $n = -1e0; $n /= 2 for ^1075; say $n
camelia rakudo-moar c2a57e: OUTPUT«-0␤»
06:30 skids left
masak underflow. this is a good way to explain why -0e0 can be useful. 06:30
m: my $x = 0e0; my $y = 0e0; say -($x - $y); say $y - $x # cannot assume -($x - $y)can be optimized to $y - $x, because of -0e0 06:34
camelia rakudo-moar c2a57e: OUTPUT«-0␤0␤»
masak m: say sqrt -0e0 06:35
camelia rakudo-moar c2a57e: OUTPUT«-0␤»
meis hum, morning :) 06:38
06:38 brrt joined
masak \o 06:38
meis do you guys know how to generate a .class for jvm from perl6 in rakudo?
i'm feeling silly, but I can't figure out how to do it..
06:42 RabidGravy joined
masak m: say sign NaN 06:42
camelia rakudo-moar c2a57e: OUTPUT«1␤»
masak submits rakudobug
things you find from playing around :P
06:44 FROGGS joined, zengargoyle left 06:53 Woodi joined 06:58 brrt left 07:04 zengargoyle joined 07:09 domidumont left
FROGGS meis: are you talking about a .class file? 07:12
meis FROGGS: yes, sorry, a .class file 07:14
FROGGS meis: perl6-j --target=jar --output=foo.jar foo.pm
though, it's a .jar then :o)
meis oh
a jart works nice for me
:D
thank you, I'll try later! 07:15
FROGGS meis: if you need more information about Java interop please look at the tests in rakudo/t/03-jvm or ask psch
meis I'll do, thanks for the tip 07:16
07:16 domidumont joined
FROGGS rjbs: s/so maybe of of those/so maybe one of those/ 07:17
[Tux] Inline::Perl5 IO is now broken (it worked yesterday): 07:18
csv-ip5xsio Cannot invoke null object
in method invoke at lib/Inline/Perl5.pm6:479
in method invoke at lib/Inline/Perl5.pm6:471
in block at lib/Inline/Perl5.pm6:753
07:18 AlexDaniel joined
FROGGS rjbs++ # very good post 07:22
07:23 brrt joined 07:24 aborazmeh left
FROGGS [Tux]: what exactly do you mean by IO? 07:24
[Tux] pass an IO object to perl5
FROGGS ahh
07:24 Ven joined 07:26 dayangkun joined 07:28 salva joined
RabidGravy morning 07:34
Ven \o 07:35
07:40 amurf left
FROGGS morning 07:40
07:42 zakharyas joined
brrt morning 07:43
dalek ake: ed35790 | arnsholt++ | t/def.t:
Add test exercising default arguments.
ake: ff21ab1 | arnsholt++ | t/def.t:
Improve slurpy args test a bit.
ake: c66b97e | arnsholt++ | / (3 files):
Implement list comprehensions.
ake: 8c1f4cf | arnsholt++ | src/Snake/Grammar.nqp:
Comments have zero or more characters after #, not one or more.
ake: 8d2ef71 | arnsholt++ | src/ (4 files):
The great object model refactor.

This should bring us a lot closer to the correct way of handling classes and objects than we previously had. I've mostly kept unrelated stuff (like named arguments for nqp::ops) in separate commits, but some unrelated things may have snuck in.
ake: 1c66c8f | arnsholt++ | src/Snake/ (2 files):
Some comment cleanup.
07:49 darutoko joined 07:53 aborazmeh joined, aborazmeh left, aborazmeh joined 07:58 gfldex left 08:01 SevenWolf left 08:05 lizmat joined 08:11 lizmat left 08:12 lizmat joined 08:18 xinming_ left 08:20 cschwenz joined 08:21 Ven left 08:26 larion joined
itz CFT++ # perl6 hacking 08:26
08:26 rba_ left 08:27 spider-mario left 08:29 fhelmberger joined
lizmat good *, #perl6! 08:33
hmmm... see some serious breakage in S17 related tests after MoarVM upgrade
was MoarVM ready to be upgraded for nqp / rakudo?
nwc10 lizmat: there's a bug in MoarVM HEAD to do with async stuff that jnthn is aware of but hasn't fixe yet 08:34
he was busy with something over the weekend, as I understand it.
(have seen a picture)
08:35 laouji left
lizmat :-) 08:35
yeah, I was aware of his whereabouts last weekend
nwc10 verified in person, as I understand it.
lizmat yes :-) 08:36
dalek kudo/nom: d5d93ad | lizmat++ | src/core/Numeric.pm:
Make sign(NaN) return NaN

Fixes RT's #124813 and #125317
08:37
synbot6 Link: rt.perl.org/rt3/Public/Bug/Display...?id=124813
08:38 itz is now known as _itz, rindolf joined, itz2 joined, itz2 is now known as itz
dalek ast: de33725 | lizmat++ | S32-num/sign.t:
Unfudge now passing test
08:39
FROGGS lizmat: eww, I did not know that MoarVM HEAD would cause breakage :o( 08:41
lizmat yes, quite serious
with hangs and zombies
nwc10 test early, test often? 08:42
08:42 xinming joined 08:44 espadrine joined
moritz you could always revert the faulty commit(s), and move them to a branch 08:45
dalek p: d195a71 | FROGGS++ | tools/build/MOAR_REVISION:
Revert "bump moar (win build fix and nativecall fix)"

MoarVM HEAD introduces problems in S17... rolling back. This reverts commit 07a9dc105e682a14651551fa25e7af11d03faea8.
kudo/nom: 5e72201 | FROGGS++ | tools/build/NQP_REVISION:
require newer nqp that uses older MoarVM
08:46
lizmat pulling, building and testing
08:50 Ven joined, RabidGravy left 08:52 Alina-malina left
lizmat hmmm... looks like it needs a nuke of the install dir :-( 08:54
elevensies&
08:58 bin_005 joined
FROGGS ohh yeah, nqp wont downgrade moar 09:00
09:00 cognominal joined
FROGGS deleting the moar executable would work too 09:01
(and then reconfigure and rebuild)
09:01 bin_005 left 09:02 bin_005 joined
moritz .u カスタ 09:02
yoleaux U+30AB KATAKANA LETTER KA [Lo] (カ)
U+30B9 KATAKANA LETTER SU [Lo] (ス)
U+30BF KATAKANA LETTER TA [Lo] (タ)
09:02 Ven left 09:08 xinming left 09:09 xinming joined, kurahaupo1 joined 09:12 rindolf left
brrt uhm, hey, anything terrifyingly wrong with moar that we should fix? 09:17
lizmat yes :-)
brrt ok, what is
anything to do with /me merging the throwops 09:18
since when did all go wrong :-)
lizmat no, afaik it's half finished work of jnthn wrt not using 100% CPU in a thread for timer related functions 09:19
hmmm... nuking install dir didn't fix it :-(
FROGGS lizmat: what is your moar --version? 09:20
lizmat nothing anymore, I just nuked nqp dir 09:21
FROGGS k
brrt hmm ok. i can see how that is painful
09:24 laouji joined, kurahaupo1 left, laouji left 09:25 laouji joined 09:26 kurahaupo1 joined
lizmat hmmm... still breakage ??? 09:27
09:28 Alina-malina joined, amurf joined
lizmat $ install/bin/moar --version 09:29
This is MoarVM version 2015.05-8-g41b5dd2 built with JIT support
FROGGS that's correct
lizmat $ install/bin/nqp-m --version 09:30
This is nqp version 2015.05-4-gd195a71 built on MoarVM version 2015.05-8-g41b5dd2
FROGGS yes, this is what you basically had yesterday
except the nqp revision, which was 2015.05 09:31
but there is nothing in the nqp commits that could hurt
ohh wait... 09:32
maybe the offending patches were in moar 2015.05 .. 2015.05-8-g41b5dd2 ?
09:32 amurf left
lizmat ah, yes, the problem was *not* caused by your changes 09:33
just by changes that came along with your bump, afaik
FROGGS excatly
lizmat so maybe we need to revert Moar to 2015.05 ?
FROGGS yes, I think so
hold on
lizmat I think 58226af4aad0d365 in Moar is the problem, really 09:34
dalek p: afc10c9 | FROGGS++ | tools/build/MOAR_REVISION:
roll back to MoarVM 2015.05
kudo/nom: 317d054 | FROGGS++ | tools/build/NQP_REVISION:
require newer nqp that uses older MoarVM
09:35
FROGGS lizmat: can yuo now pull, unlink your nqp-m, and reconfigure+rebuild? 09:36
lizmat will do
FROGGS or nuke install if you prefer that
lizmat trying your way first :-)
FROGGS :o) 09:37
lizmat $ install/bin/moar --version
This is MoarVM version 2015.05-8-g41b5dd2 built with JIT support
:-(
FROGGS :o( 09:38
I guess it wont reconfigure nqp this way...
lizmat I unlinked moar as well now
trying again
FROGGS gladly it does not take 10+ minutes as it used to take when you had to build parrot 09:39
lizmat $ install/bin/moar --version
This is MoarVM version 2015.05 built with JIT support
:-)
FROGGS ohh, good to know 09:40
brrt i'm a bit sorry about this discussion since i had hoped the jit throw ops merge to get some more exposure
possible suggestion 09:41
lizmat brrt: afaik, it's only 58226af4aad0d365 that is causing the problem
FROGGS we can also move that commit to a branch in MoarVM 09:42
lizmat brrt: maybe reverting that for now, will allow us to move forward ?
brrt we revert said commit on master, cherry-pick it onto a separate branch, and continue tracking moar master with nqp and rakudo
aye
consider it done
in five minutes, at least ;-)
FROGGS brrt++
this will also help others, since you cannot downgrade moarvm using MOAR_REVISION 09:43
as it happily accepts newer moars
09:44 aborazmeh left
lizmat spectest confirmed clean now 09:44
afk for a bit& 09:45
brrt tis done
FROGGS I'll update nqp and rakudo (again :o) 09:46
brrt :-) 09:47
dalek p: 4344303 | FROGGS++ | tools/build/MOAR_REVISION:
bump moar for fixing async stability
kudo/nom: d39fe1c | FROGGS++ | tools/build/NQP_REVISION:
bump nqp/moar for fixing async stability
FROGGS now this should solve problems for all the ppl out there 09:48
brrt hopes it does
09:50 domidumont left
jnthn Note that the patch didn't actually cause problems, it fixed one problem that turned out to make a bunch of others less likely. 09:53
yoleaux 00:19Z <TimToady> jnthn: I think it would be sanest if submethods do not compose like methods, but have some mechanism for getting themselves all called at the same time as the corresponding class submethod in either build-ish or destroy-ish order as pseudo-parents located between this class and its actuall parents
jnthn The things that showed up with it are all possible to produce without it. 09:54
brrt yeah, that's very much true :-) 09:55
the 'problem' - for me at least - was hanging spectests, by the way
09:56 salva left
jnthn Yes, agree it created a nuisance. 09:57
lizmat jnthn o/
jnthn I'll try and work on a real fix today
lizmat jnthn: I would suggest you take it easy for a bit more... 09:58
it's safely stashed away in a branch now :-)
we've been living with 100% CPU on a thread for quite some time now, a little more wouldn't hurt
fwiw, spectest confirmed clean on This is MoarVM version 2015.05-35-gc4c7ebd built with JIT support 09:59
really afk for a bit now& 10:00
brrt spectest burns the top of this imac 10:01
:-)
10:05 bin_005 left 10:06 Akagi201 left 10:08 Ven joined 10:13 aborazmeh joined, aborazmeh left, aborazmeh joined 10:15 rindolf joined 10:16 rarara joined 10:18 Emeric joined
Emeric Hello World ! 10:20
brrt hi Emeric
anything we can help you with :-) 10:23
10:24 rba_ joined, Emeric left 10:26 Emeric joined
Emeric Did you use Perl6 for web projects ? 10:27
DrForr Not sure how much of perl6.org is done in perl6 yet :) 10:28
10:29 rindolf left
brrt web is kind of broad these days. it used to be 'CGI scripts', today it may mean 'i want something like rails' or 'i want something like flask/sinatra', or even 'something like php' 10:30
as far as i know, not a lot of people are using perl6 in any of these capacities yet
moritz {doc,modules}.perl6.org is statically generated pages, and generated by Perl 6 scripts
brrt what people are doing is creating static site generators using perl6
moritz as is strangelyconsistent.org
brrt points out that the first real 'blogging engine' (movable type) in widespread use would now be called a static site generator with a web interface 10:31
anyway, lunch &
10:31 brrt left 10:32 dayangkun left, laouji left
Emeric Thanks for the answer 10:32
10:33 itz left 10:34 _mg_ left 10:38 itz joined 10:40 itz left 10:41 smls_ joined, rindolf joined 10:42 itz joined 10:43 rba_ left 10:45 rba_ joined
Emeric Sorry, I've may questions... :S Did you often use the OOP with Perl 6 ? 10:47
DrForr Using it right now as it happens.
hahainternet Emeric: can i ask why you're asking these questions? they seem like a survey question more than a practical one
moritz Emeric: Perl 6 is an OO language at its very core
ever non-trivial piece of Perl 6 code that I write is OO 10:48
DrForr And no need to use the past tense, it's very much alive.
10:48 laouji joined, rindolf left
Emeric I'm just trying to inform me about what is done with Perl. And sorry, I'dont speak english very well... 10:50
DrForr Plenty of stuff, though if you're looking for large-scale implementation and huge websites, look at perl5.
Emeric And I hope it's still alive !
DrForr At least for the moment :) 10:51
hahainternet Emeric: in my uninformed opinion, Perl 6 currently occupies roughly the niche that Perl 5 does, but it is slowly expanding to support every relatively high-level niche i know of
DrForr Incidentally the perl6 ANTLR -> Perl6 converter is almost done.
hahainternet DrForr: fancy, there's EBNF too isn't there 10:52
that blew my mind
DrForr EBNF, ABNF, C++, Java...
hahainternet 's head explodes
DrForr It mostly won't run without tweaking because ANTLR4 and Perl6 aren't an exact match, but it'll handle most of the constructs. 10:53
hahainternet oh? i don't know the difference, haven't had much p6 time and no ANTLR time 10:54
DrForr ANTLR4 is closer to yacc in that it lets you do code that messes with the parsing stack inline. 10:55
smls_ Is there a way to get the function object &foo from the string "foo" without EVAL?
10:56 smls_ is now known as smls
moritz smls: &::('foo') 10:56
smls oh, right.
DrForr But it'll work well enough that you can take an ANTLR C# grammar, convert it and get something that looks like perl6 without faffing about.
smls does it work with operators too?
m: say &::("infix:<~>") 10:57
camelia rakudo-moar c2a57e: OUTPUT«sub infix:<~> (Any |) { #`(Sub+{<anon>}+{Precedence}|50302512) ... }␤»
smls neat
11:04 rarara left
smls is .WHY supposed to say something for built-ins? 11:05
m: say &say.WHY
camelia rakudo-moar c2a57e: OUTPUT«(Any)␤»
moritz smls: it would be neat the pod from doc.perl6.org could be made available from the setting somehow 11:07
smls: though including it in the source text of the setting is a no-go
11:08 domidumont joined 11:09 g4 joined, g4 left, g4 joined
rjbs FROGGS: glad you liked it :) 11:21
FROGGS rjbs: yes, please keep posting here when you blog
rjbs Well, that post is five years old. I better start posing the rest of my backlog... :-) 11:23
FROGGS it ... is? 11:24
wow
rjbs FROGGS: the follow-up was rjbs.manxome.org/rubric/entry/1865 11:29
FROGGS thanks 11:30
11:32 aborazmeh left 11:35 yqt joined
timotimo o/ 11:36
Ven \o timotimo 11:37
timotimo FROGGS: the dresden.pm video recording of your talk ... the audio recording is ... ...
11:39 domidumont left 11:40 smls_ joined
AlexDaniel is it possible to define a subroutine that will be visible from the outside? Like: if True { sub Test { say 'hello' } }; Test(); 11:40
11:40 smls left
dalek ake: 71b4bd1 | arnsholt++ | src/Snake/Metamodel/ClassHOW.nqp:
Better stringification logic.
11:40
ake: a729dc1 | arnsholt++ | src/setting/builtins.py:
Set correct type cache on `type` object.
ake: d8f82f8 | arnsholt++ | src/setting/builtins.py:
Fix braino in MRO passed to ClassHOW.new_type from type().
11:40 _mg_ joined
moritz AlexDaniel: sub Test is export { ... } 11:40
oh wait, then you still have to import it 11:41
11:41 domidumont joined
moritz AlexDaniel: my &Test; if True { &Test := anon sub Test { say 'hello' } } 11:41
the "anon sub Test" construct is a subroutine that isn't automatically installed in the surrounding lexical scope ("anon"), but still knows its own name when introspected 11:42
AlexDaniel m: my &Test; if True { &Test := anon sub Test { say 'hello' } } 11:43
camelia rakudo-moar c2a57e: OUTPUT«5===SORRY!5=== Error while compiling /tmp/H3OlSeCCKe␤Cannot use bind operator with this left-hand side␤at /tmp/H3OlSeCCKe:1␤------> 3 &Test := anon sub Test { say 'hello' } 7⏏5}␤»
AlexDaniel moritz: how can I solve that error? 11:44
I don't really get it
11:44 domidumont left 11:45 domidumont joined
moritz hm 11:46
m: my &Test; if True { &Test = anon sub Test { say 'hello' } }
camelia ( no output )
moritz m: my &Test; if True { &Test = anon sub Test { say 'hello' } }; Test()
camelia rakudo-moar c2a57e: OUTPUT«hello␤»
moritz AlexDaniel: ok, use assignment instead
though the error looks a bit fishy to me. Why shouldn't you be able to bind here?
(if there's no extra container level, it should be assignment that's forbidden, not binding) 11:47
AlexDaniel moritz: well, if you think that it's an error than you should probably report it yourself, I don't think that I can phrase what is going on here :) 11:48
moritz AlexDaniel: I probably should
AlexDaniel this is fun, but it does not satisfy my original crazy intent. I'm trying to change the grammar in run-time (have no idea if that is even possible), depending on something that is not available in compile-time. I have no useful intent but I'm just trying to see what is possible, so I took a simple example of sub postfix:<!> { [*] 1..$^n }; and tried placing it into some block after "if", but it seems like it is lexically scoped so it 11:54
does not really do what I want it to do. That anon thing, obviously, is not going to work, as far as I can see. Any ideas?
11:55 Ven left, ][Sno][ joined
FROGGS timotimo: do you have a link? 11:56
11:56 [Sno] left
AlexDaniel I'm looking here, for example; github.com/tony-o/perl6-slang-sql/...g/SQL.pm6, but I wonder if there is any simpler example 11:57
FROGGS timotimo: nvm, found it
11:58 itz left
FROGGS bbl 11:59
12:00 FROGGS left
moritz AlexDaniel: you could try something like: module Foo { multi infix:<!>($x) { [*] 1..$x } }; BEGIN import Foo if True; 12:01
be careful not to introduce a new scope, of course :-)
12:04 Emeric left 12:06 xfix joined, xfix left, xfix joined
dalek kudo-star-daily: 14b6f06 | coke++ | log/ (2 files):
today (automated commit)
12:19
AlexDaniel moritz: does not really work, hm 12:20
m: module Foo { sub postfix:<!> { [*] 1..$^n }; }; BEGIN import Foo; say 5!;
camelia rakudo-moar c2a57e: OUTPUT«5===SORRY!5=== Error while compiling /tmp/s7c_T4CbPU␤Negation metaoperator not followed by valid infix␤at /tmp/s7c_T4CbPU:1␤------> 3*] 1..$^n }; }; BEGIN import Foo; say 5!7⏏5;␤ expecting any of:␤ infix␤ infix stoppe…»
dalek kudo/nom: 0f627ce | lizmat++ | lib/Test.pm:
Fix #125319
12:27
synbot6 Link: rt.perl.org/rt3/Public/Bug/Display...?id=125319
[Coke] good morning, everyone. 12:32
lizmat [Coke] o/ 12:37
12:39 rindolf joined
dalek kudo/nom: 276964e | lizmat++ | docs/ChangeLog:
Add some more entries
12:49
12:50 xfix left
jnthn import is already BEGIN time 12:50
But the sub needs marking "is export" for it to work
12:52 laouji left
lizmat Looking at making start { } take a blorst, but failing: gist.github.com/lizmat/3ad7ce1f0174013ec2eb 12:53
I guess I'm being too KISS :-) suggestions anyone?
12:56 yqt left
jnthn lizmat: Got 15 mins more of errands to do, then I can take a look. But I was going to do it by calling Promise.start and getting rid of the start function entirely 12:58
lizmat that was my plan also
I just called it START in the interim, so I could compare start and START :-)
hoelzro morning #perl6 13:04
13:06 amurf joined
AlexDaniel m: module Foo { sub postfix:<!> is export { [*] 1..$^n } }; BEGIN import Foo if True; say 5!; 13:06
camelia rakudo-moar c2a57e: OUTPUT«120␤»
AlexDaniel m: module Foo { sub postfix:<!> is export { [*] 1..$^n } }; BEGIN import Foo if False; say 5!;
camelia rakudo-moar c2a57e: OUTPUT«120␤»
AlexDaniel module Foo { sub postfix:<!> is export { [*] 1..$^n } }; import Foo if True; say 5!;
umm 13:07
ah
m: module Foo { sub postfix:<!> is export { [*] 1..$^n } }; import Foo if True; say 5!;
camelia rakudo-moar c2a57e: OUTPUT«5===SORRY!5=== Error while compiling /tmp/4bBna1C9Cs␤Missing semicolon␤at /tmp/4bBna1C9Cs:1␤------> 3 export { [*] 1..$^n } }; import Foo if 7⏏5True; say 5!;␤»
smls_ Is there an equivalent of &::($sub-name) for classes and roles? 13:08
i.e. look up a type from a string holding its name
dalek pan style="color: #395be5">perl6-examples: 0c93c1a | paultcochrane++ | t/categories/cookbook/ (2 files):
[cookbook] remove temporary files created from scripts

Some scripts generate temporary files that shouldn't be cleaned up in the script themselves (it wouldn't make sense in the context of the example). Nevertheless, this leaves temporary files lying around on the filesystem after running the test suite, thus the tests now clean these files up.
13:09
pan style="color: #395be5">perl6-examples: 713281b | paultcochrane++ | categories/euler/prob032-andreoss.pl:
Purge trailing whitespace
timotimo m: ::('Hash').new.say
camelia rakudo-moar c2a57e: OUTPUT«␤»
dalek pan style="color: #395be5">perl6-examples: 7911bc8 | paultcochrane++ | categories/euler/prob03 (3 files):
Add missing vim coda
timotimo m: ::('Hash').new.perl.say
camelia rakudo-moar c2a57e: OUTPUT«{}<>␤»
timotimo m: ::('Array').new.perl.say
camelia rakudo-moar c2a57e: OUTPUT«[]<>␤»
smls_ ok, thanks
13:11 amurf left
hoelzro I'm trying to get RolePunning.find_method to return a Method object that invokes the target method on the pun, rather than an anonymous function that does that. Any ideas on how I could force an invocant for a method? 13:12
13:12 FROGGS joined
lizmat passing it as the first parameter ? 13:12
moritz hoelzro: I'm pretty sure it does that on purpose, and if you want to change that, you should talk to jnthn++ first 13:15
(unless you already did that) 13:16
jnthn is a bit dubious about such a change too
We made the find_method vs. lookup distinction for exactly this kind of reason
find_method just has to return something invokable that handles the message 13:17
lookup should return something the user actually declared
So the current implementation of find_method is fine
smls_ I don't suppose it's possible to use the MOP to find out which of all the built-in types can do a method with a given name? 13:20
timotimo m: say ::.keys 13:21
camelia rakudo-moar c2a57e: OUTPUT«$=pod $! $_ EXPORT !UNIT_MARKER GLOBALish ::?PACKAGE @?INC $/ $?PACKAGE␤»
timotimo m: say SETTING::.keys
camelia rakudo-moar c2a57e: OUTPUT«&pipe &symlink RESTRICTED-CLASS $=pod $! $_ EXPORT &rmdir &MAKE-DIR &SYMLINK-PATH &UNLINK-PATH !UNIT_MARKER &chmod &CHANGE-DIRECTORY PIO GLOBALish ::?PACKAGE &link &rename &COPY-FILE NativeCall @?INC &shell $/ &copy &spurt &unlink &CHMOD-PATH &REMOVE-DIR &…»
timotimo m: for SETTING::.values -> $t { .say if $t.HOW === ClassHOW }
camelia rakudo-moar c2a57e: OUTPUT«5===SORRY!5=== Error while compiling /tmp/bsnyBfVR3n␤Undeclared name:␤ ClassHOW used at line 1␤␤»
timotimo m: for SETTING::.values -> $t { .say if $t.HOW === Metamodel::ClassHOW }
camelia ( no output )
timotimo oh?
m: say unique(SETTING::.values>>.HOW) 13:22
camelia rakudo-moar c2a57e: OUTPUT«Perl6::Metamodel::ClassHOW.new␤»
timotimo m: for SETTING::.values -> $t { .say if $t.HOW ~~ Metamodel::ClassHOW }
camelia rakudo-moar c2a57e: OUTPUT«(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤…»
timotimo m: for SETTING::.values -> $t { .WHAT.say if $t.HOW ~~ Metamodel::ClassHOW }
camelia rakudo-moar c2a57e: OUTPUT«(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤(Any)␤…»
timotimo that's weird :)
timotimo takes it to the repl
aaah, i have $t instead of $_ 13:23
ClassHOW isn't the right way to go 13:24
moritz why not just test .can (or .^can)? 13:28
lizmat m: say Int.can("Numeric").perl 13:30
camelia rakudo-moar c2a57e: OUTPUT«(method Numeric ($: Any |) { #`(Method|42412184) ... }, method Numeric ($: Any |) { #`(Method|41929128) ... })␤»
lizmat m: say Int.can("Numerik").perl
camelia rakudo-moar c2a57e: OUTPUT«()␤»
hoelzro moritz: I haven't, but I know he's sort of busy lately 13:32
ah ha 13:33
I didn't realize there was that distinction
so if a user wants a method (from a role or otherwise) they should do $something.^lookup($meth-name)?
and $something.can($meth-name) works in terms of lookup rather than find_method? 13:34
jnthn: if you're around and able to answer questions ^
lizmat $something.can is just short for $something.^can, which is short for $something.HOW.can 13:35
moritz ... short for $something.HOW.can($something) 13:36
lizmat moritz: touché :-) 13:37
jnthn hoelzro: Well, it depends what they want it for. If they want to look up the declared thing in the role, then lookup.
lizmat I always seem to forget that
13:37 itz joined
jnthn lizmat: .^ exists 'cus folks were good at forgetting it ;) 13:38
13:38 cschwenz left
hoelzro jnthn: ok, thanks for the input (and moritz and lizmat too!) 13:38
jnthn hoelzro: Whta is your use-case ooc? 13:39
13:40 kaare_ left
lizmat m: my Int @a = (1,2,3,Nil,4) # do we have a ticket for this? 13:41
camelia rakudo-moar c2a57e: OUTPUT«Unhandled exception: Type check failed in assignment to '@a'; expected 'Int' but got 'Any'␤ at <unknown>:1 (/home/camelia/rakudo-inst-2/share/perl6/runtime/CORE.setting.moarvm:throw:4294967295)␤ from src/gen/m-CORE.setting:16606 (/home/camelia/raku…»
hoelzro jnthn: I'm looking at fixing S26-documentation/block-leading.t (RT #125304)
synbot6 Link: rt.perl.org/rt3/Public/Bug/Display...?id=125304
13:42 kaare_ joined
hoelzro which apparently just requires .subst(/find_method/, 'lookup') =) 13:43
jnthn Yes, that's what I was about to say after reading the ticket :) 13:44
dalek ast: e9f12db | hoelzro++ | S26-documentation/block- (2 files):
Stop skipping role method tests for S26

We just needed to switch out find_method for lookup; find_method only returns something you can invoke, but lookup returns something you can inspect
13:45
13:45 yqt joined 13:52 smls_ left
jnthn lizmat: Problem is you're missing a QAST::WVal node containing Promise (looked up with $*W.find_symbol) as the first child of the callmethod op, so it tries to call .start on the code object 13:58
14:00 cschwenz joined, cschwenz left 14:02 telex left
lizmat jnthn: ok, I can work with that (I think( 14:02
)
geekosaur (you have a Lisp?) 14:03
PerlJam geekosaur: heh, I was thinking the same thing :)
lizmat :- 14:04
14:04 cognominal left, telex joined 14:08 cognominal joined 14:10 cognominal left 14:11 andreoss joined
lizmat jnthn: so I added QAST::Wval.new( :value($*W.find_symbol(['Promise'])) ), before the $<blorst>.ast 14:16
but it still fails the same way in the optimizer
is there some annotation missing maybe ? 14:17
timotimo you want WVal, not Wval 14:18
a typo like that gives you an NQPMu object where you least expect it :(
lizmat argh
timotimo i agree.
i think i want a fatal error to happen in that case
i may implement that
lizmat made it a WVal, still same failure in the optimizer :-( 14:20
timotimo :( 14:21
where do i have to look to find your code?
lizmat I mean, the problem is *before* it ever executes
gist.github.com/lizmat/3ad7ce1f0174013ec2eb
[Tux] sends belated congrats to jnthn !!! 💒 💒 💒
timotimo thanks 14:22
jnthn [Tux]: Thanks! :)
14:22 smls joined
timotimo hm, my intuition says: dump $<blorst>.ast 14:23
see what it ends up being
jnthn lizmat: Missing "make" 14:24
lizmat ??
it says : make QAST::Op.new(
?
jnthn gist.github.com/lizmat/3ad7ce1f0174013ec2eb doesn't
14:25 flaviusb left
timotimo ooooh 14:25
jnthn + method statement_prefix:sym<START>($/) {
+ QAST::Op.new(
lizmat argh
looking at the wrong code, indeed make missing :-)
timotimo this stuff is so fiddly, i'd really +1 having a branch flying around that you could rebase at will - or maybe a piece of code that you can uncomment - that gives earlier, more helpful error messages regarding the compilation stage 14:26
most importantly: without affecting performance too negatively
lizmat $ 6l '(START 42 + 1).result.say' 14:27
43
PerlJam timotimo: or maybe simple substitution macros?
lizmat yes!
14:27 skids joined
[Coke] is github.com/cosimo/perl6-lwp-simple/issues/37 a problem for anyone but me? 14:27
smls still doesn't get the difference between .^find_method, .^lookup and .^can - where is this explained? 14:28
moritz probably just in here :(
[Coke] er, I really meant github.com/tadzik/panda/issues/96, but it's both the same thing. :)
14:29 andreoss` joined
itz panda has worked with http_proxy I'm sure 14:29
moritz the difference between find_method and can is mostly that can returns a list of methods, if several are matching
14:29 rindolf left
moritz find_method is rather more low-level, and only ever returns the best match 14:30
the difference between find_method and lookup is what happens with roles
14:30 andreoss left
moritz roles can be parameterized, and the parameterized candidates may or may not have the method you're looking for 14:30
but the type name of the role refers to the whole group of role candidates 14:31
PerlJam wonders what "best match" means
moritz so a MyRole.^find_method cannot do its thing reliably, because it doesn't know which parameterization to do
PerlJam: first in MRO
jnthn It's not just roles. If you used something like Grammar::Tracer, .^find_method will give you something that traces and invokes the original, while lookup is the declared Method
PerlJam moritz: good, because that's what I thought :) 14:32
itz hmm the panda proxy code has been refactored since I added and tested it 14:33
14:33 zakharyas left, zakharyas joined 14:35 vendethiel joined
dalek kudo/nom: 211d7a1 | lizmat++ | src/ (3 files):
Make start take a blorst, fixes RT #125312

With support by jnthn++ and timotimo++
14:35
synbot6 Link: rt.perl.org/rt3/Public/Bug/Display...?id=125312
dalek ast: d089d04 | lizmat++ | S17- (2 files):
Remove () now that start is no longer a sub
14:37
smls m: .say for Str.^can("words")>>.candidates>>.perl>>.match(/\d+/)>>.Str
camelia rakudo-moar c2a57e: OUTPUT«46268608␤46268760␤46268912␤46269064␤46269216␤46269368␤46269520␤46268608␤»
smls ^^ why does this return the same candidate twice? (first and last)
14:37 yqt left, lolisa joined 14:38 lolisa left
smls m: .say for Str.^find_method("words")>>.candidates>>.perl>>.match(/\d+/)>>.Str 14:38
camelia rakudo-moar c2a57e: OUTPUT«57155888␤57156040␤57156192␤57156344␤57156496␤57156648␤57156800␤»
14:38 lolisa joined
smls ^^does .find_method + .candidates return all methods, or skip some? 14:38
14:39 rindolf joined 14:40 domidumont left 14:43 fhelmberger left 14:44 fhelmberger joined 14:46 Sqirrel left 14:48 Sqirrel joined, fhelmberger left
smls moritz: Can you give an example of a built-in role where .^lookup vs .^find_method makes a difference? 14:49
PerlJam smls: are you writing docs for the next person? :) 14:50
moritz m: say Rational.^find_method('nude')
camelia rakudo-moar c2a57e: OUTPUT«No appropriate parametric role variant available for 'Rational'␤ in any specialize at src/gen/m-Metamodel.nqp:2437␤ in any compose at src/gen/m-Metamodel.nqp:2747␤ in any make_pun at src/gen/m-Metamodel.nqp:1608␤ in any find_method at src/gen/m…»
moritz m: say Rational.^lookup('nude')
camelia rakudo-moar c2a57e: OUTPUT«nude␤»
moritz smls: ^^
smls thanks
14:51 RabidGravy joined, yqt joined
dalek kudo/nom: 71ebbb0 | lizmat++ | / (2 files):
Re-introduce sub start as a deprecation
14:52
14:56 smls_ joined, smls left 14:58 vendethiel left 15:06 lolisa left 15:07 lolisa joined 15:08 _mg_ left 15:09 _mg_ joined 15:11 kurahaupo1 left 15:12 smls joined, smls_ left 15:17 diana_olhovik left 15:21 _mg_ left
lizmat afk again& 15:21
15:25 kurahaupo1 joined 15:27 larion left 15:28 smls_ joined, smls left 15:29 vendethiel joined 15:35 smls_ left, smls_ joined 15:40 smls joined 15:41 smls_ left 15:47 smls left 15:48 muraiki joined
japhb .tell lizmat re: rakudo 0f627ce, this reminds me: Seems like every Perl code base I touch, I add something like this: sub _s($count, $plural='s', $singular='') { $count == 1 ?? $singular !! $plural }; .say for "tree{_s($plants)}", "box{_s($container, 'es')}", "{_s($birds, 'geese', 'goose')}"; 15:53
yoleaux japhb: I'll pass your message to lizmat.
japhb wonders how hard it would be to support other languages' count agreement rules without totally losing the simplicity 15:55
timotimo pretty hard, i imagine 15:56
don't some languages have three forms?
TimToady Indo-European used to have a dual 15:57
"oxen" used to mean two oxes
jnthn In some Slavic languages, things like 21, 31, etc. behave as a singular, and/or 22..24, 32..34 etc. things lead to different pluralization than 25..30, 35..40, etc. :) 15:58
japhb .ask lizmat Shouldn't the deprecation introduced in rakudo 71ebbb0 recommend Promise.start if the user needs :&catch?
yoleaux japhb: I'll pass your message to lizmat.
15:59 andreoss` left
jnthn Slovene does in theory have the dual, but my attempt to use it to order two beers was met with confusion. :P 15:59
japhb jnthn: That's actually pretty cool. OTOH, you have given me yet more appreciation for the Tower of Babel problem.
Heh 16:00
jnthn (The bar girl corrected it to the normal plural, then poured my beers. :))
16:01 zakharyas left
japhb
.oO( The assumption is that no one really stops at two beers, you're just partially ordering three or more ... )
16:01
16:01 diana_olhovik_ joined
geekosaur Semitic languages have duals. worse, at least some of them apply it only to things that have pairs *and* those pairs are relevant: "shnei yadim" and "yadayim" have different implications 16:01
I think I matched that wrong for the first one... not commonly used at all! 16:02
two unrelated hands
masak I remember reading a great essay in a CPAN module about this. the conclusion was, turn the i18n thing into a function. 16:03
16:03 meis left
masak because functions are general enough to handle anything you throw at them. 16:03
can't seem to find that module again, unfortunately.
TimToady something with Inflect?
japhb
.oO( Google Translate chose a probabilistic function )
16:04
16:08 hypnotoad joined, hypnotoad left
masak mebbe something with Gettext... but I can't seem to find it... 16:08
the essay kind of took the developer through a hypothetical situation, bringing in more and more languages into the mix. 16:09
dalek kudo/nom: f4e4de2 | TimToady++ | src/Perl6/ (2 files):
try out S/// form to return new string

Adding this more as a "to play with" feature. (Note that use with ~~ will be very surprising for now, unless you expect False on success and True on failure.)
16:14
16:21 pecastro left
TimToady the rationale for use of uppercase is that it is a rawer form, much like Q// is a raw quote 16:21
[Coke] my grammar sense is tingling. 16:22
16:24 pecastro joined
hoelzro Perl 6 on MoarVM doesn't restrict you from updating a single variable from separate threads in any way, does it? 16:25
16:25 smls joined
TimToady I don't believe it attempts to prevent you from shooting yourself in the foot that way 16:26
hoelzro alright 16:27
I was just thinking about RolePunning.nqp and how it creates a $!pun if it hasn't already
and how that might behave with a multithreaded application
TimToady well, if it's idempotent, then doing it duplicately shouldn't matter, unless the updates can destroy each other somehow due to lack of atomicity 16:29
16:29 sjn_phone joined
TimToady well, other than wasted CPU, I mean 16:29
16:30 smls left
TimToady if it's not, well, then we have bigger problems 16:31
.oO(Global Meta-Interpreter Lock)
japhb But then you could end up returning two different puns that don't === each other but are in some sense the "same"
16:32 smls joined
timotimo i think behind the pun creation lies a moarvm-backed thing that interlocks 16:33
TimToady yeah, which was always the case before we cached it...
japhb Only one of which is now saved as the pun that will be returned in the future
timotimo i might be wrong, though
japhb TimToady: Oh agreed, I just meant there is a real race there; whether we care is a different question.
TimToady I suspect we care :) 16:34
japhb (My personal vote is that we should, on general principle.)
japhb grumbles about having to write project requirements docs 16:35
I don't mind API docs, but PR docs just feel like something to trudge through
TimToady because they're too general, or too specific? 16:36
japhb Because they don't feel any more valuable than the outline of notes (or bug hotlist) that is my real captured requirements -- it's just converting into long winded prose for the benefit of people that don't think in that kind of mental shorthand. 16:39
I can see the value to some, but for me, it's just lost time. :-(
Whereas API docs (for instance) have obvious intrinsic value to both my future self and others that have to deal with whatever abomination I've brought forth. :-) 16:40
Sadly, grumbling doesn't make it any less necessary ... 16:41
japhb trundles off to stare at a blank document, punctuated by meetings and lunch
itz lunch++ 16:43
16:44 amurf joined 16:46 smls left 16:47 spider-mario joined 16:48 smls joined, amurf left 16:49 brrt joined, itz left 16:50 liztormato joined
liztormato japhb: re start deprecation. To my knowledge is the catch param to start() not documented 16:52
jnthn We do locking to protect certain MOP operations, but yeah, the role punning is not, though as TimToady++ mentioned the race to create the pun isn't automatically a problem.
16:53 smls left 16:54 smls joined 16:55 [Sno] joined, yqt left, rba_ left
japhb liztormato: Fair enough, though might be worth pointing out anyway for those that used the source, Luke. 16:55
16:55 ][Sno][ left 16:56 sjn_phone_ joined
vendethiel o/, #perl6 16:58
16:58 smls_ joined, brrt left 16:59 sjn_phone left, smls left 17:02 smls joined 17:03 smls_ left, smls left 17:07 smls joined
smls I made a little helper tool: i.imgur.com/COmy8Z2.png 17:08
source code: github.com/smls/undef/blob/master/.../p6routine
moritz smls++ 17:13
17:14 domidumont joined
TimToady smls: a coercer in the parameter list can insert two entries into the candidate list 17:20
smls can you give an example?
TimToady well, I suspect .words is an example, since that's what you were testing :) 17:21
smls oh, that's what you mean
vendethiel what's a blorst :o? 17:23
TimToady except looking at method words, I don't see a coercer
block or statement
vendethiel TimToady: S/// looks awesum :)
17:24 _mg_ joined
timotimo smls: you know you can get the filename + line number for code objects? 17:25
smls didn't know that, no
TimToady m: say S/foo/bar/ given "food" 17:26
camelia rakudo-moar c2a57e: OUTPUT«5===SORRY!5=== Error while compiling /tmp/c3o3FDcdK3␤Undeclared name:␤ S used at line 1␤Undeclared routines:␤ bar used at line 1. Did you mean 'bag'?␤ foo used at line 1␤ given used at line 1␤␤»
TimToady doesn't look awesum yet...
PerlJam smls++
TimToady in fact, kinda looks like recompilation is busted
(of camelia)
in fact, it appears to be running a version from May 26 17:28
PerlJam smls: The comment at the top of your code says "A tool for looking up Perl 6 built-in subroutines/..." but it could also be used for non-built-in stuff as well if you happen to load the right module like: perl6 -MFoo p6routine foo
smls I suppose so :)
TimToady moritz: ^^^ 17:29
moritz nine: rakudo rebuild on camelia complains: "fatal: Unable to look up github.com (port 9418) (Name or service not known)"
EOUTSIDEOFMYCONTROL :-)
TimToady ESOMETHINGISWRONGONTHEINTERNET!!! 17:30
smls Damn, p6routine still exhibits this weird "WARNING: unhandled Failure detected in DESTROY" bug for many operators 17:31
TimToady well, that means there's a Failure leak somewhere, which we need to plug 17:32
17:32 yqt joined
smls Can a failure somehow sneak trough a .map({(try ... ) or next}) ? 17:32
TimToady may well indicate that some construct is not sunk properly
try should catch any failure going through it 17:33
smls e.g. run p6routine '+^' to see it in action (with newest r-m)
TimToady maybe we aren't setting a failure as "handled" when we throw it?
s/it/its exception/ 17:34
smls The bug kept coming and going for different inputs as wrote that script; apparently never going for all of them.
TimToady if a failure did sneak out of try, the 'or' should mark it handled
smls And is seemingly affected by making changes to completely different parts of the script :o 17:35
TimToady we did change the inside of try to 'use fatal', so maybe something in that mechanism isn't quite right
17:35 llfourn left
TimToady but we're no longer using a dynamic variable for fatalizing, so the lazy dynamic scope of the map shouldn't matter, I'd think 17:36
in any case, the solution is not just to turn off the warning :) 17:38
17:38 molaf joined
TimToady that would be of a defense industry solution... 17:38
smls ;)
TimToady which kinda explains the 95% failure rate on recent TSA intrusion tests 17:39
well, I guess that would be 95% success rate, looking at it from the intrusion end :)
17:45 smls left 17:46 smls joined 17:47 atweiden joined, liztormato left 17:49 _mg_ left 17:50 smls left 17:55 vendethiel left 17:56 vendethiel joined 17:57 espadrine left
TimToady hmm, server can't find github.com: REFUSED 17:58
camelia and its DNS server don't appear to e on speaking terms currently 18:00
atweiden i have a MyApp.pm: 18:04
unit class MyApp; class MyApp::Config is export { class MyApp::Config::SubDataType { has $.count; } has MyApp::Config::SubDataType $.mydata; } has MyApp::Config $.conf;
but when i try to access MyApp::Config from a separate file with `use MyApp::Config`, i get `Could not find MyApp::Config in any of:...`
is it necessary to keep MyApp::Config in its own unit in a separate file?
had tried combining multiple units, because wanted better type checking but was getting `Circular module loading detected involving module...` 18:06
tony-o_ you probably don't need to 'use' MyApp::Config 18:10
you don't need to use the MyApp::Config as long as you've 'use MyApp' in your other file 18:13
atweiden: gist.github.com/tony-o/286bd818ecc712e0d862 18:14
timotimo you don't need to - or rather: you cannot 18:16
"use" is about "compunits", which maps somewhat directly to "files"
so with "use MyApp" you get all the stuff from that file in one "package" 18:17
atweiden so the `is export` is not needed? 18:18
tony-o_ correct
18:26 bin_005 joined 18:29 _mg_ joined 18:35 SevenWolf joined
timotimo classes are "our" scoped by default, aren't they? 18:41
18:41 larion joined
timotimo inside classes at least? 18:41
18:41 muraiki left
FROGGS always 18:42
18:48 rindolf left 18:50 brrt joined
TimToady nearly anything declares a term defaults to 'our' 18:50
18:51 yqt left
TimToady including subsets, enums, and constants 18:51
lizmat computer: messages please
yoleaux 15:53Z <japhb> lizmat: re: rakudo 0f627ce, this reminds me: Seems like every Perl code base I touch, I add something like this: sub _s($count, $plural='s', $singular='') { $count == 1 ?? $singular !! $plural }; .say for "tree{_s($plants)}", "box{_s($container, 'es')}", "{_s($birds, 'geese', 'goose')}";
15:58Z <japhb> lizmat: Shouldn't the deprecation introduced in rakudo 71ebbb0 recommend Promise.start if the user needs :&catch?
TimToady m: { subset MyInt of Int; }; say OUR::MyInt 18:52
camelia rakudo-moar c2a57e: OUTPUT«(MyInt)␤»
TimToady m: { subset MyInt of Int; }; say MyInt
camelia rakudo-moar c2a57e: OUTPUT«(MyInt)␤»
TimToady I guess it looks it up in OUR anyway
FROGGS .oO( OurInt )
TimToady m: { our sub foo { say "FOO" } }; foo; # in contrast, subs don't 18:53
camelia rakudo-moar c2a57e: OUTPUT«5===SORRY!5=== Error while compiling /tmp/3Sf4pRUVZy␤Undeclared routine:␤ foo used at line 1␤␤»
TimToady my view of constants has always been that they're basically very narrow types :)
FROGGS m: unit class Flubber; { subset MyInt of Int; }; say MyInt
camelia rakudo-moar c2a57e: OUTPUT«5===SORRY!5=== Error while compiling /tmp/3Ujutn20em␤Undeclared name:␤ MyInt used at line 1␤␤»
TimToady hmm 18:54
FROGGS m: unit class Flubber; { subset MyInt of Int; }; say OUR::MyInt
camelia rakudo-moar c2a57e: OUTPUT«(MyInt)␤»
FROGGS it probably looks at GLOBAL
TimToady I guess it just looks in yeah...
which makes sense, since it has to start in GLOBAL to find anything in any package 18:55
18:55 _mg_ left, bin_005 left 18:56 bin_005 joined 19:02 Peter_R joined
dalek kudo/nom: da586e3 | lizmat++ | / (3 files):
Introduce Int.s, for those pesky s's

Inspired by japhb++ , it returns '' if the Int == 1, else it returns 's'
19:04
nwc10 but what if I need an es? And can I have .d for duals? :-) 19:05
lizmat I could use this at 4 locations in the core, so at least internally it made sense 19:06
nwc10 yes, thinking about it, there is an itch here that can be scratched 19:07
I thought of duals first (to sort of satirise the English-specific bit, and the potential complexity slippery slope)
but the es question is a bit more pertinent, because even English will hit it maybe 1/26th of the time. But I don't have a good answer 19:08
19:09 rindolf joined, kurahaupo1 left
raydiak
.oO( what we need are localized error messages in rakudo... )
19:09
19:09 larion left
hoelzro seems like there should be a module that provides pluralize($word, $count, :en) 19:10
lizmat raydiak: that is a different issue that can be handled by mixing in .message methods in the exception classes for the desired language
DrForr Don't we usually put that in a Lingua:: module?
hoelzro DrForr: in P5 land, yeah 19:11
lizmat nwc10: something like this? 19:12
$ 6 'my $c = 1; say "$c child$c.s(q/ren/)"'
1 child
$ 6 'my $c = 2; say "$c child$c.s(q/ren/)"'
2 children
DrForr I know we're in a new venue, but pluralization is more complex than just picking a language ID :)
nwc10 yes. I think that will get everything apart from pedants with >1 ox.
lizmat DrForr: I'm well aware of that, thinking back at former $wiork where they now have to support 40+ languages 19:13
$work
moritz that's tough. 19:14
DrForr I imagine you knew the complications, just thinking of other people that haven't worked there :)
lizmat gettext just doesn't cut it
19:15 yqt joined, yqt left 19:16 yqt joined
dalek kudo/nom: fa76a98 | lizmat++ | src/core/Int.pm:
Allow setting the multi extension
19:16
19:19 llfourn joined 19:23 domidumont left 19:24 llfourn left 19:26 telex left
PerlJam hoelzro: github.com/rails/rails/blob/master...er.rb#L220 :-) 19:27
19:27 khisanth_ joined 19:28 telex joined
zostay m: my $b = Buf.new(1, 2); $b ~= Buf.new(3, 4); 19:28
camelia ( no output )
19:30 Khisanth left, sjn_phone joined 19:33 sjn_phone_ left 19:37 rindolf left
japhb lizmat: The signature ending in "$plural='s', $singular=''" was quite intentional. You will end up wanting the singular case as well at some point for e.g. $birds.s(|< geese goose >) ;-) 19:38
lizmat well, this is good enough for internal core usage
and we don't do geese in the core 19:39
japhb resists the urge to fowl things up
19:40 brrt left
lizmat looks forward to some chickun 19:40
aka some faux chicken at verticaldiner.com 19:47
19:48 FROGGS left
japhb The YAPC vegan meetups, I'm guessing? 19:50
19:50 espadrine joined
lizmat yeah, autarch is looking forward to it, which is always a good sign :-) 19:50
dalek ast: 08b7bd4 | lizmat++ | S17-promise/start.t:
Check for start taking a blorst
19:53
19:53 pecastro left
PerlJam remembers having vegan ice cream (for the first time ever) with autarch in Austin 20:00
20:01 darutoko left
lizmat remembers the same, but in Madison :-) 20:01
20:03 colomon left
japhb jnthn: Got a couple minutes to answer questions about Evject? 20:04
jnthn japhb: Sure
20:05 brrt joined
japhb So ... the design seems difficult to use for heavy or often-mutated objects, which would have a current state built up from a great number of events, because it looks like you'd get O(N**2) performance, as each new mutation takes longer 20:07
20:07 smls joined
japhb How is this actually addressed in production code, since I assume that could have been a simplification just to teach the concept? 20:07
lizmat gist.github.com/lizmat/5ae61833fe735865f1fa # trying to implement $=finish 20:08
japhb (Come to think of it, you could get O(N**3) performance if the object contains arrays that get copied each time.)
jnthn: ^^
smls lizmat: Are you sure having an .s method for pluralization is a good idea? It'll be very easy to confuse it with the file test method of the same name. 20:10
PerlJam japhb: What's Evject?
jnthn japhb: Whether that's actually a problem is highly domain-specific. I've applied this technique in the context of domain driven design, and I've found in many cases the aggregates only have so many events over their lifetime.
lizmat smls: good point
jnthn japhb: There's an easy optimization available when needed, though, typically called snapshotting: you every so often store a serialized copy of the state at a particular version. 20:11
japhb: From a functional programming point of view, that's completely safe: applying events is just a fold, and the snapshot is simply memoization.
lizmat smls: suggestion for different name, or perhaps I should just revert the Int.s related commits as it has descended on a slippery slope already
jnthn japhb: Just need to make sure that a representation change invalidates the snapshot.
japhb jnthn: So instead of building up from a new object, you build up from the last snapshot, bounding the longest time to rebuild the object, hmmm, yes. 20:12
jnthn japhb: Yeah
japhb jnthn: Explain that last bit?
smls IMO the problem of pluralizing user output is quite context-dependent and can be approched in different ways, which suggests to me that it is best left to module space.
japhb PerlJam: It's the framework jnthn++ created for the last section of his objects intersect concurrency talk.
smls though if we do have something in core, it might make sense to borrow the PL naming scheme of perl5's lingua modules 20:13
japhb PerlJam: gist.github.com/jnthn/da27ded3fbf06df7c54a
jnthn japhb: The benefit of event sourcing is that you get a persistence strategy that doesn't break the object's encapsulation and doesn't lead to schema duplication, as seen in the ORM approach.
japhb smls: General pluralization shouldn't be in core. :-)
jnthn japhb: This gives freedom to refactor the innards of the object
brrt oh, i have one more for that 20:14
jnthn japhb: And then deploy a new version, and the new state is built up from the event history
japhb jnthn: Ah! Meaning you have to make sure a refactoring doesn't make your snapshot unusable
jnthn japhb: However, if you cache the state, you need to...right :)
brrt the benefit of event sourcing (and CQRS) is that you sidestep the inherent conflict between readers and writers
jnthn japhb: Note that event sourcing + actors have also been mixed happily, which gives you another interesting point in the field.
brrt readers want a consistent, valid value 20:15
jnthn japhb: See Akka.Persistence for an example of that.
brrt writers just want to stuff their data and have you deal with it
in an RDBMS you typically optimize for readers (if you have lots of constraints and checks) 20:16
which makes your application difficult to interface with
if you use event sourcing, you decouple write operations from the 'read result' 20:17
japhb is planning to try this with some really quite heavy objects, which will have quite long event histories, so it will be interesting to see when Rakudo's performance profile makes me want to start snapshotting
brrt hence you can explicitly balance between the two demands
japhb brrt: hmmm 20:18
brrt i like that answer :-)
20:18 _mg_ joined
jnthn japhb: One interesting thing is that "just serialize it quick somehow" is often awkward for objects 'cus then you have refactoring pain (the serialized representation doesn't just deserialize to the right thing), but if that's only serving as cache then you're fine. :) 20:19
japhb :-) 20:20
dalek kudo/nom: eebebb7 | lizmat++ | / (3 files):
Undo pluralization hack, it was too slippery
japhb chuckles at that commit message
brrt that does then imply that your events need to be serialised in a refactoring-independent way 20:21
jnthn To date, I think ES is the best way I've seen to persist highly behavioral objects.
japhb ES?
jnthn Event Sourcing
japhb Oh, I see, I thought you were talking about a particular framework or so.
Yeah, my biggest fear is that I'm going to lose the clarity that came with being able to see the procedural code all in a line. 20:22
jnthn brrt: Events are immutable; if you introduce a new version of an event then you still support applying the previous one, or just do a mapping to the new version.
brrt ok, i can see how that works out
20:26 rba_ joined 20:27 brrt left, brrt joined 20:31 _mg_ left
dalek kudo-star-daily: ea5a544 | coke++ | log/ (2 files):
today (automated commit)
20:33
rl6-roast-data: fa46400 | coke++ | / (9 files):
today (automated commit)
[Coke] ecosystem-api.p6c.org/ probably needs an index.html if it's going to get past corporate site classification for http proxies. 20:34
20:34 colomon joined
[Coke] -1 on adding .s to Int 20:34
(if it it's private to the core, that's fine, but I don't want it as part of the exposed API) 20:35
... and now I'm caught up with backscroll. Thanks. :) 20:36
lizmat [Coke]: people who used the Source would have found out and abused it 20:39
20:40 molaf left
japhb That brings up the general problem of helper routines that are merely meant to reduce duplicated code across the setting but which we don't want to support generally for user code ... how do we want to do that? 20:43
20:43 zakharyas joined
jnthn had thought of putting them in a Rakudo::Internal:: package 20:44
[Coke] hoelzro: ooh, you got those two S26 tests running? 20:49
hoelzro I did!
thanks to jnthn, moritz, and lizmat's assistance
20:50 telex left
nwc10 jnthn: Rakudo::S3kr1t would be less typing 20:50
remember, #define private public 20:51
(people will always try stuff you would rather that they didn't)
japhb nwc10: Why stop at obfuscated ASCII? Let's go full Unicode on this bikeshed!
nwc10 make sure it's outside the base plane, to confuse inferior implementations
[Coke] hoelzro++ 20:52
lizmat couldn't we have something like find_symbol work differently inside the core (including Rakudo::Internal) and outside ?
[Coke] .u private 20:53
yoleaux U+0091 PRIVATE USE ONE [Cc] (<control>)
U+0092 PRIVATE USE TWO [Cc] (<control>)
U+2F1B KANGXI RADICAL PRIVATE [So] (⼛)
[Coke] .u secret
yoleaux U+3299 CIRCLED IDEOGRAPH SECRET [So] (㊙)
[Coke] m: unit package Rakudo::㊙;
camelia rakudo-moar c2a57e: OUTPUT«===SORRY!===␤Name Rakudo:: ends with '::' and cannot be used as a package name␤»
[Coke] *sniff*
jnthn lizmat: I'd rather not; Perl 6 has sufficient introspective power that I'm very wary of such tricks ;)
20:54 telex joined
jnthn lizmat: Further, I think it's OK for things like the debugger UI to use such things. 20:54
lizmat: Or custom settings. Most important is that it's very explicit what you're dong
dong
doing!
lizmat then, by definition, it is ok for other users
ding dong ?
japhb Well, we don't actually need to keep people from using these helpers; we merely need to make it clear that it's not part of the public API. 20:55
jnthn lizmat: Sure, as are nqp:: ops if you pre-decl...
lizmat use Rakudo::Internals
japhb
.oO( use Rakudo::Internals; )
jinx!
lizmat hehe great minds :-)
jnthn What japhb++ said though; we don't tend to outright ban stuff you likely oughtn't do in Perl, just strongly hint you probably might want something else... :) 20:56
[Coke] we should definitely have stuff that we can change without fear of breaking users. 20:58
jnthn Indeed, so long as it's clear to said users that's what they're getting themselves into. 20:59
dalek kudo/nom: 277fcc1 | lizmat++ | src/Perl6/ (3 files):
Implement $=finish
21:00
jnthn
.oO( Are you finish? )
hoelzro during my talk last Thursday, Joel Berger mentioned niecza. I tried building it this morning, but no luck with Mono 4. Has anyone here built it succesfully recently?
lizmat++
lizmat $ 6 '.say for $=finish.words; 21:01
> =finish
> Hello World
> '
Hello
World
21:01 colomon left
vendethiel lizmat++ :) 21:01
hoelzro: don't think so
[Coke] hoelzro: github.com/coke/perl6-roast-data/b...ummary.out - not for nine months. 21:02
(at least)
hoelzro ouch
[Coke] I'd be happy to add it back, but it got to the point where maintaining roast to be fudged properly was too hard given no one was updating the code. 21:03
21:04 colomon joined
[Coke] (esp. once new builds started failing.) 21:04
Ditto pugs.
dalek kudo/nom: fbe0b4e | lizmat++ | docs/ChangeLog:
Mention $=finish
japhb wishes we still had lambdacamels about. I miss them. 21:05
21:05 skarn left, bin_005_b joined, bin_005 left
hoelzro [Coke]: yeah, and with a build that's currently failing, it makes it that much harder for anyone to pick it back up =( 21:05
21:11 skids left
grondilu github.com/grondilu/openssl/pull/4/files # what is this C<unit> keyword before a module declaration? 21:12
[Coke] I tried to squawk loudly when it happened, fwiw.
But I have no problem with A) focusing on rakudo, and B) focusing primarily on one backend.
smls What's a lambdacamel? 21:13
[Coke] I suspect rakudo-on-.net will happen before niecza is resurrected.
smls: a haskel programmer who does perl 6 (pugs developers)
dalek ast: 5aa29ab | lizmat++ | S02-lexical-conventions/begin_end_pod.t:
Add basic test for $=finish
21:14
hoelzro [Coke]: agreed 21:15
21:15 colomon left
hoelzro grondilu: it's a new keyword that's required before unit-level declarations that use the "module/grammar/whatever Name;" form 21:16
dalek ecs/newio: 77a0785 | lizmat++ | S99-glossary.pod:
Add blorst lemma
vendethiel lizmat++ # lemmas! 21:17
dalek ecs: 0b3d1f4 | lizmat++ | S99-glossary.pod:
Add blorst lemma (in right branch this time)
21:19
japhb smls: As well as working on Pugs, lambdacamels tended to be really excellent sources of deep CS knowledge, due to the particular mental type that wants to sit at the intersection of Haskell and Perl 6.
smls i can imagine
japhb (Audrey Tang)++ # The ultimate lambdacamel
grondilu guess he'll have to read S11 again now
lizmat she would need to indeed 21:20
21:21 skarn joined, zakharyas left, larion joined 21:34 bin_005_b_m joined, bin_005_b left 21:36 colomon joined
lizmat std: __END__ 21:38
camelia std 28329a7: OUTPUT«5===SORRY!5===␤Undeclared name:␤ '__END__' used at line 1␤Check failed␤FAILED 00:00 134m␤»
lizmat TimToady: thinking about adding a more useful error mentioning $=finish / =finish 21:39
21:39 bin_005_b_m left
lizmat TimToady: any suggestions as to where to do that? 21:39
21:39 bin_005_b_m_c joined
lizmat TimToady: jnthn suggested doing a token term:sym<p5end> { ^^ __END__ $$ <.obs: ...> }, but that feels like overkill 21:39
grondilu (yeah Martin Fink is speaking now!) 21:44
jnthn Sleep time; 'night o/ 21:45
lizmat good night, jnthn : sweet dreams in your new apartment! 21:46
brrt sleep well jnthn and the rest 21:53
21:53 brrt left 21:56 bin_005_b_m_c left 21:57 bin_005 joined
RabidGravy is applying role that supplies a CALL-ME the best way of implementing a method trait that provides the entire implementation of the method? (like NativeCall does) 21:58
lizmat good question 21:59
RabidGravy it appears to work 22:00
eg. 22:02
m: role Foo { method CALL-ME(*@args) { say @args[0].boot; } }; multi trait_mod:<is>(Routine $r, :$foo!) { $r does Foo; }; class Bar { has $.boot = "ghhggh"; method boom() is foo {}; }; Bar.new.boom;
camelia rakudo-moar c2a57e: OUTPUT«ghhggh␤»
dalek kudo/nom: 2f1960c | lizmat++ | src/Perl6/Grammar.nqp:
Give meaningful feedback on __END__/__DATA__
22:03 bin_005 left 22:04 bin_005 joined
lizmat .tell TimToady could you check github.com/rakudo/rakudo/commit/2f1960c7e9 for sanity ? 22:04
yoleaux lizmat: I'll pass your message to TimToady.
22:06 kaare_ left
RabidGravy nighty night 22:08
lizmat good night, RabidGravy
lizmat also calls it a night 22:09
dalek kudo/nom: 7023a52 | lizmat++ | docs/ChangeLog:
Mention __END__/__DATA__ obsoleteness
22:11
lizmat good night, #perl6!
22:12 diana_olhovik_ left 22:13 RabidGravy left 22:20 llfourn joined 22:23 bin_005 left 22:25 llfourn left 22:50 smls left 22:56 skids joined 23:07 adu joined 23:09 larion left 23:26 dolmen joined 23:31 [Sno] left, [Sno] joined 23:33 lolisa left 23:34 pecastro joined 23:36 telex left 23:38 telex joined 23:41 amurf joined 23:46 mr-fooba_ left 23:47 mr-foobar joined 23:48 dolmen left 23:54 diegok joined 23:58 flaviusb joined