»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'p6: say 3;' or rakudo:, or /msg camelia p6: ... | irclog: irc.perl6.org or colabti.org/irclogger/irclogger_logs/perl6 | UTF-8 is our friend! Set by moritz on 22 December 2015. |
|||
00:05
BenGoldberg joined
00:08
kid51 joined,
nadim left
00:15
Actualeyes left
00:16
rindolf left
00:23
tmch joined
00:35
SCHAAP137 left
00:36
Some-body_ joined
00:37
DarthGandalf left,
Some-body_ is now known as DarthGandalf
00:41
laz78 left
00:43
chkk left
00:58
cpage_ left,
cpage_ joined
01:00
lizmat joined
01:05
lizmat left
01:12
BenGoldberg left
01:13
BenGoldberg joined
01:17
BenGoldberg left
01:27
arcetera left
01:28
arc__ joined,
arc__ is now known as arcetera,
arcetera left,
arcetera joined
01:33
grondilu left
01:34
cdg left,
grondilu joined
01:35
cdg joined
01:40
cdg left
01:43
lustlife` joined
01:46
lustlife left
01:48
lustlife` left
01:58
kid51 left
02:03
kalkin-__ joined
02:04
mohae joined
02:05
sufrostico joined
02:07
kalkin-_ left
|
|||
AlexDaniel | m: my @a = <a b c>; say @a\ \ \ [1] | 02:08 | |
camelia | rakudo-moar 595890: OUTPUT«b» | ||
02:10
Nostrovus joined
|
|||
AlexDaniel | m: my @a = <a b c>; say @a.[1] | 02:13 | |
camelia | rakudo-moar 595890: OUTPUT«b» | ||
AlexDaniel | m: my @a = <a b c>; say @a . [1] | ||
camelia | rakudo-moar 595890: OUTPUT«5===SORRY!5=== Error while compiling /tmp/Yf0DuFxFCtUnsupported use of . to concatenate strings; in Perl 6 please use ~at /tmp/Yf0DuFxFCt:1------> 3my @a = <a b c>; say @a .7⏏5 [1]» | ||
AlexDaniel | :/ | ||
m: my @a = <a b c>; say @a.[1] | 02:14 | ||
camelia | rakudo-moar 595890: OUTPUT«b» | ||
AlexDaniel | m: my @a = <a b c>; say @a..[1] | ||
camelia | rakudo-moar 595890: OUTPUT«3..1» | ||
AlexDaniel | m: my @a = <a b c>; say @a....[1] | ||
camelia | rakudo-moar 595890: OUTPUT«(a)» | ||
AlexDaniel | m: my @a = <a b c>; say 1R[@a] # heh | 02:17 | |
camelia | rakudo-moar 595890: OUTPUT«5===SORRY!5=== Error while compiling /tmp/RnZlZRoxNEConfusedat /tmp/RnZlZRoxNE:1------> 3my @a = <a b c>; say 17⏏5R[@a] # heh» | ||
dalek | kudo-star-daily: 64f678d | coke++ | log/ (9 files): today (automated commit) |
02:20 | |
kudo-star-daily: be4f27b | coke++ | log/ (9 files): today (automated commit) |
|||
02:20
sufrostico left
|
|||
AlexDaniel | “MVM_nfg_get_synthetic_info called with out-of-range synthetic” wtf | 02:25 | |
02:32
skids joined
02:33
m0ltar is now known as moltar
02:34
moltar is now known as Guest37857,
Guest37857 is now known as m0ltar
|
|||
AlexDaniel | I can reproduce it (in fact, it gets in my way). What can I do now? Is there any way to get a stacktrace or something? | 02:34 | |
02:44
molaf_ joined
02:46
BenGoldberg joined
02:48
molaf left
02:54
Ben_Goldberg joined
02:56
BenGoldberg left,
BenGoldberg_ joined,
FROGGS left
02:57
Nostrovus left
02:58
colomon left
02:59
Ben_Goldberg left
03:01
gnommer joined
03:03
BenGoldberg_ left
|
|||
gnommer | Can I use unicode symbols in token's names ( my token Δ { ... } ) ?? | 03:07 | |
skids | tokens are identifiers so they have to follow the alphanumeric rules. | 03:08 | |
gnommer | p6: my token Δ { abc }; | ||
camelia | ( no output ) | ||
gnommer | p6: my token буква { abc }; | ||
camelia | ( no output ) | ||
Hotkeys | well technically | ||
those are all letters | |||
m: my $буква = "Ay"; say $буква | 03:09 | ||
camelia | rakudo-moar 595890: OUTPUT«Ay» | ||
03:09
FROGGS joined
|
|||
TEttinger | m: my $ꃔ "Yi!"; say $ꃔ | 03:16 | |
camelia | rakudo-moar 595890: OUTPUT«5===SORRY!5=== Error while compiling /tmp/NMzLh37joWTwo terms in a rowat /tmp/NMzLh37joW:1------> 3my $ꃔ7⏏5 "Yi!"; say $ꃔ expecting any of: infix infix stopper statement end statement mod…» | ||
TEttinger | m: my $ꃔ = "Yi!"; say $ꃔ | ||
camelia | rakudo-moar 595890: OUTPUT«Yi!» | ||
gnommer | p6: my $s="1234"; my token год {\d\d\d\d}; $s ~~ m/<год>/; say $<год> | 03:17 | |
camelia | rakudo-moar 595890: OUTPUT«===SORRY!===Error encoding ASCII string: could not encode codepoint 1075» | ||
gnommer | p6:my $s="1234"; my token year {\d\d\d\d}; $s ~~ m/<year>/; say $<year> | 03:18 | |
p6: my $s="1234"; my token year {\d\d\d\d}; $s ~~ m/<year>/; say $<year> | |||
camelia | rakudo-moar 595890: OUTPUT«「1234」» | ||
TEttinger | hmm. | ||
that does seem like an odd difference | |||
03:19
cibs left
|
|||
TimToady | nqp might be cheating somewhere... | 03:20 | |
03:21
colomon joined
|
|||
gnommer | p6: my $sum="1234"; my token Σ {\d\d\d\d}; $sum ~~ m/<Σ>/; say $<Σ> | 03:22 | |
camelia | rakudo-moar 595890: OUTPUT«===SORRY!===Error encoding ASCII string: could not encode codepoint 931» | ||
TimToady | p6: my $sum="1234"; my token TESTΣ {\d\d\d\d}; $sum ~~ m/<TESTΣ>/; say $<TESTΣ> | ||
camelia | rakudo-moar 595890: OUTPUT«===SORRY!===Error encoding ASCII string: could not encode codepoint 931» | ||
TimToady | looks like a low-level npq bug | 03:23 | |
03:25
cpage_ left
03:26
cpage_ joined
03:28
FROGGS left
03:38
noganex_ joined
03:41
noganex left
|
|||
Hotkeys | m: 'ꃔ'.uniname | 03:46 | |
camelia | ( no output ) | ||
Hotkeys | m: 'ꃔ'.uniname.say | ||
camelia | rakudo-moar 595890: OUTPUT«YI SYLLABLE FAP» | ||
03:50
jack_rabbit joined
|
|||
skids | m: ().perl.say; [].perl.say; $[].perl.say; $().perl.say | 03:57 | |
camelia | rakudo-moar 595890: OUTPUT«()[]$[]Use of Nil in string context in block <unit> at /tmp/4KVUwb6EHb line 1""» | ||
skids | m: $().WHAT.say | 03:58 | |
camelia | rakudo-moar 595890: OUTPUT«Use of Nil in string context in block <unit> at /tmp/qsubM44sqj line 1(Str)» | ||
03:58
gnommer left
|
|||
skids wonders if $() is doing something useful or whether the empty list special case should be made to work there. | 04:01 | ||
m: @().perl.say # pre-GLR relic? | 04:02 | ||
camelia | rakudo-moar 595890: OUTPUT«(Nil,)» | ||
04:09
wamba joined
04:10
skids left
|
|||
SmokeMachine____ | hi! how can I test if a return is a failure? | 04:19 | |
m: sub f{1/0}; my $ret = f; say $ret ~~ Failure | |||
camelia | rakudo-moar 595890: OUTPUT«False» | ||
Hotkeys | m: sub f{1/0}; my $ret = f; say $ret | 04:20 | |
camelia | rakudo-moar 595890: OUTPUT«Attempt to divide 1 by zero using div in block <unit> at /tmp/gMFy7ynq4o line 1Actually thrown at: in block <unit> at /tmp/gMFy7ynq4o line 1» | ||
SmokeMachine____ | Hotkeys: yes, but I don't want to say if it's not a failure... | 04:21 | |
my idea was: | |||
04:21
yqt left
|
|||
Hotkeys | m: sub f{1/0}; my $ret = f; say $ret.WHAT | 04:21 | |
camelia | rakudo-moar 595890: OUTPUT«(Rat)» | ||
SmokeMachine____ | m: sub f{1/0}; my $ret = f; $ret.exception.throw if $ret ~~ Failure | ||
camelia | ( no output ) | ||
SmokeMachine____ | but it's no a Failure... | ||
*not | |||
Hotkeys | why not just use a try/catch | 04:22 | |
SmokeMachine____ | Hotkeys: does Failure "activate" CATCH blocks? | ||
(in my case, the function is given by the user... so it's always possible to return a Failure...) | 04:23 | ||
04:23
cpage_ left
|
|||
Hotkeys | m: sub f {fail('foo')}; my $ret = f; say $ret ~~ Failure | 04:24 | |
camelia | rakudo-moar 595890: OUTPUT«True» | ||
Hotkeys | (1/0).WHAT | 04:25 | |
m: (1/0).WHAT | |||
camelia | ( no output ) | ||
Hotkeys | m: (1/0).WHAT.say | ||
camelia | rakudo-moar 595890: OUTPUT«(Rat)» | ||
Hotkeys | are you sure that 1/0 does fail? | ||
(if you know you'll get a fail then sure it' | 04:26 | ||
ll work) | |||
SmokeMachine____ | m: sub f{1/0}; my $ret = f; $ret.say | ||
camelia | rakudo-moar 595890: OUTPUT«Attempt to divide 1 by zero using div in block <unit> at /tmp/p6JEhxA_Jh line 1Actually thrown at: in block <unit> at /tmp/p6JEhxA_Jh line 1» | ||
SmokeMachine____ | the doc says: Sink (void) context causes a Failure to throw | ||
m: sub f{1/0}; my $ret = f; $ret; say "after" | 04:27 | ||
camelia | rakudo-moar 595890: OUTPUT«WARNINGS for /tmp/pTwDS7Cq_K:Useless use of $ret in sink context (line 1)after» | ||
AlexDaniel | // TODO … todo what? | ||
SmokeMachine____ | Hotkeys: ☝️ | 04:28 | |
Hotkeys: the problem is that I don't know if it'll be a Failure... | 04:29 | ||
Hotkeys | m: (1 / 0).WHAT.say | 04:30 | |
04:30
abaugher left
|
|||
camelia | rakudo-moar 595890: OUTPUT«(Rat)» | 04:30 | |
Hotkeys | m: (1 div 0).WHAT.say | ||
camelia | rakudo-moar 595890: OUTPUT«(Failure)» | ||
Hotkeys | There's a failure for you | ||
04:31
abaugher joined
|
|||
AlexDaniel | wait, why would 1/0 be a failure? | 04:31 | |
it's a perfectly fine Rat as far as I can see | |||
Hotkeys | yeah | ||
m: (1/0).nude.say | 04:32 | ||
camelia | rakudo-moar 595890: OUTPUT«(1 0)» | ||
AlexDaniel | so what are you trying to do? | ||
what do you mean by “if return is a failure”? It just isn't | |||
SmokeMachine____ | AlexDaniel: when I call a method on it, it throws a exception... looks like a Failure... | 04:33 | |
jdv79 | hola | ||
SmokeMachine____ | m: sub f{1/0}; my $ret = f; $ret.say | ||
camelia | rakudo-moar 595890: OUTPUT«Attempt to divide 1 by zero using div in block <unit> at /tmp/gwDm9ydtY3 line 1Actually thrown at: in block <unit> at /tmp/gwDm9ydtY3 line 1» | ||
AlexDaniel | SmokeMachine____: okay, then just catch it? | ||
04:34
kerframil left
04:35
hjYjvimg joined
|
|||
SmokeMachine____ | I don't want to catch... I want to discover if the return is a Failure or not... with out running anything on a "not Failure" return | 04:36 | |
I am writing a "auto function fuzz tester"... and the function can do anything that the user wants... | 04:37 | ||
AlexDaniel | SmokeMachine____: the result is a good looking Rat, it's not a failure. Failure comes up when you put this rat into things that don't handle it well | ||
04:37
vendethiel joined
|
|||
SmokeMachine____ | I'll test the return to discover if the function "worked" with that input or not... | 04:37 | |
Hotkeys | but like | 04:38 | |
if you do a catch | |||
you then know that it failed | |||
and if it doesn't fail | |||
catch block doesn't run | |||
no issue | |||
SmokeMachine____ | but that return doesn't "activate" the catch... | 04:39 | |
I'll post my code... | |||
Hotkeys | but see | 04:40 | |
it isn't a failure then | |||
AlexDaniel | m: my $x = 1/0; { $x.say; CATCH { default { say ‘Houston, we have a problem’ } } }; | ||
camelia | rakudo-moar 595890: OUTPUT«Houston, we have a problem» | ||
AlexDaniel | m: my $x = 1/5; { $x.say; CATCH { default { say ‘Houston, we have a problem’ } } }; | ||
camelia | rakudo-moar 595890: OUTPUT«0.2» | ||
Hotkeys | if you do something to $x that actually makes it divide | ||
that's a failure | |||
but 1/0 is perfectly okay | |||
it's a rat with 1 as nu and 0 as de | |||
m: sub f{1/0}; my $ret = f; $ret.nu.say; $ret.de.say | 04:41 | ||
camelia | rakudo-moar 595890: OUTPUT«Method 'nu' not found for invocant of class 'Rat' in block <unit> at /tmp/apLupCyhQ2 line 1» | ||
Hotkeys | rude | ||
04:41
hjYjvimg left
|
|||
Hotkeys | do I have to spell the whole thing for separate | 04:41 | |
m: sub f{1/0}; my $ret = f; $ret.numerator.say; $ret.denominator.say | |||
camelia | rakudo-moar 595890: OUTPUT«10» | ||
AlexDaniel | yeah | ||
Hotkeys | like that's a perfectly fine rat | ||
SmokeMachine____ | My code www.irccloud.com/pastebin/2OFsNbFN/ | ||
Hotkeys | it's only when you call .say on it that it fails | ||
or other stuff | |||
AlexDaniel | SmokeMachine____: so I get False False False False… what should I get instead? | 04:49 | |
04:49
molaf_ left
|
|||
AlexDaniel | some error, right? | 04:49 | |
right | |||
SmokeMachine____: but nothing throws an exception so there is no problem at all currently | 04:50 | ||
04:50
wamba left
|
|||
SmokeMachine____ | try this: github.com/FCO/Test-Fuzz | 04:51 | |
the code on pastern was wrong... | |||
the sample on github's README, works for me... | 04:52 | ||
04:53
Actualeyes joined
|
|||
AlexDaniel | SmokeMachine____: yeah, it works | 04:54 | |
you can run something that will throw an exception, like: ~$return; | |||
and then your CATCH block will work just fine | 04:55 | ||
what I don't understand is why would you want to do that | |||
04:55
aindilis left,
khw left,
aindilis joined
|
|||
SmokeMachine____ | AlexDaniel: my intention is find possible bugs on functions... | 04:56 | |
"automagically"... | |||
AlexDaniel | SmokeMachine____: okay, then you have to call your function | ||
oh you do | |||
04:57
Vitrifur left
|
|||
SmokeMachine____ | that's what I do... with a big amount of input data... | 04:57 | |
AlexDaniel | right. | 04:58 | |
SmokeMachine____: okay, interestingly what you get back is Rat | |||
SmokeMachine____: so your function is working fine | |||
and it returns a Rat | 04:59 | ||
now let's say your function was doing something else | |||
04:59
Vitrifur joined
|
|||
SmokeMachine____ | Yes, I think it is working fine... good point... | 04:59 | |
AlexDaniel | like: $bla + $ble + "test" | 05:00 | |
SmokeMachine____ | that function on README sample has a "bug" found with my lib... :) | ||
AlexDaniel | then it will probably attempt to stringify Rat | ||
05:00
risou joined
|
|||
AlexDaniel | and then you'll get your division by zero, I guess | 05:00 | |
no, you'll get another error :D | 05:01 | ||
Hotkeys | that might also just give you the | ||
"must start with a base-10 number blah blah" | |||
m: say 1/0+"test" | 05:02 | ||
camelia | rakudo-moar 595890: OUTPUT«Cannot convert string to number: base-10 number must begin with valid digits or '.' in '3⏏5test' (indicated by ⏏) in block <unit> at /tmp/L9m7bZgSX5 line 1Actually thrown at: in block <unit> at /tmp/L9m7bZgSX5 line 1» | ||
Hotkeys | yeah | ||
AlexDaniel | ~ $bla + ble | ||
Hotkeys | that | ||
:p | |||
m: say 1/0~"test" | |||
camelia | rakudo-moar 595890: OUTPUT«Attempt to divide 1 by zero using div in block <unit> at /tmp/59OiJqjaWt line 1Actually thrown at: in block <unit> at /tmp/59OiJqjaWt line 1» | ||
Hotkeys | works | ||
AlexDaniel | why do we even get a Rat? | ||
Hotkeys | because it's a rat | ||
AlexDaniel | m: my Int $x = 1; my UInt $y = 2; say ($x + $y).WHAT | ||
camelia | rakudo-moar 595890: OUTPUT«(Int)» | ||
05:04
leedo left,
leedo joined
05:05
cpage_ joined
|
|||
SmokeMachine____ | thank you all for your help! | 05:05 | |
AlexDaniel | SmokeMachine____: by the way, it looks like a cool module | ||
SmokeMachine____ | AlexDaniel: thanks! if you wanna help... :) | 05:06 | |
05:07
rhr__ left
|
|||
AlexDaniel | SmokeMachine____: I'm not sure if “is fuzzed” trait is helpful though. If I was going to use this module, I'd probably expect something like: fuzz(&myfunction) | 05:07 | |
05:08
rhr joined,
sQuEE left
|
|||
SmokeMachine____ | I was thinking of doing both... | 05:08 | |
05:08
wamba joined
|
|||
SmokeMachine____ | and on your script you could do: | 05:09 | |
multi MAIN(:$fuzz-test!) {Test::Fuzz.run-tests} | |||
05:10
sQuEE joined
|
|||
SmokeMachine____ | thank you all! | 05:11 | |
have a good night! | |||
05:30
labster left
05:33
lustlife joined
05:34
adu joined,
jameslenz left
05:35
wisti joined
05:36
tmch left
05:38
adu left
05:42
vendethiel left
05:52
Cabanossi left
05:56
Cabanossi joined,
wisti left
05:57
ufobat joined
06:01
musiKk_ joined
06:02
adu joined
06:05
kmwallio joined
06:12
cibs joined
06:19
wamba left
06:22
keix left,
keix joined
06:25
tmch joined
06:29
jameslenz joined
06:30
ufobat left
06:33
adu left
06:47
avenj left
06:50
bjz joined
06:57
wamba joined
07:00
domidumont joined
07:01
bjz left
07:04
domidumont left,
domidumont joined
07:10
tmch left
07:14
domidumont left,
domidumont joined
07:15
domidumont left
07:21
bjz joined
07:22
wamba left
07:37
firstdayonthejob joined
07:39
nadim joined
07:42
nakiro joined,
AlexDaniel left
07:43
El_Che joined
07:47
FROGGS joined
07:52
domidumont joined
07:53
spintronic joined
07:54
spintronic left
08:08
darutoko joined
08:13
jack_rabbit left
08:20
jack_rabbit joined
08:23
bjz left,
bjz joined
08:27
CIAvash joined
08:37
jameslenz left
08:38
nadim left
08:39
jack_rabbit left,
firstdayonthejob left
08:41
zakharyas joined
08:44
avenj joined
09:06
RabidGravy joined
09:07
abraxxa joined
09:13
wamba joined
|
|||
RabidGravy | Rarr! | 09:16 | |
DrForr | o/ | 09:18 | |
sortiz | \o #perl6 | 09:28 | |
09:30
jameslenz joined
09:33
ely-se joined
09:36
Upasaka_ joined
09:37
Upasaka left
|
|||
gregf_ | m: class Foo { has Hash $.items is rw; method decrease($item){ self.items[$item]-=1; }; method []($item) { } } | 09:54 | |
camelia | rakudo-moar 595890: OUTPUT«5===SORRY!5=== Error while compiling /tmp/VPDOKmpROiMissing blockat /tmp/VPDOKmpROi:1------> 3($item){ self.items[$item]-=1; }; method7⏏5 []($item) { } }» | ||
gregf_ | should it not be possible to implement a method like : method []($item){} ? | ||
RabidGravy | depends what you think it should do | 09:55 | |
gregf_ | method {}($item) { self.items{$item]; } <== sorry that | 09:57 | |
so the class has a hash and when i say something like this: my $f = Foo.new({a =>100, b => 200, c => 300}); print $f{a}; <- this should print 100 | 09:58 | ||
RabidGravy | took me a few seconds, but ah | 09:59 | |
you need to make Foo an Associative and implement AT-KEY | 10:00 | ||
FROGGS | m: class Foo { has Hash $.items is rw; method decrease($item){ self.items[$item]-=1; }; method AT-KEY($key) { $!items{$key} } }; say Foo.new(items => {a => 1, b => 2})<a> | ||
camelia | rakudo-moar 595890: OUTPUT«1» | ||
RabidGravy | doc.perl6.org/language/subscripts#M...bscripting | ||
gregf_ | ah - nice | 10:01 | |
FROGGS | m: class Foo { has Hash $.items is rw; method new(Associative $h) { self.bless: items => $h }; method decrease($item){ self.items[$item]-=1; }; method AT-KEY($key) { $!items{$key} } }; say Foo.new({a => 1, b => 2})<a> | ||
camelia | rakudo-moar 595890: OUTPUT«1» | ||
psch | m: class A { has $.x handles <AT-KEY BIND-KEY> = Hash.new; }; my $x = A.new; $x{'foo'} = 1; say $x.perl | ||
camelia | rakudo-moar 595890: OUTPUT«A.new(x => ${:foo(1)})» | ||
FROGGS | ohh | ||
such magic | |||
psch++ | |||
gregf_ | RabidGravy++ :) | 10:02 | |
psch | still needs the .new though :) | ||
gregf_ | btw, even when i have not instantiated an object why does it not throw a null pointer exception? | ||
FROGGS | because there is no null pointer | 10:03 | |
psch | m: say 1 + Int # kind of the closest we got | ||
camelia | rakudo-moar 595890: OUTPUT«Invocant requires an instance of type Int, but a type object was passed. Did you forget a .new? in block <unit> at /tmp/a0kiTnFC5F line 1» | ||
FROGGS | the type itself is also an object you can talk to and talk about | ||
gregf_ | like so class Foo { has $.a is rw; method bar(){ say "Barred!"; } } ; class Bar { $.f Foo handles <bar> is rw; sub baz(){ self.bar(); } } ; Bar.new.baz | 10:04 | |
FROGGS: by null pointer i meant, method on undefined object | |||
FROGGS | m: class Foo { has $.a is rw; method bar(){ say "Barred!"; } } ; class Bar { has Foo $.f handles <bar> is rw; sub baz(){ self.bar(); } } ; Bar.new.baz | ||
camelia | rakudo-moar 595890: OUTPUT«5===SORRY!5=== Error while compiling /tmp/QxzKvPsLn9'self' used where no object is availableat /tmp/QxzKvPsLn9:1------> 3 Foo $.f handles <bar> is rw; sub baz(){7⏏5 self.bar(); } } ; Bar.new.baz expecting any of: term» | ||
FROGGS | see? | 10:05 | |
err | |||
ohh it is a sub | |||
m: class Foo { has $.a is rw; method bar(){ say "Barred!"; } } ; class Bar { has Foo $.f handles <bar> is rw; method baz(){ self.bar(); } } ; Bar.new.baz | |||
camelia | rakudo-moar 595890: OUTPUT«Barred!» | ||
gregf_ | err. sorry. just typed that on the fly *hides* | ||
FROGGS | you can call method on types if they dont use self, which implies "I want an instance" | 10:06 | |
gregf_ | FROGGS: there, you havent instantiated Foo? | ||
FROGGS | m: class Foo { has $.a is rw; method bar(){ say self; } } ; class Bar { has Foo $.f handles <bar> is rw; method baz(){ self.bar(); } } ; Bar.new.baz | ||
camelia | rakudo-moar 595890: OUTPUT«(Foo)» | ||
FROGGS | gregf_: yes, you can implement static methods | ||
m: class Foo { has $.a is rw; method bar(){ say self.defined; } } ; class Bar { has Foo $.f handles <bar> is rw; method baz(){ self.bar(); } } ; Bar.new.baz | |||
camelia | rakudo-moar 595890: OUTPUT«False» | ||
gregf_ | oh, so self is for class as well as instance variables? | 10:07 | |
FROGGS | yes, kinda like in Perl 5 | ||
gregf_ | :| | ||
FROGGS | it is just the invocant | ||
but you can restrict it... | 10:08 | ||
gregf_ | and i can see that self is mandatory *there was a discussion some days back.. and i lost the main point in the conversation* | ||
oh - ok | |||
FROGGS | m: class Foo { has $.a is rw; method bar(:D:){ say self.defined; } } ; class Bar { has Foo $.f handles <bar> is rw; method baz(){ self.bar(); } } ; Bar.new.baz | ||
camelia | rakudo-moar 595890: OUTPUT«5===SORRY!5=== Error while compiling /tmp/m3dtKx1iCzMissing blockat /tmp/m3dtKx1iCz:1------> 3class Foo { has $.a is rw; method bar(:7⏏5D:){ say self.defined; } } ; class Bar {» | ||
FROGGS | m: class Foo { has $.a is rw; method bar(D:){ say self.defined; } } ; class Bar { has Foo $.f handles <bar> is rw; method baz(){ self.bar(); } } ; Bar.new.baz | ||
camelia | rakudo-moar 595890: OUTPUT«5===SORRY!5=== Error while compiling /tmp/GukiE8AYryInvalid typename 'D' in parameter declaration.at /tmp/GukiE8AYry:1------> 3class Foo { has $.a is rw; method bar(D7⏏5:){ say self.defined; } } ; class Bar { » | ||
FROGGS | m: class Foo { has $.a is rw; method bar(Foo:D:){ say self.defined; } } ; class Bar { has Foo $.f handles <bar> is rw; method baz(){ self.bar(); } } ; Bar.new.baz | ||
camelia | rakudo-moar 595890: OUTPUT«Invocant requires an instance of type Foo, but a type object was passed. Did you forget a .new? in method bar at /tmp/RVvO2EJrOA line 1 in method baz at /tmp/RVvO2EJrOA line 1 in block <unit> at /tmp/RVvO2EJrOA line 1» | ||
FROGGS | there | ||
10:08
TEttinger left
|
|||
FROGGS | there you enforce that bar can only ever be called on a defined Foo | 10:09 | |
10:09
perlawhirl joined
|
|||
gregf_ | hmm | 10:09 | |
FROGGS | and a defined Foo is an instanciated Foo | ||
and you can also only access attributes from instances | 10:10 | ||
perlawhirl | hi perlers | ||
FROGGS | if you want static attributes, you use "my" instead of "has" | ||
perlawhirl | is there such a thing as a set of lists? | ||
m: set ([<a b c>], [<a b c>], [<d e f>]) | |||
camelia | ( no output ) | ||
perlawhirl | m: set ([<a b c>], [<a b c>], [<d e f>]).say | ||
camelia | rakudo-moar 595890: OUTPUT«([a b c] [a b c] [d e f])» | ||
FROGGS | which probably is a rare use-case, but it exists | ||
gregf_ | FROGGS++ | 10:11 | |
perlawhirl | m: say set ([<a b c>], [<a b c>], [<d e f>]) | ||
camelia | rakudo-moar 595890: OUTPUT«set(a, c, b, e, d, f)» | ||
gregf_ | FROGGS: thanks for explaining! | ||
FROGGS | gregf_: :o) | ||
psch | m: say [<a b c>] =:= [<a b c>] | 10:12 | |
camelia | rakudo-moar 595890: OUTPUT«False» | ||
FROGGS | perlawhirl: I'm not sure if Sets will operate on that level... | ||
psch | m: say set($(<a b c>), $(<a b c>), $(<d e f>)) | ||
camelia | rakudo-moar 595890: OUTPUT«set((a b c), (a b c), (d e f))» | ||
psch | hm, actually i'm not sure if Sets use =:= or eqv | ||
FROGGS | m: say ($(<a b c>), $(<a b c>), $(<d e f>)).Bag | ||
camelia | rakudo-moar 595890: OUTPUT«bag((d e f), (a b c), (a b c))» | ||
psch | they probably should use eqv, but don't seem to? | ||
m: say [<a b c>] eqv [<a b c>] | 10:13 | ||
camelia | rakudo-moar 595890: OUTPUT«True» | ||
FROGGS | m: say ($(<a b c>), $(<a b c>), $(<d e f>)).Bag{$(<a b c>)} | ||
camelia | rakudo-moar 595890: OUTPUT«0» | ||
perlawhirl | fair enough... just playing with bags and sets to get my head around them | ||
ie, i dont have a need (yet) for a set of lists | |||
psch | m: my $x = <a b c>; say set($x, $x, $(<d e f>)) | 10:15 | |
camelia | rakudo-moar 595890: OUTPUT«set((a b c), (d e f))» | ||
psch | yeah i think that hints at =:= instead of eqv | ||
dalek | osystem: 6c85109 | (Salvador Ortiz)++ | META.list: Add DBDish::ODBC to ecosystem Uses the DBDish infrastructure to provide access to ODBC This driver will be maintained separately. |
10:16 | |
perlawhirl | psch: cool, so set of Seq seems to work if i define them first. ta | 10:17 | |
10:18
lizmat joined,
virtualsue joined
10:23
TimToady left
|
|||
RabidGravy | "Files=3, Tests=48394" - that's the kind of numbers we like ;-) | 10:23 | |
sortiz++ # now to remember who it was that was asking about the other day | 10:24 | ||
10:24
TimToady joined
|
|||
sortiz | RabidGravy, was nine++, among others. | 10:25 | |
10:26
rindolf joined
|
|||
RabidGravy | I wonder if I sneaked a UInt7 type in anyone would notice | 10:28 | |
10:29
frithnanth joined
|
|||
Woodi | hi #perl6 :) | 10:31 | |
is there a way to make grammar parsing lazy ? | 10:32 | ||
10:35
vendethiel joined,
kennygillen joined
10:36
perlawhirl left
|
|||
RabidGravy | I don't think so, but you could design things such the effect is a lazy parse | 10:37 | |
jnthn | You could wrap a gather around the parse call and do takes in action methods ;) | 10:41 | |
psch | or implement &cat :S | 10:42 | |
10:42
kennygillen left
|
|||
psch | i really like that this is a straight quote from the synopses: "The resulting Cat is lazy." | 10:42 | |
jnthn | :D | ||
Laziness is pretty hard :) | 10:43 | ||
Cat will need some effort | |||
RabidGravy | our Cat is lazy, it was a struggle to get her out of our bed last night | 10:44 | |
I'm sure I had a thing somewhere that turned a Julia set into a stream of MIDI events | 10:45 | ||
Woodi | jnthn: thanx | 10:46 | |
RabidGravy | but can I find it, no | ||
ah | 10:47 | ||
10:54
perlawhirl joined
10:57
wamba left
11:00
espadrine joined
11:02
vendethiel left
11:04
espadrine_ joined,
espadrine left,
virtualsue left
|
|||
nine | Any statistics buff here? I have two medians, one for group A, one for group B. The one for group A looks better but this group has about twice the variance of group B. How can I tell if the result is significant? | 11:19 | |
RabidGravy | haha, brilliant I'd forgotten that I had got it to do rabidgravy.com/mandelbrot-midi-0.png | 11:26 | |
tadzik | mandelbrot midi? :) | 11:28 | |
RabidGravy | lilypond is rather good | ||
tadzik | yeah, the compile times are quite a bit of a pain though :) | ||
RabidGravy | yeah, it generates a MIDI stream with the notes based on the mandelbrot set | 11:29 | |
tadzik | haha, awesome | ||
11:30
kid51 joined
|
|||
RabidGravy | this is the P5 version github.com/jonathanstowe/midi-fractal | 11:31 | |
jast | nine: I believe that's not evident from what you've explained so far. significance testing deals with p-values, which in turn compares sample results to a model. I'm assuming the medians are your results. what's your model? | ||
11:32
vendethiel joined
|
|||
jast | or, more to the point, what's your null hypothesis and how do your values relate to it? | 11:34 | |
RabidGravy | tadzik, the Audio::PortMIDI can *read* input right now, going to test the output at some point today, it should work but I haven't tested it yet | ||
tadzik | RabidGravy: read input, so see what comes in from a midi device? | 11:35 | |
RabidGravy | yah | ||
tadzik | perfect, just what I need | ||
RabidGravy | github.com/jonathanstowe/Audio-PortMIDI | 11:36 | |
nine | jast: as I'm dealing with "time for creating a customer's website" here I dare say that a normal distribution can be assumed. I guess what I'm asking is: can the "better" median in group A be sufficiently explained by the higher variance of my sample? | ||
RabidGravy | not finished yet, but may get you started | ||
will be in a state to release over the weekend | |||
tadzik | awesome man | 11:37 | |
11:39
CIAvash left
|
|||
RabidGravy | right, off out for a bit | 11:40 | |
jast | nine: for any significance testing you need to formulate a null hypothesis. I'm having a hard time coming up with one that is testable and relates to the result/conclusion you're after. seems to me like you're trying to do a meta-analysis on a single study, sort of | 11:42 | |
11:44
RabidGravy left
|
|||
jast | in contrast, let's take the simple case. you've got a normally distributed probability variable X that you're trying to analyze. you have a null hypothesis about it, and you make a measurement | 11:45 | |
in significance testing, you take your measurement of X and calculate the probability that X is "more extreme" than your measurement, and that's your p-value. | 11:46 | ||
what you've got here is a two-dimensional probability variable (with a multinomial distribution over median *and* variance) | 11:47 | ||
in order to do any significance testing, you have to make an assumption about that distribution | 11:48 | ||
11:48
sortiz left
|
|||
jast | and all I can tell you is that I don't have any good assumptions for you :) | 11:48 | |
nine | This sounds quite a bit harder than I'd hoped :) | 11:50 | |
jast | given two distributions (which is what you've got data for) and no idea of how they relate to each other, all you can do is compare the distributions, but that says nothing about significance of anything | ||
sorry :) | |||
anyway, this is a case of finding the right question to ask | 11:51 | ||
generally speaking, if you have high variance, the way to fix that is to reduce variance, and you do that by collecting more data. :} | 11:52 | ||
11:52
azawawi joined
11:54
vendethiel left
|
|||
jast | I'm trying to think of something else to say that might be helpful but I'm a bit rusty in statistics... | 11:54 | |
azawawi | hi | ||
nine | Both distributions are just time to create customer websites. One group with responsive design, the other with classical design + extra mobile version. Seems like going fully responsive would just take 7 % more time, but we only have 58 examples of those and standard deviation is at 70 % of the median. So my gut says that we shouldn't rely on the 7 % figure. | ||
azawawi | .seen FROGGS | ||
yoleaux | I saw FROGGS 10:13Z in #perl6: <FROGGS> m: say ($(<a b c>), $(<a b c>), $(<d e f>)).Bag{$(<a b c>)} | ||
jast | nine: one way to visualize it better, at least, is to scatterplot the two distributions | 11:55 | |
visualization is often enough to make these kinds of decisions | |||
FROGGS | azawawi: hi | ||
jast | actually in this case a candle diagram is probably enough | 11:56 | |
11:57
jkramer joined
|
|||
jkramer | Hello | 11:57 | |
jast | if you want to actually crunch numbers, the Student's t-test may be relevant | ||
11:57
Actualeyes left
|
|||
jkramer | I need some help understanding nested data structures. I have a hash %foo = foo => @some-array; (@some-array is empty). But when I do @bar = %foo<foo> then @bar is an array with one element which is an empty array. | 11:58 | |
Do I need to do some dereferencing as in Perl 5? | |||
12:00
nadim joined
|
|||
psch | jkramer: in that specific case you bind ( := operator ) or slip ( .Slip method or prefix:<|> ) to not itemize the array in %foo<foo>. note that the former is similar to assigning the reference, while the latter lowers the content of the rhs array into the lhs | 12:00 | |
12:01
rindolf left
|
|||
jast | a | 12:04 | |
that was my internet connection acting up... | |||
nine: I believe this would fit your situation: en.wikipedia.org/wiki/Welch's_t_test | 12:05 | ||
nine | jast: looking at the scatter plot, it's hard to imagine any other conclusion than that the variance is just too high to read anything into it. | 12:06 | |
jast | see, that way was much easier :} | 12:07 | |
looking at the data doesn't always help, but when it does it helps very quickly | |||
nine | jast: thank you so much! You helped me a lot. | 12:09 | |
azawawi | FROGGS: im working on updating Selenium::WebDriver atm | 12:17 | |
FROGGS | azawawi: \o/ | 12:20 | |
azawawi: do you wanna see my patch btw? | |||
azawawi: gist.github.com/FROGGS/8717727b20b18e6ea785 | 12:23 | ||
azawawi takes a look | 12:26 | ||
FROGGS: looks good. why is LEAVE { ... } section commented? | 12:27 | ||
FROGGS | azawawi: I think that code exploded (not the exception itself)... maybe it does not anymore | 12:28 | |
azawawi: ahh, I remember | 12:29 | ||
azawawi: $response can be Any, and that will fail when you call .content on it | |||
12:31
wamba joined
12:37
nadim left
|
|||
azawawi | FROGGS: where is the code for Selenium::WebDriver::BlackBerry ? | 12:39 | |
12:48
perlawhirl left
|
|||
FROGGS | azawawi: in the gist: gist.github.com/FROGGS/8717727b20b...kberry-pm6 | 12:51 | |
12:56
CurtisOvidPoe_ joined
|
|||
CurtisOvidPoe_ | Afternoon, all! | 12:56 | |
moritz | \o CurtisOvidPoe_ | ||
perlpilot | CurtisOvidPoe_: greetings! | ||
CurtisOvidPoe_ | I’m finishing an article about Perl 6 for TechBeacon. Can anyone make any comments about performance work? | 12:57 | |
moritz | CurtisOvidPoe_: jnthn has a grant for working on it; he's doing a good job | ||
CurtisOvidPoe_: writing a memory profiler at the moment | |||
CurtisOvidPoe_: also there's ongoing work on a smarter JIT compiler | |||
news.perlfoundation.org/2016/02/gra...forma.html | 12:58 | ||
perlpilot | CurtisOvidPoe_: lizmat is constantly making small performance improvements too | ||
lizmat | CurtisOvidPoe_ : check out 6guts.wordpress.com for regular updates on the grant work | 12:59 | |
CurtisOvidPoe_ | Thank you :) | ||
13:00
skids joined
|
|||
perlpilot | CurtisOvidPoe_: At some point you might want to talk to people on #p6dev about what they're doing as that channel is more focused on development work. | 13:05 | |
tadzik | ....there is #p6dev? | 13:07 | |
sjn | o_O | ||
lizmat | irclog.perlgeek.de/p6dev | ||
sjn | oh, and o/ #perl6 :) | ||
lizmat | for the backlogging inclined :-) | ||
nine | sjn: jobs.atikon.com/content/werbeagentu...l#_entry_0 | 13:09 | |
perlpilot | tadzik: yeah, and you should be there! :) | ||
sjn | nine: ook, thanks :) | 13:11 | |
perlpilot | btw, am I the only one who keeps reading "TechBeacon" as "TechBacon"? It's making me hungry | 13:13 | |
moritz | nom nom nom | 13:14 | |
"to err is human. To propagate error to hundreds of machines is #devops". /me presses the "deploy" button... | |||
azawawi | FROGGS: what's 'phantomjs --version' on your linux machine? | 13:20 | |
FROGGS | azawawi: 1.9.0 | 13:21 | |
azawawi: am I using it actually? | |||
probably not... | 13:22 | ||
(yet) | |||
azawawi | ::PhantomJS | 13:23 | |
FROGGS: it is working on 2.1 and failing on 1.9.0 | |||
FROGGS: part of this code was done on my windows machine where i used the latest software | |||
FROGGS | okay, will keep that in mind | 13:24 | |
azawawi | also github.com/SeleniumHQ/selenium/wik...reProtocol is now OBSOLETE | 13:25 | |
FROGGS | happily I dont need it for testing the blackberry browser | ||
azawawi | w3c.github.io/webdriver/webdriver-spec.html | ||
FROGGS | aha | ||
azawawi | it was released "new" so most probably it is the same with minor alterations | 13:27 | |
13:34
molaf joined
13:36
jkramer left
|
|||
azawawi | FROGGS: aha... github.com/ariya/phantomjs/issues/11421 | 13:37 | |
FROGGS: "content-length" breaks phantomjs 1.9 | |||
13:42
perlawhirl joined
13:43
cdg joined
13:46
bjz left
13:49
bjz joined
13:54
sufrostico joined
13:59
nadim joined
14:01
bjz left
14:04
bjz joined
|
|||
perlawhirl | is there a succint way to get unique permutations? | 14:06 | |
this feels like it should work but maybe i'm missing something... | |||
m: my @n = 1,1,2; say @n.permutations.grep:{ $_ eqv none @n } | |||
camelia | rakudo-moar 13ca30: OUTPUT«((1 1 2) (1 2 1) (1 1 2) (1 2 1) (2 1 1) (2 1 1))» | ||
moritz | m: say (1, 1, 2).permutations.map(~*).unique | 14:07 | |
camelia | rakudo-moar 13ca30: OUTPUT«(1 1 2 1 2 1 2 1 1)» | ||
moritz | m: say (1, 1, 2).permutations.map(~*).unique.join(', ') | ||
camelia | rakudo-moar 13ca30: OUTPUT«1 1 2, 1 2 1, 2 1 1» | ||
perlawhirl | well now that i think about it... eqv to none would find nothing :D | ||
14:07
sjoshi joined
|
|||
perlawhirl | hrm.. interesting moritz... taking the scenic route via stringification | 14:07 | |
14:07
Timbus left
|
|||
moritz | m: say (1, 1, 2).permutations.unique.join(', ') # I don't think that works, because lists aren't value objects | 14:08 | |
camelia | rakudo-moar 13ca30: OUTPUT«1 1 2, 1 2 1, 1 1 2, 1 2 1, 2 1 1, 2 1 1» | ||
moritz | m: say (1, 1, 2).permutations.map(~*).unique(&infix:<eqv>).join(', ') | ||
camelia | rakudo-moar 13ca30: OUTPUT«Cannot call unique(Seq: Sub+{<anon|48540128>}+{Precedence}); none of these signatures match: ($: *%_) ($: :&as!, :&with!, *%_) ($: :&as!, *%_) ($: :&with!, *%_) in block <unit> at /tmp/Fok1_fjrCi line 1» | ||
moritz | m: say (1, 1, 2).permutations.map(~*).unique(as => ~*).join(', ') | ||
camelia | rakudo-moar 13ca30: OUTPUT«1 1 2, 1 2 1, 2 1 1» | ||
moritz | that way you get lists out of it | ||
perlawhirl | yep... cool | 14:09 | |
moritz | m: say (1, 1, 2).permutations.map(~*).unique(with => &infix:<eqv>).join(', ') | ||
camelia | rakudo-moar 13ca30: OUTPUT«1 1 2, 1 2 1, 2 1 1» | ||
nadim | Greetings from Africa, at least one person is doinf P6 here ;) | ||
moritz | no stringification involved here | ||
perlawhirl | GOT IT! | ||
psch | m: say (1,1,2).permutations.unique(with => &infix:<eqv>) | ||
camelia | rakudo-moar 13ca30: OUTPUT«((1 1 2) (1 2 1) (2 1 1))» | ||
moritz | \o Africa, nadim | ||
perlawhirl | m: my @n = 1,1,2; say @n.permutations.unique(as => ~*) | ||
camelia | rakudo-moar 13ca30: OUTPUT«((1 1 2) (1 2 1) (2 1 1))» | ||
14:09
Timbus joined
|
|||
nadim | moritz: P& with a view imgur.com/1ktwKcN | 14:12 | |
how wouldi , in the most perlish way, set all the elements of a hash to a certain value? | |||
14:13
Actualeyes joined
|
|||
psch | m: my %h = a => 1, b => 2; %h{%h.keys} = "foo" xx *; say %h.perl # might be something neater around somewhere | 14:14 | |
camelia | rakudo-moar 13ca30: OUTPUT«{:a("foo"), :b("foo")}» | ||
moritz | m: my %h = a => 1, b =>2 ; $_ = 0 for %h.values; say %h | ||
camelia | rakudo-moar 13ca30: OUTPUT«a => 0, b => 0» | ||
psch | m: my %h = a => 1, b => 2; %h{*} = "foo"; say %h.perl # this error i find weird | ||
camelia | rakudo-moar 13ca30: OUTPUT«Cannot assign to *, as the order of keys is non-deterministic in block <unit> at /tmp/2Pf6AKkZS3 line 1» | ||
psch | or is .keys deterministic? | ||
moritz | m: my %h = a => 1, b =>2 ; %h{}:values = 0 xx * | 14:15 | |
camelia | rakudo-moar 13ca30: OUTPUT«Unexpected named parameter 'values' passed in block <unit> at /tmp/nUBeaxWnA8 line 1» | ||
nadim | psch: I like the * way | ||
moritz | m: my %h = a => 1, b =>2 ; %h{}:v = 0 xx *; say %h | ||
camelia | rakudo-moar 13ca30: OUTPUT«(timeout)» | ||
nadim | hehe! | ||
14:16
Skarsnik joined
|
|||
Skarsnik | Hello | 14:16 | |
nadim | Skarsnik: hi | 14:17 | |
perlawhirl | m: my %h = one => 1, two => 2; %h.keys.map:{ %h{$_} = 5 }; say %h; | ||
camelia | rakudo-moar 13ca30: OUTPUT«one => 5, two => 5» | ||
14:17
tmch joined
|
|||
dalek | osystem: 58e7aa8 | okaoka++ | META.list: Change username |
14:18 | |
osystem: e8a0064 | moritz++ | META.list: Merge pull request #172 from titsuki/change-username Change username |
|||
perlawhirl | nadim: one more way... : %h{$_} = 0 for %h.keys | 14:19 | |
nadim | la compact one too! | 14:20 | |
perlawhirl | it's quite perlish cos it's how youd do it in perl5, more or less | ||
14:21
colomon_ joined,
colomon left,
colomon_ is now known as colomon
|
|||
perlawhirl | p5 would be : $h{$_} = 0 for keys %h | 14:21 | |
psch | m: my %h = one => 1, two => 2; %h = %h.keys >>=>>> 5; say %h.perl | ||
camelia | rakudo-moar 13ca30: OUTPUT«{:one(5), :two(5)}» | ||
perlawhirl | hot damn... what is that operator | 14:22 | |
psch | the long fish operator vOv | ||
lizmat | what's wrong with $_ = 0 for %h.values ? | ||
psch | well, no, it's a hypered fat arrow | ||
moritz visually prefers Z=> | 14:23 | ||
psch | moritz: but Z doesn't repeat the shorter side | ||
m: my %h = one => 1, two => 2; %h = %h.keys Z=> 5; say %h.perl | |||
camelia | rakudo-moar 13ca30: OUTPUT«{:two(5)}» | ||
nadim | Z not repeating the short side is a pity I miss it i other places too | 14:24 | |
perlawhirl | lizmat: it works! i presumed $_ would be a copy of the value and wouldn't modify the value | ||
moritz | psch: erm right, X=> then | ||
lizmat | $_ is defined to be bound to the values returned by .values, on purpose, so you *can* change them that way | ||
perlawhirl | yeah i dunno why i thought that. it works in p5 too | 14:25 | |
14:25
ufobat joined
|
|||
[Coke] | moritz++ #devops | 14:27 | |
nadim | The one thingthat is a tad fuzzy with a for loop is that you can't have an if /unless after without putting the whole thing between parenthesis | ||
azawawi | FROGGS: something was changed in HTTP::UserAgent since it was working before (evidence: travis-ci.org/azawawi/perl6-seleni...s/88746537 :) ) | 14:28 | |
FROGGS: lowercase http headers most probably | 14:29 | ||
perlawhirl | m: my %h = one => 1, two => 2; %h.values X= 0; say %h; | ||
camelia | rakudo-moar 13ca30: OUTPUT«one => 0, two => 0» | ||
psch | oh neat! | ||
perlawhirl | that would be the most perl6ish way, id think | ||
psch | that was kind of what i was looking for, perlawhirl++ | ||
14:29
musiKk_ left
|
|||
lizmat | m: my %h = a => 42, b => 666; %h X= 0; dd %h # too bad this doesn't work | 14:31 | |
camelia | rakudo-moar 57df3d: OUTPUT«Cannot modify an immutable Pair in block <unit> at /tmp/rjuuKldzNb line 1» | ||
perlawhirl | yeah, moritz pointed me in the right direction. X=> is if you wanted a new Pair... ie my %zeroed = %h.keys X=> 0; %h is unchanged | ||
lizmat | I wonder if the Pair creation of Hash.pairs should bind to the container in the hash | 14:32 | |
moritz | maybe | ||
azawawi | .tell RabidGravy HTTP::UserAgent seems to be forcing lower-case HTTP header names. Any chance one can override that behavior? | ||
yoleaux | azawawi: I'll pass your message to RabidGravy. | ||
14:33
sjoshi left
|
|||
nadim | perlawhirl: pretty perlish indeed | 14:34 | |
14:37
Actualeyes left
|
|||
FROGGS | $ perl6 -MHTTP::UserAgent -e 'say HTTP::Message.new( Foo => 42 ).Str' | 14:38 | |
Foo: 42 | |||
azawawi: do you mean that it outputs "foo: 42" fo you? | |||
for* | 14:39 | ||
14:39
azawawi left,
colomon left
14:44
zuzu joined
14:45
zuzu left
14:51
Actualeyes joined
14:52
itaipu joined
14:55
TreyHarris joined
14:56
abraxxa left
|
|||
nine | moritz: seeing your devops talk was a bit weird for me because we come from the other direction: we used to work directly on our production system via ssh to the server and vim. We only later moved to developing on the developer's machine and using a VCS. | 14:57 | |
We still don't do releases and our production systems just run git master. | 14:58 | ||
moritz | nine: well, that's a form of releasing software | ||
it just suffers from a few problems :-) | |||
nine | You could call every commit on master a release. | ||
perlpilot | nine: I'd wager that most shops made (are making) the transition as you did. | ||
moritz | nine: I'd say it's the right direction: you've moved to separate environments, and you have a process for getting your software to production | 14:59 | |
nine: later you can refine that process (automating gating based on tests, dependency resolution etc.) | 15:00 | ||
nine | Which is exactly what we're planning to do. Once we made the move to VMs, we'll test each change in a copy of the production environment before automatically pushing it to production. | 15:01 | |
15:06
rindolf joined
|
|||
[Coke] wishes we had tests! | 15:08 | ||
15:09
azawawi joined
|
|||
azawawi | hi | 15:09 | |
FROGGS: gist.github.com/azawawi/da5757238d792491b92b | |||
timotimo | FROGGS: how do you feel about making Inline::C work again? | 15:10 | |
Skarsnik | Inline::C is weird, does it requiere a compilateur at run time? | 15:11 | |
[Coke] | m: say 1/1.WHAT | ||
camelia | rakudo-moar 57df3d: OUTPUT«Parameter 'de' requires an instance of type Int, but a type object was passed. Did you forget a .new? in block <unit> at /tmp/nXuZTSJpWB line 1» | ||
[Coke] | m: say (1/1).WHAT | ||
camelia | rakudo-moar 57df3d: OUTPUT«(Rat)» | ||
jnthn | I'd imagine so, though you might be able to arrange for it to happen at BEGIN time | 15:12 | |
azawawi | FROGGS: github.com/azawawi/perl6-selenium-...e.pm6#L744 . Please notice the "Content-Length" to "content-length" translation. phantomjs 1.9.x which is normally installed on Debian checks for "Content-Length" case sensitiveness (an HTTP spec bug which was fixed in 2.x) | 15:15 | |
FROGGS | azawawi: I bet this causes it: github.com/sergot/http-useragent/b...t.pm6#L128 | 15:18 | |
azawawi | FROGGS: yup | ||
FROGGS | PR and you are done :o) | ||
wait, let me do it | 15:19 | ||
azawawi | FROGGS: confirmed, Content-Length on that line fixed the issue | 15:22 | |
FROGGS | timotimo: I could attempt that... | 15:24 | |
timotimo | consider it a low priority request from me | ||
FROGGS | Skarsnik: yes, I dont know of away to do that without a compilateur | ||
azawawi forces installation of HTTP::UserAgent after FROGGS++ fix :) | |||
FROGGS | azawawi: in the H:UA commit I changed more stuff... hopefully travis agrees... | 15:25 | |
azawawi | FROGGS: the funny thing i realized i may have a commit bit on H:UA :) | 15:26 | |
FROGGS | that's a good thing to have :o) | ||
azawawi | phantomjs 1.9 compatibility restored... FROGGS++ :) | 15:29 | |
FROGGS | \o/ | ||
15:30
kurahaupo joined
|
|||
azawawi is now fixing ::Firefox issues | 15:34 | ||
FROGGS: bit rot | |||
nadim | given: my $diff_glyphs = True; $diff_glyphs = %options<diff_glyphs> if %options<diff_glyphs>.defined ; Is there a cleaner way? | 15:36 | |
timotimo | there's "with" to check .defined, but give you the original value | ||
skids | Actually in this case the default needs to be True. | 15:37 | |
moritz | nine: my $diff_glyphs = %options<diff_glyphs> // True; | ||
sorry, meant nadim | |||
nadim | timotimo: sounds good but how would that look like? | ||
skids | So // is your friend. | ||
hoelzro | but what if $diff_glyphs already has a value? | 15:38 | |
nadim | then it is overridden but only if the option is set | ||
hoelzro | $diff_glyphs = %options<diff_glyphs> // $diff_glyphs; would cover that case | ||
moritz | hoelzro: nadim's example starts with my $diff_glyphs = True; | ||
hoelzro | ah, I didn't see that | ||
skids | $diff_glyphs = %options<diff_glyphs> // $diff_glyphs // True; # :) | 15:39 | |
or, precedence? | |||
nadim | anyway to remove the repetion? the default value is set many lines above at the start of the role declaration. | ||
the repetition of $diff_glyphs | 15:40 | ||
skids | You can in the other direction but not this direction. | 15:41 | |
(using //=) | |||
timotimo | try R//=? | ||
jnthn | m: my %options = diff_glyphs => 1; my $diff_glyphs = True; #`(later...) $diff_glyphs [R//]= %options<diff_glyphs>; say $diff_glyphs | ||
camelia | rakudo-moar 57df3d: OUTPUT«1» | ||
nadim | I was actually thinking of a =// ;) | ||
jnthn | m: my %options; my $diff_glyphs = True; #`(later...) $diff_glyphs [R//]= %options<diff_glyphs>; say $diff_glyphs | ||
camelia | rakudo-moar 57df3d: OUTPUT«True» | ||
jnthn | Like that :) | 15:42 | |
R being the reverse-arguments meta-op | |||
nadim | Cool! | ||
jnthn | And we only reverse those of the //, not of the assignment | ||
Cute :) | 15:43 | ||
15:43
AlexDaniel joined
15:44
itaipu left
15:48
ely-se left
|
|||
kmwallio | if I have an example in my examples directory, should I list that in me provides section in the META.info? | 15:48 | |
nadim | no | 15:49 | |
timotimo | maybe we ought to have some kind of infrastructure for example-viewing and storage | 15:50 | |
perlawhirl | why isn't this working... | 15:52 | |
nadim | timotimo: IMO, no. just clone and be done | ||
perlawhirl | m: say "this that".subst(/(this)/, "{$0.uc}") | ||
camelia | rakudo-moar 57df3d: OUTPUT«Use of Nil in string context in block at /tmp/VTmkUTbpId line 1 that» | ||
perlawhirl | why is $0 Nil ? | ||
i'm sure i've used captures in substitution before... is my brain fried | |||
timotimo | perlawhirl: that string is executed before the .subst is called | 15:53 | |
moritz | m: say "this that".subst(/(this)/, {$0.uc}) | ||
camelia | rakudo-moar 57df3d: OUTPUT«THIS that» | ||
moritz | us a string in a closure, not a closure in a string :-) | 15:54 | |
perlawhirl | ok, i'm hitting a weird issue where it's using a previous capture | ||
right now if i run this in the repl: "this that".subst(/(this)/, {$0}) | 15:55 | ||
it returns: i that | |||
timotimo | yeah, i know your problem | ||
"repl" | |||
perlawhirl | hah, ok | ||
figures | |||
i know for next time :D | |||
16:06
Relsak joined
|
|||
nadim | some Data::Dump::Tree news, for those interested, it soed data dumping, side by side data synchronization, and now only diff between two data structures | 16:07 | |
it's not perfect yet but going slowly towrds good enough imgur.com/cAYNEnk | |||
16:08
nakiro left
|
|||
dalek | pan style="color: #395be5">perl6-examples: 47d57e5 | (Shlomi Fish)++ | t/categories/euler.t: Fix the tests. Hopefully. The result was wrong before in the test and now it's fixed. |
16:08 | |
azawawi | FROGGS: S:W:Firefox is now fixed. Please test after reinstalling File::Zip. Enjoy :) | 16:09 | |
FROGGS: on Windows it will not work since firefox is not on $PATH | 16:10 | ||
FROGGS | well, one can adjust PATH :o) | 16:16 | |
timotimo | nadim: you reap what you soe? :) | ||
nadim | timotimo: I will get my revenge one day ;) | 16:17 | |
azawawi | FROGGS: i was discussing it with RabidGravy last year and something like Stuff::Finder or Program::Finder may be a useful module on windows | ||
16:19
RabidGravy joined
|
|||
azawawi | RabidGravy: hi :) | 16:19 | |
RabidGravy | rarr! | ||
yoleaux | 14:32Z <azawawi> RabidGravy: HTTP::UserAgent seems to be forcing lower-case HTTP header names. Any chance one can override that behavior? | ||
Woodi | nadim: I tried DDT yesterday and it failed tests on star 2016.01, known problem ? | ||
nadim | Woodi: can you please put it on github? all test pass here (tm). | 16:20 | |
Woodi: there will be another version next week with the synch and diff role in the distro. | 16:22 | ||
Woodi | nadim: you use R*201601 ? I tried it with panda, will try wit git clone | ||
nadim | I use perl6::version=2016.02-77-g855de77 | 16:23 | |
Woodi: note that I thought I'd push the latest diff branch for you but it failed two tests ;) will fix it now | 16:25 | ||
azawawi | RabidGravy: FROGGS fixed it. so ignore it :) | ||
RabidGravy | azawawi, cool | ||
Woodi | nadim: prove failed test 41, line 25... | 16:26 | |
azawawi | RabidGravy: like 1 min ago I said your name and then you joined #perl6. Coincidence? :) | ||
16:27
domidumont left
|
|||
RabidGravy | I am omniscient | 16:27 | |
nadim | Woodi: what file? | 16:28 | |
DrForr | RabidGravy eq Kibo. | ||
azawawi | RabidGravy: so what will happen to perl6 in 20 years from now? :) | 16:29 | |
timotimo | it'll be a bit faster than it is today | 16:30 | |
RabidGravy | :) | ||
only a bit mind, wouldn't want people to get over-excited | |||
timotimo | i forsee that code using native arrays and regular mathy operators will be almost the same speed as C-generated code | ||
azawawi | :) | 16:31 | |
RabidGravy | and I will have finally finished the couchdb nodule that I started almost a year ago | 16:32 | |
azawawi | travis-ci.org/azawawi/perl6-seleni.../116942097 # MacOS X Travis CI builds seems to be buffered a lot | ||
16:32
khw joined
|
|||
Woodi | nadim: t/41_type_callframe.t line 25 | 16:33 | |
16:34
FROGGS left
|
|||
nadim | Woodi: fixed in the latest. I'llupdate everything soon. | 16:34 | |
dalek | osystem: d3b4b81 | kmwallio++ | META.list: Add Acme::Skynet to ecosystem See github.com/kmwallio/Acme-Skynet |
16:41 | |
osystem: ac2ebd8 | RabidGravy++ | META.list: Merge pull request #173 from kmwallio/master Add Acme::Skynet to ecosystem |
|||
16:42
khw left
16:44
perlawhirl left
16:45
kaare_ left
|
|||
Woodi | Acme::Skynet ? .oO( T2000: Miss Connor, I just do my job... Pleas let me in ) | 16:47 | |
16:52
frithnanth left
17:03
azawawi left
17:08
FROGGS joined
17:11
perl6-newbie joined
17:20
zakharyas left
17:23
wamba left
17:25
telex left
17:26
araujo joined,
telex joined,
bdmatatu joined
17:27
araujo left
|
|||
Azry | How would you make a IO::Handle object out of a NativeCall function that returns a FILE* ? | 17:27 | |
perl6-newbie | how do I do foreach(1..100){} in perl6? | 17:28 | |
geekosaur | Azry, I don;t think you would unless you are *very* careful about how both the native functions and perl 6 use it | 17:29 | |
Azry | ha i can answer that perl6-newbie: for ^100; :D | 17:30 | |
perl6-newbie | thanks! | ||
geekosaur | Azry, the problem is that you're mixing buffering abstractions; libuv does one thing, libc stdio does something else, things can get *really confused* if each one is buffering separately | 17:32 | |
Azry | well i'm not yet very comfortable in all this :S | ||
geekosaur | doing it right would probably require that IO::Handle have different backends for libc stdio, libuv (current perl6/moar), etc. | 17:33 | |
psch | yeah, geekosaur says fits my knowledge there. as in, you'd probably have to also NC into libuv, stuff the FILE* in there and wrap what you get back into whatever exactly it is we do for IO::Handle!PIO | ||
+what | |||
that's assuming that libuv can take a FILE* and turn it into something it normally does things with | |||
Azry | i submitted a ticket on rt for this, i need to create a filehandle from a file descriptor, but i didn't want to wait :( | 17:34 | |
i guess that would be more of a ugly hack | |||
psch | definitely :) | ||
17:35
SCHAAP137 joined
17:36
itaipu joined
|
|||
AlexDaniel | perl6-newbie: well the answer is not entirely correct since ^100 is basically 0..99 | 17:36 | |
psch | Azry: maybe exposing what's been merged in libuv here github.com/joyent/libuv/pull/316 to NQP could work | ||
AlexDaniel | m: .say for ^10 | ||
camelia | rakudo-moar 57df3d: OUTPUT«0123456789» | ||
AlexDaniel | m: .say for 0..9 | ||
camelia | rakudo-moar 57df3d: OUTPUT«0123456789» | ||
AlexDaniel | m: .say for 1..10 | ||
camelia | rakudo-moar 57df3d: OUTPUT«12345678910» | ||
psch | Azry: but that'd involve a significant bit of moar hacking as well | 17:37 | |
well, the fact that the issue only covers half your use-case aside :/ | |||
Azry | i just started perl6, i'm definetely not ready for that yet =D | ||
psch | well, moar is C, NQP is minimal... ;) | ||
the language that is, although the code base mostly looks scarier than it really is | 17:38 | ||
well, except for the regex-y bits :) | |||
perl6-newbie | is perl6 really 10 times slower than perl5? | ||
e.g.: | |||
$ time /opt/rakudo-star-2016.01/bin/perl6 -e 'constant $FOO = 0; for 1..10_000_000 {}' # takes 2.5s on my macbook | |||
geekosaur | often, yes. getting it right came first, getting it fast is ongoing. | ||
perl6-newbie | $ time perl -e 'use constant FOO => 0; foreach (1..100_000_000){}' # takes 2.3s on my macbook | 17:39 | |
Woodi | perl6-newbie: 10x slower is good news for many of us :) | ||
perl6-newbie | lol :-) | ||
sjn | easy-to-understand > correct > fast | ||
psch | perl6-newbie: of note is that a bare perl6 program is more equal to a perl5 with Moose | ||
perl6-newbie: even if you don't do anything OO-y | 17:40 | ||
of course that's a reason, not an excuse :) | |||
perl6-newbie | it'll be interesting to see if that was a clever strategy to concentrate on other things than speed | 17:41 | |
AlexDaniel | perl6-newbie: it's a complex topic, actually | ||
timotimo | you do realize that 2016 is the year we're concentrating on speed, though? | 17:42 | |
psch | heh | ||
perl6-newbie | yeah, I heard that... but I always assumed it was a bit slower or twice as slow... but not 10x slower! | ||
AlexDaniel | perl6-newbie: e.g. in perl6 you can easily crunch something in parallel and you will end up doing it faster in terms of clock time | ||
perl6-newbie | :-) | ||
Woodi | perl6-newbie: actually Perl6 OO is faster then Perl5 Moose since few years (or was?) | ||
AlexDaniel | perl6-newbie: and with much less code than you would have to write in perl5 | ||
timotimo | perl6-newbie: you can try -> int $i {} instead of just {} and it'll become a bit faster | 17:43 | |
psch | gist.github.com/peschwa/58a33d7636656a0c4c33 | ||
psch .oO( is perl5 really 3 times slower than perl6? ) | |||
timotimo | crucially, we're apparently not inlining the block, which we totally should be able to | ||
AlexDaniel | perl6-newbie: but yeah, it is kinda true that it is slow-ish | ||
timotimo | psch: unfair comparison; you have to "use integer" in perl5 to get it to be fairer | 17:44 | |
psch | oh, wait, 4 times | ||
AlexDaniel | psch: wait, what if you use ++ ? | ||
psch | timotimo: "use integer" brings perl5 to 3.8s | ||
timotimo | in any case, microbenchmarks are a poor approximation of behavior in general, because it really accentuates problem spots we have. like invocation being much more expensive than it should be | 17:45 | |
psch | yeah, that's kind of my point here as well | ||
AlexDaniel: ++ brings perl5 to 5s and stays the same for perl6 :) | |||
timotimo | since the for loop perl6-newbie wrote is equivalent to the code psch pasted after static optimization, but psch's code doesn't have an invocation for every round 'round the loop, we get a drastic difference there | 17:46 | |
ugexe | why isnt IO::Socket an IO::Handle? | ||
Woodi | ugexe: IO::Socket is older ? | ||
RabidGravy | I wondered that before | ||
ugexe | rather: is there anything stopping us from making IO::Socket an IO::Handle | ||
AlexDaniel | psch: that's some really good nitpicking there :) | 17:47 | |
perl6-newbie | my worry is that it may only be possible to optimize perl6 so far -- due to its architecture -- and e.g. the for loop I posted my never get close in speed to perl5 ? | ||
AlexDaniel | psch: I love it | ||
ugexe | it would allowa nice abstraction between sockets, files, and pipes then | 17:48 | |
AlexDaniel | perl6-newbie: all things that I know so far are suggesting otherwise | ||
timotimo | perl6-newbie: the for loop you've pasted can (and probably will) become exactly as fast as what psch posted | ||
AlexDaniel | perl6-newbie: in fact, if you follow commit log you'll see 10x-like speedups for certain small things | ||
geekosaur | perl6-newbie, I think it's entirely possible, it just hasn't been done because people have been concentrating on getting stuff working and usable rather than on making it fast | 17:49 | |
the making it fast part, as I said, is ongoing. literally every day there's at least one commit making something significantly faster | |||
perl6-newbie | sounds good... I will make a note of those loops and try them again later in the year and see what has happened | ||
RabidGravy | actually as far as I'm concerned questions of speed are somewhat moot anyway, the only useful metric for me is "fast enough" and I find that it is fast enough for a lot of things | ||
geekosaur | there's a *lot* of those "somethings" to speed up, though | ||
AlexDaniel | by the way, are there any plans for JIT on ARM? | 17:50 | |
RabidGravy | I'd love to see that | ||
timotimo | AlexDaniel: if you build it, we'll have it | ||
same goes for RabidGravy | |||
AlexDaniel | or what is blocking it? | ||
timotimo | as far as i know, DynASM already supports ARM | ||
psch | lizmat++ does a lot of making things fast | 17:51 | |
timotimo | perl6-newbie: 6guts.wordpress.com/2016/03/06/dig...lity-work/ - have you seen this? | 17:52 | |
mst | perl6-newbie: if anything, the lack of typing in perl5 means that rakudo should be able to be faster | ||
RabidGravy | right now I'm trying to remember what the MIDI clock meter thing for linux is, then we can find out if it is fast enough to generate accurate MIDI clocks | 17:53 | |
timotimo | mst: though that is really only true for native types at the moment, like "int", "num" and "str" | ||
mst | timotimo: notice my use of the future tense. it's almost as if grammar can mean things :D | 17:54 | |
17:55
araujo joined
|
|||
timotimo | statically declared types don't mean as much to perl6 as to java or c++, though | 17:55 | |
and unless we get around to making our classes "closed", or otherwise preventing mix-ins and other shenanigans, i'd assume it won't help a lot for a long time | |||
17:55
araujo left
|
|||
timotimo | we really get our big benefits from observing actual types at run-time, and reacting to that with specialization and jitting | 17:56 | |
17:58
wamba joined,
virtualsue joined
18:00
firstdayonthejob joined
18:01
domidumont joined
|
|||
perl6-newbie | thanks for the link on performance work... I wonder how quickly that work will filter into the production perl6? | 18:03 | |
timotimo | the things he talked about are already in. they were already in when that post was posted | 18:04 | |
18:04
bjz_ joined
|
|||
timotimo | so ... "quickly", i guess | 18:04 | |
perl6-newbie | it's also interesting to note how slow perl5 when running the same 10M loop in 'OO mode' | 18:05 | |
18:06
bjz left
|
|||
perl6-newbie | hmm... if it's already 'in' and the 10M perl6 loop in the blog was running is 0.6s then why did my perl6 10M loop take 2.5s doing nothing in the loop body? | 18:06 | |
timotimo | what is OO mode? | ||
RabidGravy | let's put it like this : 6 months ago I could just about stream audio at 128Kbps from a Perl 6 program, now I can *easily* stream at 320 | ||
*that's* fast enough | |||
psch | perl6-newbie: for and loop (and while) optimize differently well (currently) | 18:07 | |
perl6-newbie: note that my microbench used while and was 4 times faster than perl5 | |||
perl6-newbie | he says in the blog post "Just to put that figure on the map a little, I wrote the following Perl 5 program, which I hope is reasonably equivalent" ... | ||
RabidGravy | also *now* and and rakudo 2016-01 are different | ||
timotimo | perl6-newbie: i'm willing to bet the loop body in jnthn's code was inlined, whereas your (the empty loop body) wasn't | 18:08 | |
perl6-newbie | makes sense | 18:09 | |
timotimo | and also, another difference is that the empty loop body you had got the loop variable passed to it | ||
Azry | since i can't work on my module util my ticket is resolved, is there a list somewhere of modules that people would like to have ? | ||
timotimo | whereas the loop (...) { } one doesn't have such a thing going on | ||
psch | Azry: | 18:10 | |
gr | |||
github.com/perl6/perl6-most-wanted...modules.md | |||
that | |||
18:10
bdmatatu left,
yqt joined
|
|||
Azry | looks good thanks =) | 18:11 | |
timotimo | perl6-newbie: did you see the difference between "for 1..10_000_000 {}" and "for 1..10_000_000 -> int $i {}"? the second one is quite noticably faster | ||
RabidGravy | I'd like http digest authentication | ||
timotimo | i find http indigestible | 18:12 | |
perl6-newbie | it goes about 0.1 seconds faster for me with the -> int $i | 18:13 | |
RabidGravy | because you haven't got a new enough rakudo | ||
perl6-newbie | hmmm... I literally just downloaded it this morning... so do you mean a non-production version? | 18:14 | |
timotimo | probably | ||
if i understand correctly, we're getting the 2016.03 compiler release this weekend, and then we'll see about a rakudo star release | 18:15 | ||
18:15
colomon joined
|
|||
perl6-newbie | $ time /opt/rakudo-star-2016.01/bin/perl6 -e 'constant $FOO = 0; loop (my $i = 1; $i <= 10_000_000; $i++) {}' # takes 1.4s on my macbook | 18:18 | |
$ time /opt/rakudo-star-2016.01/bin/perl6 -e 'constant $FOO = 0; loop (my $i = 1; $i <= 10_000_000; $i++) {say $_ if $FOO;}' # takes 4.2s on my macbook | 18:20 | ||
so perl6 does not do constant folder like perl5 does? | |||
18:21
pmurias joined
|
|||
psch | fwiw, the first one is 1.6s here, and with adding the type 'int' it's 0.26 | 18:21 | |
the constant folding we do is turning e.g. 4 div 2 into 2 at compile time, afaik | 18:22 | ||
Azry | these examples are 7s and 14s on my freebsd | ||
geekosaur | perl5's optimization of that does not yet exist | ||
psch | not sure where in that example constant folding applies, anyway vOv | ||
18:22
virtualsue left
18:23
mrsolo left,
virtualsue joined
|
|||
timotimo | it could throw out the "say $_" | 18:23 | |
thus making both programs equivalent in code | |||
there's probably some $_-saving stuff in there, too | |||
psch | that's constant folding too? huh | ||
timotimo | well, in this case it'd be dead code elimination, really | ||
18:24
mrsolo joined
|
|||
perl6-newbie | $ time /opt/rakudo-star-2016.01/bin/perl6 -e 'constant $FOO = 0; loop (my int $i = 1; $i <= 10_000_000; $i++) {}' # takes 0.2s on my macbook | 18:25 | |
nice | |||
$ time /opt/rakudo-star-2016.01/bin/perl6 -e 'constant $FOO = 0; loop (my int $i = 1; $i <= 10_000_000; $i++) {say $_ if $FOO;}' # takes 2.6s on my macbook | |||
psch | yeah, in the end this is all meaningless microbenchmarks... :) | 18:26 | |
perl6-newbie | in perl5 then the say $_ if $FOO; statement would be optimized away because of constant folding... perl5 is one of the few languages to do that... | ||
mst | say $_ if FOO; would | 18:27 | |
perl6-newbie | surely the 2.6s suggests that the say $_ if $FOO; is not being optimized away? | 18:28 | |
psch | patches welcome :) | 18:29 | |
perl6-newbie | but I guess it could be that the loop optimization is still so flaky that it did get optimized away but as a result the loop didn't get optimized? | ||
18:30
espadrine_ left
|
|||
timotimo | you can find out all of this with our introspective tools | 18:30 | |
you can for example compare the ast we generate statically with --target=ast and --target=optimize | |||
pmurias | mst: the non-native type checks are mostly a hindrance for performance, what should hopefully allow Perl 6 to be really fast in the future is that a lot more things are lexical then in Perl 5 and that the implemementation is not exposed by XS | ||
timotimo | --profile will not terribly likely be helpful here | 18:31 | |
but you can set the env var MVM_SPESH_LOG=foobar.txt to get low-level bytecode that is run, that'll give you quite an amount of information about what's going on | |||
18:33
Actualeyes left,
wamba left,
dwarring joined
18:36
cdg left
|
|||
perl6-newbie | wow setting MVM_SPESH_LOG causes a fire hose of info :-) | 18:37 | |
but it's not intention revealing enough -- for me at least -- to discover if the say statement was infact optimized away :-( | 18:38 | ||
timotimo | yes, it really is a firehose | 18:39 | |
the thing is, that spesh optimizes a crapton of stuff in the compiler during startup :) | |||
so you get to see all of that, too | |||
you probably just want to look at the last 5% | 18:40 | ||
or start from the bottom actually | |||
anyway, gotta go! | |||
perl6-newbie | thanks ttfn | ||
18:43
sjoshi joined,
lostinfog joined
18:45
perl6-newbie left
18:47
rindolf left
18:50
sufrostico left
18:52
sufrostico joined
|
|||
timotimo | god damn it, now i've got weird al's UHF stuck in my head | 18:55 | |
RabidGravy | timotimo, I just remembered another lightweight sequencer for Linux - "non-sequencer" | 18:56 | |
but I still haven't found anything that will tell me if this midi clock I'm sending is anything near right | 18:57 | ||
but it definitely is sending it | |||
18:58
nadim left
|
|||
timotimo | so all you need to know is if the timing is all right? | 19:00 | |
send it out via an ethernet jack or midi plug and hook up an oscilloscope? | 19:01 | ||
RabidGravy | Oh I've got lots of options on the hardware front, I'd just plug it in the MPC1000 via MIDI and it would tell me straight away ;-) | 19:04 | |
19:05
SCHAAP137 left
|
|||
RabidGravy | but that would entail remembering where I put all the midi cables | 19:08 | |
psch | hah, i don't have any midi cables | 19:09 | |
but then also don't have any hw samplers or synths vOv | |||
19:09
CQ joined
|
|||
RabidGravy | yeah I have somewhat of a hardware addiction | 19:10 | |
19:11
rindolf joined
|
|||
psch | eh, if it fits somewhere in the room and is affordable, why not :) | 19:12 | |
19:14
sjoshi left
19:15
hankache joined,
chansen_ left,
chansen_ joined
|
|||
RabidGravy | www.facebook.com/photo.php?fbid=10...5c4c84c7be is a taste | 19:15 | |
it's a bit tidier than that at the moment | 19:16 | ||
psch | "Sorry, this content isn't available right now" | ||
19:17
nadim joined
19:18
yqt left
|
|||
RabidGravy | weird | 19:19 | |
rabidgravy.com/stuff.jpg | 19:21 | ||
psch | well, i could maybe guess what half of those boxes do... :) | 19:23 | |
RabidGravy | mostly things that mess sound up and a drum machine, two bass synths and a monomachine | 19:27 | |
rindolf | Hi all. | 19:32 | |
rindolf wonders if he should rebuild rakudobrew to see if perl6/moar got faster recently. | 19:33 | ||
19:35
lichtkind_ joined,
spider-mario joined
19:38
mrsolo left
19:39
lichtkind__ left
19:40
mrsolo joined
|
|||
Hotkeys | rindolf: i just rebuild all the time | 19:49 | |
AlexDaniel | Hotkeys: in a hope that it gets faster after every rebuild? :) | 19:52 | |
19:52
cognominal joined
|
|||
Hotkeys | nah just cause | 19:52 | |
why not | |||
19:53
khw joined
19:55
lustlife` joined
|
|||
perlpilot rebuilds every so often too (once a week or so) | 19:57 | ||
19:58
lustlife left
|
|||
RabidGravy | Sunday usually and smoke test all my modules | 19:58 | |
has proved to be a reasonable canary | 19:59 | ||
AlexDaniel | m: {sum @^a.sort Z*[R,] @^b.sort}((1, 3, -5),(-2, 4, 1)).say | ||
camelia | rakudo-moar 57df3d: OUTPUT«-25» | ||
AlexDaniel | Hotkeys: 3 bytes shorter or something | 20:00 | |
20:00
nadim left
|
|||
AlexDaniel | m: {(grep {.comb.sum==.².comb.sum},1..*)[$_]}(13).say | 20:02 | |
camelia | rakudo-moar 57df3d: OUTPUT«189» | ||
AlexDaniel | Hotkeys: another 3 bytes | ||
psch | ...those do the same? oO | 20:03 | |
AlexDaniel | psch: no :D | ||
psch | that's reassuring :) | ||
AlexDaniel | I love this .² thing :) | 20:04 | |
psch | yeah, it's neat | 20:05 | |
Hotkeys | you can do it with any postfix I think | ||
or am i wrong | |||
probably wrong | |||
psch | m: 1.++.say | ||
camelia | rakudo-moar 57df3d: OUTPUT«Cannot call postfix:<++>(Int); none of these signatures match: (Mu:D $a is rw) (Mu:U $a is rw) (Int:D $a is rw) (int $a is rw) (Bool:U $a is rw) (Bool:D $a is rw) (Num:D $a is rw) (Num:U $a is rw) (num …» | ||
cognominal | that's $_ ** 2 ? | ||
AlexDaniel | yeah | 20:06 | |
psch | cognominal: yeah, superscripts Just Work | ||
m: say 2²² | |||
camelia | rakudo-moar 57df3d: OUTPUT«4194304» | ||
AlexDaniel | m: say ²²² # fun, but don't rely on this | ||
camelia | rakudo-moar 57df3d: OUTPUT«4194304» | ||
cognominal | ...and indices for arrays ? | ||
Hotkeys | no subscripts | 20:07 | |
psch | that'd be subscripts, no? | ||
i don't think we have that | |||
AlexDaniel | no subscripts yet :( | ||
cognominal | ok | ||
Hotkeys | subscripts are hard | ||
AlexDaniel | in fact, most people say that subscript should not work like array subscripts :( | ||
Hotkeys | I'd prefer having them for vars | ||
AlexDaniel | s | ||
Hotkeys | than having them for arrays | ||
psch | yeah, i'd rather have them allowed in ident too | ||
AlexDaniel | look ↑ | ||
if you are using numbers in the end of the variable name, perhaps consider using an array? | 20:08 | ||
cognominal | m: say 3 ³ ³ | 20:09 | |
camelia | rakudo-moar 57df3d: OUTPUT«5===SORRY!5=== Error while compiling /tmp/PPhKeN_Qx9Confusedat /tmp/PPhKeN_Qx9:1------> 3say 37⏏5 ³ ³ expecting any of: infix infix stopper postfix statement end statement modifie…» | ||
cognominal | m: say 3³³ | ||
camelia | rakudo-moar 57df3d: OUTPUT«5559060566555523» | ||
AlexDaniel | m: say 3\ ³³ | ||
camelia | rakudo-moar 57df3d: OUTPUT«5559060566555523» | ||
psch | m: say 3\ .\ ³ | 20:10 | |
camelia | rakudo-moar 57df3d: OUTPUT«27» | ||
psch | m: say 2².² | ||
camelia | rakudo-moar 57df3d: OUTPUT«16» | ||
psch | that's actually cool | ||
dot as parens replacement there | |||
AlexDaniel | m: say 2²\ ² | 20:11 | |
camelia | rakudo-moar 57df3d: OUTPUT«16» | ||
AlexDaniel | oops | ||
ah, it works | |||
psch | yeah, toss the space and it's the same amount of bytes | ||
AlexDaniel | m: say 2²\² | ||
camelia | rakudo-moar 57df3d: OUTPUT«16» | ||
AlexDaniel | right | ||
psch | m: say 2² .\ 2 | 20:12 | |
camelia | rakudo-moar 57df3d: OUTPUT«5===SORRY!5=== Error while compiling /tmp/KAlUVEyrODUnsupported use of . to concatenate strings; in Perl 6 please use ~at /tmp/KAlUVEyrOD:1------> 3say 2² .7⏏5\ 2» | ||
psch | hm | ||
m: say 2 .\ 2 | |||
camelia | rakudo-moar 57df3d: OUTPUT«5===SORRY!5=== Error while compiling /tmp/cHULsZMbJuUnsupported use of . to concatenate strings; in Perl 6 please use ~at /tmp/cHULsZMbJu:1------> 3say 2 .7⏏5\ 2» | ||
psch | m: 2 .say | ||
camelia | rakudo-moar 57df3d: OUTPUT«2» | ||
AlexDaniel | m: say 2 \. 2 | ||
camelia | rakudo-moar 57df3d: OUTPUT«5===SORRY!5=== Error while compiling /tmp/6LoPmTnFNHConfusedat /tmp/6LoPmTnFNH:1------> 3say 27⏏5 \. 2 expecting any of: infix infix stopper postfix statement end statement modi…» | ||
psch | that confuses me | ||
Hotkeys | m: say 2.\ 2 | ||
camelia | rakudo-moar 57df3d: OUTPUT«5===SORRY!5=== Error while compiling /tmp/2Zj0RKMrMiUnsupported use of . to concatenate strings; in Perl 6 please use ~at /tmp/2Zj0RKMrMi:1------> 3say 2.7⏏5\ 2» | ||
AlexDaniel | m: say 2\ \. 2 | ||
camelia | rakudo-moar 57df3d: OUTPUT«5===SORRY!5=== Error while compiling /tmp/LIN9xmTEqRBogus postfixat /tmp/LIN9xmTEqR:1------> 3say 27⏏5\ \. 2 expecting any of: infix infix stopper postfix statement end statemen…» | ||
psch | i mean, methodop can have spaces before | ||
Hotkeys | m: say 2\. 2 | ||
camelia | rakudo-moar 57df3d: OUTPUT«5===SORRY!5=== Error while compiling /tmp/rlfMbGjOvZConfusedat /tmp/rlfMbGjOvZ:1------> 3say 2\.7⏏5 2 expecting any of: dotty method or postfix» | ||
psch | except for literals? | ||
m: "foo" .say | |||
camelia | rakudo-moar 57df3d: OUTPUT«foo» | ||
AlexDaniel | psch: it is often half-broken | ||
psch | or just numerics..? | ||
ah | |||
AlexDaniel | m: 42 . WHAT.say | 20:13 | |
camelia | rakudo-moar 57df3d: OUTPUT«===SORRY!===Method call must either supply a name or have a child node that evaluates to the name» | ||
Hotkeys | I was under the impression that if you wanted space like that you had to use a \ | ||
20:13
johnP joined
|
|||
Hotkeys | regardless | 20:13 | |
AlexDaniel | WHAT is special, I know, but that's just another way of breaking . | ||
20:13
virtualsue left
|
|||
AlexDaniel | m: 42 . say | 20:13 | |
camelia | rakudo-moar 57df3d: OUTPUT«42» | ||
AlexDaniel | Hotkeys: there's infix . | ||
20:14
domidumont left,
virtualsue joined,
darutoko left
|
|||
AlexDaniel | m: {(e**(i*$^x)).im}(pi).sa | 20:14 | |
camelia | rakudo-moar 57df3d: OUTPUT«Method 'sa' not found for invocant of class 'Num' in block <unit> at /tmp/maQzPEYllf line 1» | ||
AlexDaniel | m: {(e**(i*$^x)).im}(pi).say | ||
camelia | rakudo-moar 57df3d: OUTPUT«1.22464679914735e-16» | ||
AlexDaniel | m: {(e**(i*$_)).im}(pi).say | ||
camelia | rakudo-moar 57df3d: OUTPUT«1.22464679914735e-16» | ||
AlexDaniel | Hotkeys: -1 byte :) | 20:15 | |
johnP | Hello guys.. I'm a student looking into perl6, I wrote a simple script that read 10000 numbers from a text file, sort them and print them back to the screen. I noticed that the same thing done in perl 5 takes less than a second. in perl6 however it takes 29sec. | ||
Hotkeys | oh | ||
AlexDaniel | johnP: which perl 6 version? | ||
johnP: or rather which rakudo version | |||
Hotkeys | idk why I used $^x there | 20:16 | |
timotimo | johnP: yeah, sometimes perl 6 can be painfully slow, but it's very possible to speed things up by writing things with better selection of primitives | ||
johnP | This is Rakudo version 2016.02-180-g57df3dd built on MoarVM version 2016.02-33-g1e3d2ac | ||
implementing Perl 6.c. | |||
AlexDaniel | johnP: and perhaps you could show us the code so that we can suggest some improvements :) | ||
timotimo | ah, well, at least your rakudo isn't out of date :) | ||
johnP | I'll put the code online and provide a link just one sec | 20:17 | |
timotimo | thanks | ||
if you want to do your own performance tuning, using "perl6 --profile yourscript.p6" is a good place to start to see if anything much sticks out | |||
psch | johnP: keep in mind that perl6 had about 4 months of "make it fast" (if that) while perl5 had upward of 10 years of "make it fast" | ||
20:17
yqt joined
|
|||
timotimo | i'd say we've had a few more months of that, but only few people working on that during these months | 20:18 | |
psch | eh, arguable :) | ||
AlexDaniel | yeah, we should probably consider cloning jnthn and lizmat | ||
psch | i mean, yes, lizmat and jnthn did perf work before 6.c | ||
but they also did some amount of semantic work after 6.c | |||
timotimo doesn't make the list ;_; | 20:19 | ||
psch | in the end the mistake i made was probably supplying an actual number... :) | ||
as in, "we had months, p5 had years" still rings true | |||
timotimo | yes | ||
johnP | hostcode.sourceforge.net/view/5106 | 20:20 | |
psch | timotimo: your perf work is mostly in mvm directly, isn't it? i admit i tend to overlook that... | ||
AlexDaniel | m: {e**(i*$_) .im}(pi).say | ||
camelia | rakudo-moar 57df3d: OUTPUT«1.22464679914735e-16» | ||
timotimo | p6 performance still feels to me like there's a few tarpits you can accidentally dip your toe into, and suddenly you get 100x-10000x slower | ||
AlexDaniel | Hotkeys: ↑ -1 more byte | ||
timotimo | johnP: first thing that sticks out to me is you probably want to numify the numbers from the file once up front | 20:21 | |
then you don't have to use <=> in your sort | |||
and using $^a <=> $^b is likely a few times slower than just { +$^a } | |||
psch | m: say "2" < "3"; say now - BEGIN now | ||
camelia | rakudo-moar 57df3d: OUTPUT«True0.0106056» | ||
psch | m: say 2 < 3; say now - BEGIN now | 20:22 | |
camelia | rakudo-moar 57df3d: OUTPUT«True0.0111133» | ||
psch snickers | |||
timotimo | lol, well done :) | ||
watch out, those comparisons would potentially get compile-time evaluated | |||
psch | yeah, i don't expect anything significant from running that repeatedly | 20:23 | |
and i'd guess 5% isn't really something to write home about with camelia's host either | |||
johnP | timotimo your advice helped | ||
psch | especially considering there's network latency involved | ||
timotimo | cool. by how much? :) | ||
johnP | now it takes 3 sec | ||
AlexDaniel | that's not too bad :) | 20:24 | |
johnP | so quite a lot | ||
timotimo | how big are those numbers usually? | ||
there's 10k of them, right? | |||
are they only integers? or would they pass as rational numbers perhaps? | |||
AlexDaniel | johnP: hm, could you provide the file itself too? So that I can play with it | 20:25 | |
timotimo | it's probably also a whole lot faster to say @array.join("\n") | ||
rather than to print each one in turn | |||
johnP | sure | ||
Hotkeys | I was thinking that | ||
wasn't sure though | |||
johnP | this is the link for my perl5 similar script hostcode.sourceforge.net/view/5107 | ||
AlexDaniel | I didn't know that sourceforge has it's own snippet thingy | 20:26 | |
maybe I should add it to camelia too… except that I don't really want to support sourceforge in any way now | |||
RabidGravy | they had to counter github somehow | ||
Hotkeys | I didn't know people still used sourceforge ;p | ||
RabidGravy | I don't think I can even remember my sourceforge login | 20:27 | |
johnP | AlexDaniel hostcode.sourceforge.net/view/5108 | ||
AlexDaniel | Hotkeys: they do, in fact they usually refuse to move elsewhere when you suggest that | ||
timotimo | why would we add sourceforge pasting, but not, for example, sprunge? | ||
AlexDaniel | timotimo: which sprunge? | ||
timotimo | the sprunge | ||
AlexDaniel | timotimo: camelia already supports github gists, bitbucket snippets and gitlab snipeets | ||
timotimo | oh, i didn't knw that | 20:28 | |
AlexDaniel | oops, snippets | ||
I can add sprunge too, if you think that it is commonly used | |||
timotimo | i like sprunge | ||
psch | well there's data to check for the most used pastebins in the clog... | ||
timotimo | good point | ||
AlexDaniel | psch: if you make a list then I'll implement all of them | 20:29 | |
RabidGravy | I'd like github gist a lot more if the pasting was a lot easier | ||
Hotkeys | '(slurp $path~'\5108.txt').lines.sort.join("\n").say; say now - INIT now' gave me half a second | ||
but that might just be hardware differences | |||
timotimo | Hotkeys: you forgot to intify | 20:30 | |
Hotkeys | oh wait | ||
yeah | |||
johnP | will try | ||
timotimo | that only works by accident because the numbers are same-length | ||
oh, they are not, though | |||
psch | AlexDaniel: ...not sure i'm actually up to that :) considering there's checking all the urls involved... | ||
hankache | johnP print_array(sort_file(readfile())); can be replaced with sort_file(readfile())>>.say; | ||
timotimo | hankache: no, >> messes up your ordering | 20:31 | |
hankache | timotimo hyper is still broken? | ||
Hotkeys | with the proper sorting it gave me about a second | ||
but | |||
timotimo | hankache: no | ||
hankache: it's by design. though the mess-up-order-intentionally code has been removed some months ago | 20:32 | ||
Hotkeys | looks ordered to me | ||
timotimo | do not rely on ordering of what hyperoperators do | ||
hankache | but hyper should preserve order | ||
Hotkeys | fair | ||
no | |||
johnP | perl5 version is faster than python on my machine is: real0m0.028s | ||
timotimo | hankache: order, but not order of execution. which is what you get when you .say | ||
Hotkeys | hyper preserves the order eventually | ||
timotimo | i mean, when you >>.say | ||
Hotkeys | but not e- yeah | ||
I also did (+«(slurp $path~'\5108.txt').lines).sort.join("\n").say for fun | 20:33 | ||
which also did about a second | |||
hankache | timotimo ok | ||
timotimo | my profile shows 55% time spent in readfile, 29% in sort_file and 15% time spent in print_array | 20:34 | |
i'm not sure why, but 10% overall is spent inside a Bool method | 20:35 | ||
lizmat | which one? | ||
timotimo | line 914 | 20:36 | |
that's probably Mu? | |||
yeah, it looks like it's the proto method Bool | |||
lizmat | indeed | 20:37 | |
perhaps it would help to change the signature from (|) to () ? | |||
johnP | Hotkeys could u show me the snippet you used? | ||
Hotkeys | (slurp $path~'\5108.txt').lines.sort({+$^a}).join("\n").say | 20:38 | |
$path being the folder I had it in | |||
timotimo | right, we're not really expecting to pass any arguments at all there | ||
i also see find_best_dispatchee is at it again ... inside method Numeric | 20:39 | ||
20:39
itaipu left
|
|||
timotimo | in hotkeys' snippet i also get find_best_dispatchee in the routine list ... 2nd place by exclusive time :| | 20:41 | |
and actually method Bool is creating a gigantic amount of CallCapture objects | 20:42 | ||
psch | ("1\n2\n3\n4").lines>>.&[+].sort.join("\n").say # explicit numifying instead of letting sort do it | ||
probably won't do much for perf though | 20:43 | ||
timotimo | even though the garbage collection time is only about 10%, it'd probably be worth to make Bool not allocate so much | ||
psch | well, and neither for clarity | ||
johnP | with Hotkeys code I get 2 secs | ||
psch | although i suspect you could replace the method-call-prefix:<+> with .Int hah | ||
timotimo | psch: i don't expect >>. to give very good performance as opposed to .map(+*) for example | ||
psch | timotimo: oh, yeah, of course not | ||
timotimo | also, i expect using .Int is probably more direct than prefix:<+> or even infix:<+> | 20:44 | |
psch | timotimo: i was just thinking about the closure to sort... | ||
timotimo: in any case, if anything of that sort .map is probably the better call | |||
psch doesn't often think in term of performance | |||
mostly clarity, brevity or fanciness :) | |||
20:47
zakharyas joined
|
|||
timotimo | johnP: tell us again, how fast is perl5 for this task? | 20:47 | |
20:47
cdg joined
|
|||
RabidGravy | I tend to think ahead too much when I am writing code so continuously refactoring for things that I haven't yet started implementing | 20:47 | |
then clarity | 20:48 | ||
johnP | on my machine with the code I posted for perl5 real0m0.027s | ||
timotimo | yikes, that's still quite a bit faster | ||
RabidGravy | and I only care about performance if it isn't fast enough to actually work | ||
johnP | considering my perl is not very efficient.. | 20:49 | |
timotimo | i would have suggested trying to write the same task in nqp, but we don't expose p6sort to nqp at all | ||
psch | nqp-m: nqp::sort(1,2,3) | ||
camelia | nqp-moarvm: OUTPUT«No registered operation handler for 'sort' at gen/moar/stage2/QAST.nqp:1584 (/home/camelia/rakudo-m-inst-2/share/nqp/lib/QAST.moarvm:compile_op:64) from gen/moar/stage2/QAST.nqp:5797 (/home/camelia/rakudo-m-inst-2/share/nqp/lib/QAST.moarvm:compile_node:2…» | ||
20:49
CurtisOvidPoe_ left
|
|||
psch | mhm, we don't have sort at that level do we? | 20:49 | |
timotimo | that's what i just said :) | ||
psch | just write mvm bytecode manually..? :P | ||
johnP | do you think perl6 will be faster in the near future? | 20:50 | |
timotimo | psch: why would you ever do that? :) | ||
perlpilot | johnP: I know it will be faster (just not at everything) | ||
timotimo | johnP: yeah, we're working on performance in 2016 | ||
we didn't do much performance work yet | |||
psch | timotimo: honestly, i think nobody would, ever. i'm pretty sure it's a terrible idea :) | ||
johnP | so are you guys the actual developers of perl6? | 20:51 | |
timotimo | no, we've done so in the past for tests while we were building moarvm | ||
well, i'm not part of that effort, i came in way late | |||
but also, brrt wrote mvm bytecode through nqp code in the early stages of the jit, i think | |||
psch | johnP: i for one am somewhat of an occassional contributor. timotimo is quite a bit more involved, especially with the prefered underlying vm, which is moarvm | 20:52 | |
timotimo | johnP: the barrier of entry to perl6 core development isn't very high, as a big portion of rakudo is written in perl6 and the rest is written in nqp, which is "not quite perl6" | ||
perlpilot | timotimo: But when you need a low level sort op .... ;) | ||
AlexDaniel | johnP: most people here do some kind of contributions :) | 20:53 | |
johnP | I'm kinda flattered :-) | ||
RabidGravy | except me I just heckle from the sidelines | ||
timotimo | github.com/rakudo/rakudo/blob/nom/...s.nqp#L284 - this is our implementation of p6sort. it's not that low level. | ||
AlexDaniel | well, maybe TimToady should say hi ;) | ||
johnP | thanks for the help anyway | ||
perlpilot | johnP: #p6dev is where the development discussion happens these days. We try to keep #perl6 for the users. | ||
timotimo | i think those for loops, the one at the beginning and the one at the end, really could be turned into a postfix-while without curly braces for a measurable benefit | 20:54 | |
20:55
TEttinger joined,
nadim joined
20:58
nadim left,
nadim joined
20:59
virtualsue left
|
|||
perlpilot | I wonder how optimized p6sort becomes in real code | 20:59 | |
timotimo | not at all. it's called rather than inlined | ||
i think especially the invocation of "comparator" over and over can cost us a lot of potential performance when all we're doing is compare int objects, for example | |||
20:59
virtualsue joined
|
|||
perlpilot | yep | 20:59 | |
AlexDaniel | Hotkeys: you did not apply suggested changes, didn't you? :) | ||
20:59
vendethiel joined
21:00
itaipu joined
|
|||
timotimo | it's feasible to build another op that specializes on having only Int objects | 21:00 | |
well, we're doing more than one pass over the data anyway. we can do analysis in the first pass | 21:01 | ||
if for example it turns out that every object in there is an Int, we can enter a different implementation that uses nqp::islt_I instead of a comparator | |||
(though of course only if "the default" comparator is used, which has to be flagged to the op somehow) | |||
in general, please consider p6sort and the sort methods and subs completely re-writable as far as i'm concerned | 21:02 | ||
as long as the API stays the same | |||
perlpilot: do you want to tackle that project? :) | |||
psch | hm | ||
perlpilot | My problem with hacking on P6 continues to be finding time. :( | 21:03 | |
psch | wouldn't we also want a Str-specialized p6sort case? | 21:04 | |
as in, we have two steps: (1) default comparator? if yes (2) consistent typing which a low-level comparison op exists for? | 21:05 | ||
nqp-m: say(nqp::islt("foo", "fop")) | 21:06 | ||
camelia | nqp-moarvm: OUTPUT«No registered operation handler for 'islt' at gen/moar/stage2/QAST.nqp:1584 (/home/camelia/rakudo-m-inst-2/share/nqp/lib/QAST.moarvm:compile_op:64) from gen/moar/stage2/QAST.nqp:5797 (/home/camelia/rakudo-m-inst-2/share/nqp/lib/QAST.moarvm:compile_node:2…» | ||
psch | ...huh | ||
there *is* islt in ops.markdown vOv | |||
ah but i confused those >_> | |||
so nevermind | 21:07 | ||
'cause we do not actually have lowlevel relative str comparison | |||
psch stops monologuing | |||
johnP | is parrot VM still in use for perl? or everything has been moved to moar? | 21:08 | |
perlpilot | no, parrot isn't used | 21:09 | |
21:09
skids left
21:11
adu joined
|
|||
mst | johnP: parrot was a dead end half a decade ago | 21:12 | |
AlexDaniel | is it even alive? | ||
mst | johnP: it has now been excised entirely | ||
AlexDaniel | :) | ||
mst | AlexDaniel: I think every so often somebody nails it back to the perch and cuts a release, but I can't say I've cared enough to check in quite some time | ||
21:13
nadim left
|
|||
lizmat | the last release was pre-Christmas, afaik | 21:13 | |
21:13
zakharyas left
|
|||
johnP | ok I'm gonna go.. pleased to have met you guys. Thanks a lot for the help. | 21:14 | |
21:14
pierrot left
21:15
johnP left
|
|||
perlpilot | I think I still get email from the parrot mailing list, but the only thing I remember seeing lately is the monthly reminder | 21:15 | |
AlexDaniel | .oO( monthly reminder? “this project is still dead. Thanks for reading this email” ) |
||
lizmat | rakudo.org is dead for me | 21:16 | |
argh | |||
I meant: parrot.org | |||
21:16
hankache left,
zakharyas joined
|
|||
mst | lizmat: whereas in my case it's more s/for/to/ :D | 21:17 | |
perlpilot | just checked ... the only parrot email I have since 2014 is from Parrot Raiser on the Perl6 mailing list. | 21:18 | |
21:18
rindolf left
21:22
pochi joined
|
|||
timotimo | psch: excuse me, we don't have string comparison in our nqp ops? | 21:23 | |
21:23
CQ2 joined
|
|||
lizmat | iseq_s | 21:23 | |
timotimo | oh, we were talking about sorting and such | 21:24 | |
so we'd want gt, lt, and friends | |||
psch | timotimo: right, *relative* string comparison | ||
21:24
clkao_ joined
|
|||
lizmat | m: use nqp; my int $a = 1; my int $b = 2; dd nqp::cmp_i($a,$b) | 21:25 | |
camelia | rakudo-moar 57df3d: OUTPUT«-1» | ||
psch | we have cmp_s | ||
timotimo | we also have isgt_s | ||
21:25
Amnez777 left,
clkao left,
ribasushi left,
pochi_ left,
dsp-_ joined
|
|||
psch | huh | 21:25 | |
i didn't see them in the list on top, my bad | |||
21:25
pmurias left,
CQ left,
[ptc] left,
cfloare left,
Fleurety left,
diakopter left,
btyler left,
mst left,
eyck left,
au left
|
|||
psch | i guess in that case the approach could still work | 21:25 | |
21:25
CQ2 is now known as CQ,
btyler joined,
eyck_ joined,
mst joined,
au joined,
krakan joined,
pmurias joined
21:26
clkao_ is now known as clkao
|
|||
timotimo | see also Str.pm | 21:26 | |
21:26
cfloare joined,
ssm left,
atta left
|
|||
psch | yeah i was looking at ops.markdown but didn't see them | 21:26 | |
21:26
Amnez777 joined,
diakopter joined
|
|||
psch | i'll confidently blame it on the time and day :) | 21:26 | |
21:27
ssm joined
21:28
[ptc] joined
21:29
Fleurety joined,
ribasushi joined
|
|||
vendethiel | o/, #perl6 :) | 21:32 | |
21:33
atta joined
|
|||
timotimo | yo vendethiel, how are you today? | 21:35 | |
vendethiel | tired. students going very crazy. how about you? | 21:36 | |
21:36
hankache joined
|
|||
timotimo | also tired | 21:36 | |
i went to bed early-ish last night and thought that'd be an excellent thing to do to have a good day | 21:37 | ||
instead of having a good day i woke up super early and couldn't get back to sleep ... and later i napped which didn't help at all, of course >_> | |||
but now i'm going to be served dinner, and that'll make things better | |||
vendethiel | seems like a plan :-) | 21:38 | |
timotimo | you're still leading that computer lab thingie? | ||
21:38
pierrot joined
|
|||
vendethiel | not even. they're just overstepping their bounds as students... | 21:39 | |
21:39
pierrot is now known as Guest53366,
Guest53366 left
|
|||
psch | that sounds controversial :S | 21:39 | |
21:39
espadrine_ joined
21:40
pierrot_ joined,
pierrot_ is now known as pierrot
|
|||
psch | google shows the daily mail reporting about demonstrations in reaction to a government announcement | 21:41 | |
there's probably better news sources... :) | |||
21:41
sortiz joined
|
|||
vendethiel | psch: yeah, very much | 21:46 | |
psch | i don't think i have enough information for... anything really. the article i found talks about something that the govt wants to sell as "reduces unemployment", but the student apparently disagree..? | 21:48 | |
s/ent/ents/ | |||
timotimo | i don't understand what you're talking about, tbh | ||
21:49
pmurias left
|
|||
timotimo | BBIAB food | 21:49 | |
21:50
pmurias joined
21:53
nadim joined
|
|||
psch | timotimo: oh, well, vendethiel is french, an googling "student protest france" showed that mentioned article, which talks about some govt measure to decrease unemployment... | 21:55 | |
...at least i'm fairly sure vendethiel is, in fact, french :) | |||
vendethiel | no, that's very much outside of what i'm talking about. | ||
psch | ah, so something local | ||
? | |||
vendethiel | it is correct that I'm french, which you deduce from my wonky english :P. | ||
psch | no, i actually remember you stating you're french a few months ago | 21:56 | |
vendethiel | psch: something personal, not really keen about talking more -- sorry :) | ||
psch | oh, no worries, i don't even intent to pry. i was just curious | ||
vendethiel | it's okay. yeah, it's all kind of worrying what's happening about work laws and other things around here, though... | 21:57 | |
psch | fwiw, the first association in my mind was to our (that is, the german) ALGII | ||
which can be argued as well-intended, but mostly turns out as a means of hiding unemployment instead of finding jobs for people outside of employment | 21:58 | ||
...but that's probably because i'm affect, so assume the appropriate amount of bias :) | |||
21:59
nadim left
22:00
nadim joined
|
|||
Skarsnik | m: module A {our $foo is export := "42"}; import A; say $foo; | 22:14 | |
camelia | rakudo-moar 24b4b2: OUTPUT«(Any)» | ||
Skarsnik | Is that a bug? | ||
psch | Skarsnik: looks like binding interfers there | 22:15 | |
m: module A { our $foo is export = "42" }; import A; say $foo # as this works | 22:16 | ||
camelia | rakudo-moar 24b4b2: OUTPUT«42» | ||
psch | m: my $x is DEPRECATED := 42; $x | ||
camelia | rakudo-moar 24b4b2: OUTPUT«5===SORRY!5=== Error while compiling /tmp/hYq6HfSz5_Can't use unknown trait 'is DEPRECATED' in a variable declaration.at /tmp/hYq6HfSz5_:1------> 3my $x is DEPRECATED7⏏5 := 42; $x expecting any of: TypeObject de…» | ||
psch | hrm | ||
Skarsnik | my real usage was export var that were binding to cglobal() | ||
lizmat | psch: I don't think DEPRECATED ever worked on variables | 22:17 | |
psch | lizmat: yeah, i think so too | ||
lizmat | not sure how it could actually report on its usage, like it does on subs/methods | ||
psch | lizmat: no, yeah, i agree, it was a misguided attempt :) | 22:18 | |
m: class A { has $.x is rw := "foo" }; # this seems more related, fwiw | |||
camelia | rakudo-moar 24b4b2: OUTPUT«5===SORRY!5=== Error while compiling /tmp/V7TBiHsskVCannot use := to initialize an attributeat /tmp/V7TBiHsskV:1------> 3class A { has $.x is rw := "foo" 7⏏5}; # this seems more related, fwiw» | ||
psch | ...i'm not sure though vOv | ||
eh, disregard all of that, i'll poke more and speak up again if i discover anything actually useful :) | 22:19 | ||
22:20
lostinfog left
22:29
skids joined
22:30
virtualsue left
22:32
hankache left
22:35
nadim left,
raiph joined
22:37
musiKk_ joined
22:39
colomon left
22:42
CQ left
|
|||
saaki | more simple version of this? (1...^10).grep: {$_ %% 2 or $_ %% 3} | 22:50 | |
22:52
colomon joined
22:53
colomon left
|
|||
psch | m: say (1...^10).grep: * %% (2|3) # not sure where if "more syntax" means "more simple" vOv | 23:00 | |
camelia | rakudo-moar 24b4b2: OUTPUT«(2 3 4 6 8 9)» | ||
psch | saaki: ^^^ | ||
semantically there's a tiny difference, as well. infix:<|> is an any-Junction, whereas the or in the original short-circuits | 23:02 | ||
RabidGravy | or, y'know just "say <2 3 4 6 8 9>" | ||
23:03
lucasb joined
|
|||
RabidGravy | same output so it's gotta be right yeah? | 23:03 | |
;-) | |||
lucasb | hello o/ | ||
m: class C { method defined { True } }; say ?C | 23:04 | ||
camelia | rakudo-moar 24b4b2: OUTPUT«False» | ||
lucasb | star: class C { method defined { True } }; say ?C | ||
camelia | star-m 2016.01: OUTPUT«True» | ||
lucasb | ^^ is this a valid change for 6.c? | ||
23:05
espadrine_ left
|
|||
psch | star-m: class C { method Bool { False } }; say ?C | 23:05 | |
camelia | star-m 2016.01: OUTPUT«False» | ||
psch | star-m: class C { method Bool { True } }; say ?C | ||
camelia | star-m 2016.01: OUTPUT«True» | ||
psch | m: class C { method Bool { False } }; say ?C | ||
camelia | rakudo-moar 24b4b2: OUTPUT«False» | ||
psch | m: class C { method Bool { True } }; say ?C | 23:06 | |
camelia | rakudo-moar 24b4b2: OUTPUT«True» | ||
psch | interesting | ||
afaik, prefix:<?> never should ask .defined | |||
'cause it's the prefix-op equivalent of .Bool | |||
timotimo | it asks Bool, which by default asks .defined | 23:07 | |
psch | oh | ||
so .Bool defaults to .defined, that makes sense | |||
timotimo | that's what lucasb observed, that the change in Mu's defined will make things perhaps change? | ||
psch | i mean, the results do | ||
lizmat | well, it wasn't picked up by the test suite | 23:10 | |
psch | right, that was my other thought | ||
timotimo | right | ||
lizmat | but yes, if you add a .defined method to your class | ||
timotimo | you're playing with fire ;) | 23:11 | |
lizmat | you probably should also make your own .Bool | ||
lucasb | yeah, I never defined any 'defined' or Bool methods for my classes. I just noticed this recent commit and decided to try some snippet. Because I remember Failure handled their Bool/defined methods differently. But I'm ok with it, if it makes things faster. :) | 23:13 | |
lizmat | my commit didn't change that: you can still do whatever you want with your own .Bool and .defined | 23:14 | |
it's just that if you do define your own, you probably want to do both | |||
lucasb | ok, understood. thanks | 23:15 | |
23:15
itaipu left
23:16
adu left
23:19
zakharyas left
23:23
wamba joined
|
|||
lucasb | the specs briefly mentions the relationship between Bool and .defined for the Mu class, but I guess it can be updated. | 23:24 | |
S02:4660 | |||
synopsebot6 | Link: design.perl6.org/S02.html#line_4660 | ||
lucasb | anyway, I'm waiting for the release this weekend. thanks for your work, everybody! good night | 23:26 | |
23:26
lucasb left
23:27
sufrostico left
|
|||
lizmat | hmmm... that seals the fate of that commit, I guess :-( | 23:27 | |
23:29
sufrostico joined
23:34
cdg left
23:43
Skarsnik left
23:47
BenGoldberg joined
|
|||
timotimo | brr. i totes broke the profiler's routine view >_> | 23:49 | |
RabidGravy | tut | 23:52 | |
23:56
nadim joined
|