»ö« 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:11 Guest53986 left 00:16 AlexDaniel left, Alchemy joined, Alchemy is now known as Guest50956 00:18 rouking left 00:25 rouking joined, jimav joined 00:27 daemon left
jimav Hello World... Is it possible to disallow undeclared named args to methods? By default $obj.meth(misspelled=>42) succeeds silently. 00:27
00:28 skids joined, pharv left
rouking When I try to install rakudo-star to target the jvm (and moarvm), `make install` tries to cd into modules/panda, which doesn't exist. Any clues? Is this referring to the deprecated module manager? 00:29
00:29 Guest50956 left, Guest50956 joined 00:30 Guest50956 is now known as daemon
jimav m: pastebin.com/raw/gPdbrNYU 00:30
camelia 5===SORRY!5=== Error while compiling <tmp>
Confused
at <tmp>:1
------> 3https:7⏏5//pastebin.com/raw/gPdbrNYU
expecting any of:
colon pair
jimav Hmm I thought that would work... 00:31
buggable New CPAN upload: Concurrent-Trie-1.0.tar.gz by JNTHN cpan.metacpan.org/authors/id/J/JN/...1.0.tar.gz
00:32 Zoffix joined
Zoffix Is there some sane way to in-place replace an attribute in a class to a native type during instantiation? class Foo { has $.foo } having foo a native int if `Foo.new: :42foo` is called or having it an Int if `Foo.new: :44000000000000000000000000000000000foo` is called? I don't want to have more than one attr in the class 00:34
(kinda clutching at straws with this idea, but figured I'd ask anyway) 00:35
MasterDuke m: class A { method foo(*%n where !%n) { say "here" }; }; say A.foo(method=>42)
camelia Constraint type check failed in binding to parameter '%n'; expected anonymous constraint to be met but got Hash (${:method(42)})
in method foo at <tmp> line 1
in block <unit> at <tmp> line 1
MasterDuke jimav: ^^^ like that perhaps? 00:36
Kaiepi how can i write the proto method for this to work? when i try calling Net::LibIDN::TLD.check_8z('com', $errpos, $code), it expects a Positional as the third argument hastebin.com/etuzeqonit.pl 00:37
jnthn Zoffix: No; numerous things depend on an attribute's kind being stable. 00:38
Zoffix rouking: presumably it's a bug you could report ( github.com/rakudo/star/issues ).
jnthn Zoffix: for a given type, that is
Zoffix jnthn: thanks.
Kaiepi nm, proto method check_8z(Str, Int, | --> Bool) works
jnthn Zoffix: Role and then two classes implementing it, perhaps? 00:39
00:41 pharv joined
Zoffix Yeah, that's what I'm gonna go with. 00:42
Well, draft at least. Go run by TimToady first to see how he feels about MidRat (and likely MidRatStr) for Rat/FatRat allomorph, 'cause I'm not really a fan of making RatStr doing that job. 00:43
s/Go/Gonna/;
trial impl appears to work, but I just can see people complaining about proliferation of Numeric/Rational types :} 00:44
(and I don't wanna lock Rat to full Int denominator for this purpose, 'cause then we miss out on any potential wins for native-type denominators) 00:45
00:47 pharv left
Zoffix rouking: submitted a potential fix: github.com/rakudo/star/pull/109 00:50
00:54 kaare__ is now known as kaare_
jnthn wanders off to sleep 00:55
00:56 pierre joined
Zoffix m: sub is-empty { %^_ and die "Unknown named args: %_.keys().sort().map('"'~*~'"')"; }; class Foo { method xxx(:$argname) { is-empty %_; say "xxx called" } };Foo.xxx(misspelled => 42); 00:57
camelia Unknown named args: "misspelled"
in sub is-empty at <tmp> line 1
in method xxx at <tmp> line 1
in block <unit> at <tmp> line 1
00:58 pharv joined, reportable6 left, reportable6 joined
Zoffix m: sub is-empty { %^_ and die "Unknown named args: %_.keys().sort().map('"'~*~'"')"; }; class Foo { method xxx(:$argname, *%_ where &is-empty) {say "xxx called" } };Foo.xxx(misspelled => 42); 00:58
camelia Unknown named args: "misspelled"
in sub is-empty at <tmp> line 1
in method xxx at <tmp> line 1
in block <unit> at <tmp> line 1
Zoffix m: sub trait_mod:<is> (Routine:D \r, :$locked!) { r.wrap: -> *%_, | { %_{r.signature.params.grep(*.named).map: *.usage-name}:delete; %_ and die "Unknown named args: %_.keys().sort().map('"'~*~'"')"; }}; class Foo { method bar(:$meows) is locked {} }.bar: :42meows 01:05
camelia ( no output )
Zoffix m: sub trait_mod:<is> (Routine:D \r, :$locked!) { r.wrap: -> *%_, | { %_{r.signature.params.grep(*.named).map: *.usage-name}:delete; %_ and die "Unknown named args: %_.keys().sort().map('"'~*~'"')"; }}; class Foo { method bar(:$meows) is locked {} }.bar: :42meowss
camelia Unknown named args: "meowss"
in block at <tmp> line 1
in block <unit> at <tmp> line 1
Zoffix hehe, neat :)
oh, forgot to nextsame outta the wrap 01:06
m: m: sub trait_mod:<is> (Routine:D \r, :$locked!) { r.wrap: sub (*%_, |) { %_{r.signature.params.grep(*.named).map: *.usage-name}:delete; %_ and die "Unknown named args: %_.keys().sort().map('"'~*~'"')"; nextsame }}; class Foo { method bar(:$meows) is locked {say "we're in!"} }.bar: :42meows
camelia we're in!
Zoffix m: m: sub trait_mod:<is> (Routine:D \r, :$locked!) { r.wrap: sub (*%_, |) { %_{r.signature.params.grep(*.named).map: *.usage-name}:delete; %_ and die "Unknown named args: %_.keys().sort().map('"'~*~'"')"; nextsame }}; class Foo { method bar(:$meows) is locked {say "we're in!"} }.bar: :42meowss
camelia Unknown named args: "meowss"
in sub at <tmp> line 1
in block <unit> at <tmp> line 1
01:07 Zoffix left 01:18 vike left 01:21 pharv left 01:22 pierre left, vike joined, pharv joined 01:28 pharv left 01:34 pierre joined 01:40 trnh joined 01:41 pierre left 01:47 trnh left 01:48 et09 joined
et09 there was some cool new technique perl 6 uses for inheritance, what was it again? 01:48
01:50 pierre joined 01:52 Zoffix joined
Zoffix et09: no idea... do you mean roles (aka traits in some other languages). Far from new. 01:53
et09 i guess so, hm
i thought there was something cooler 01:54
Zoffix m: class A {}; class B {}; class C {}; class D {}; class E {}; class K1 is A is B is C {}; class K2 is D is B is E {}; class K3 is D is A {}; class Z is K1 is K2 is K3 {}; say Z.^mro;
camelia ((Z) (K1) (K2) (K3) (D) (A) (B) (C) (E) (Any) (Mu))
Zoffix This is the standard inheritance we have; the C3 resolution
et09 what's the very last thing mean, ,say Z.^mro?
01:54 pierre left
Zoffix et09: `$foo.^bar($ber)` is short for `$foo.HOW.bar($foo, $ber)` which is a method call on the metaobject 01:55
m: say True but False
camelia False
et09 what is HOW ?
Zoffix ^ we also have that; mix-in-a-role-into-an-object thing; No idea what other "cool" things you could be talking about :)
et09 oh sorry
Zoffix et09: .HOW gives the metaobject responsible for the object 01:56
et09 phew
Zoffix m: put 42 but 'forty-two'
camelia forty-two
et09 i hate how every language has its own terms for syntax
Zoffix :)
"metaclass"? I think that's what Python uses too 01:57
et09 i guess that's vaguely like a haskell typeclass
i don't know python that well 01:58
what's the 10k foot view of perl6 outlook, what do you think 02:03
it fascinates me a little but feel scared to use it at work
Zoffix I'm too deep in to have a clear view, even from 10k foot, but I if performance gets better the outlook would be good. Currently we win in saving programmer's time; once we also start saving computer time, the choice to use the language would be more enticing. 02:06
Current state is A LOT better than in 2016. I recall being frustrated hitting compiler bugs any time I tried to write a program. Now, it's mostly smooth sailing. 02:07
et09 what's an example of really great elegant perl6 code
Zoffix m: dd FatRat.new(1,2) + 0e0;
camelia 0.5e0
Zoffix Hm, I thought FatRats were the most infectious of types and kinda expected above to give me a FatRat. 02:08
et09 wow
02:08 pierre joined 02:09 releasable6 left 02:10 releasable6 joined
Zoffix et09: hmm, that's a bit of a vague question. I think one of the programs I wrote that I was really impressed with the language was my Z-Script tool to assist with builds for a project. It has a ton of commads, but it was supper-fast to write them all thanks to automatic help USAGE message generation and multi-dispatch on sub MAIN: github.com/zoffixznet/z/blob/master/bin/z (and rest of code is in 02:10
github.com/zoffixznet/z/blob/maste...b/RDev.pm6 )
et09: if I had to pick the quintessential example of elegant piece of perl 6 code it'd be counting letters/chars in a sentence
m: say "This is some sentence".comb.Bag 02:11
camelia Bag( (3), T, c, e(4), h, i(2), m, n(2), o, s(4), t)
Zoffix .Bag is a "count this stuff" sort of type
et09 m: "foo bar bag".comb(/a-h/) 02:12
camelia 5===SORRY!5===
Unrecognized regex metacharacter - (must be quoted to match literally)
at <tmp>:1
------> 3"foo bar bag".comb(/a7⏏5-h/)
Unable to parse regex; couldn't find final '/'
at <tmp>:1
------> 3"foo bar bag".comb(/a-7…
et09 m: "foo bar bag".comb(/[a-h]/)
camelia 5===SORRY!5===
Unrecognized regex metacharacter - (must be quoted to match literally)
at <tmp>:1
------> 3"foo bar bag".comb(/[a7⏏5-h]/)
Unable to parse expression in metachar:sym<[ ]>; couldn't find final ']' (corresponding starter …
02:13 pierre left
timotimo perl6 regex syntax is different, you need to spell it <[a..h]> 02:13
et09 whaaat
Zoffix et09: and for a larger piece that I consider elegant, but a tad dirty is ignore/admin feature for my bot. It creates a subset of a generic IRC::Client message that matches the host against hosts in a config file and multi-dispatch on methods for event handling just automagically receives the messages from right users:
github.com/zoffixznet/perl6-ZofBot...pm6#L6-L21
et09 m: "foo bar bag".comb(/[a..h]/)
camelia ( no output )
timotimo m: "foo bar bag".comb(/<[a..h]>/).say
camelia (f b a b a g)
timotimo and you need to .say at the end or say in front so it'll output anything
et09 that's amazing
m: "foo bar bag".comb(/[a..h]/).reverse
camelia ( no output )
et09 m: say "foo bar bag".comb(/[a..h]/).reverse
camelia ()
Zoffix et09: we invented a new regex language. It's a lot more readable than the status quo PCRE stuff (e.g. (?<=foo) is spelled <after foo>) 02:14
timotimo you forgot the < > around it
et09 m: say "foo bar bag".comb(</[a..h]/>).reverse
camelia ()
Zoffix Though Perl 5 regexes are available too if you use the :P5 adverb
timotimo perl6.org/archive/doc/design/apo/A05.html - this is a (very old) document explaining the ideas behind the regex syntax and semantics redesign
et09 that's mind boggling
Zoffix m: dd "foo bar bag".comb(rx:P5/[a-h]/)
camelia ("f", "b", "a", "b", "a", "g").Seq
timotimo sorry, that's one layer too far outside :)
02:14 maettu left
Zoffix ZofBot: mind boggling is what we do! 02:14
ZofBot Zoffix, Lots of people wrote to the magazine to say that Marilyn vos Savant was wrong, even when she explained very carefully why she was right
timotimo ooh, is that from the "three doors and one goat" thing? 02:15
Zoffix Nope: en.wikipedia.org/wiki/The_Curious_...Night-Time
et09 "The Apocalypse on Pattern Matching" lol
Zoffix Ahh
timotimo: but yes, the book mentions the three doors and one goat problem and how many people didn't get it :)
I totally forgot that it did :)
timotimo i love that story 02:16
et09 also larry wall reminds me of the guy from back to the future
timotimo not the dog incident one, i don't know that one
Zoffix :)
02:16 maettu joined
Zoffix I guess I was mis-remembering (about FatRat infectiousness). Now that I think of it, it don't make much sense to have FatRat + Num produce a FatRat, as depending on values, a lot of the "extra precision" in that FatRat would be bogus 02:19
oh
m: say .1 + .2 == .3
camelia True
tobs et09: if you do numbers, the "... *" syntax for sequences is nice
Zoffix et09: ^ another sample I'd add into "elegant" pile. The above gives False in many mainstream languages (they use floating points for such literals, but we use Rational types)
tobs m: my @p = 2, 3, -> *@p { (@p[*-1]..*).first: none(@p) R%% * } ... *; @p[^25].say 02:20
camelia (2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97)
tobs one-line sieve of eratosthenes (ignoring Int.is-prime)
Zoffix m: say (2, 6, 18 … ∞).head: 100
camelia (2 6 18 54 162 486 1458 4374 13122 39366 118098 354294 1062882 3188646 9565938 28697814 86093442 258280326 774840978 2324522934 6973568802 20920706406 62762119218 188286357654 564859072962 1694577218886 5083731656658 15251194969974 45753584909922 1372…
et09 wow 02:21
Zoffix m: say (1, 1, *+* … ∞).head: 100
camelia (1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309 3524578 5702887 9227465 14930352 24157817 39088169 63245986 102334155 165580141 267914296 433494437 70…
Zoffix Fibonacci numbers
(*+* is a closure that takes two args; the `*` are the arg placeholders, not multiplication)
timotimo m: say (20, 35, *%* ... 0) # euclid's algorithm for greatest common denominator 02:22
camelia (20 35 20 15 5 0)
tobs haha, that's great 02:23
timotimo grab the second-to-last number as the result
m: say ([1], -> @a { [flat(0, @a) Z+ flat(@a, 0)] } ... *).head(4) 02:24
camelia ([1] [1 1] [1 2 1] [1 3 3 1])
timotimo m: say ([1], -> @a { [flat(0, @a) Z+ flat(@a, 0)] } ... *).head(10)
camelia ([1] [1 1] [1 2 1] [1 3 3 1] [1 4 6 4 1] [1 5 10 10 5 1] [1 6 15 20 15 6 1] [1 7 21 35 35 21 7 1] [1 8 28 56 70 56 28 8 1] [1 9 36 84 126 126 84 36 9 1])
timotimo pascal's triangle
the sequence operator in general is just brilliant
i need to go to bed %) 02:25
02:45 ilbot3 left
Zoffix ZofBot: big brother has quit! Let's get crazy 02:46
ZofBot Zoffix, ” And she said, “Perhaps your father just doesn’t like Mr
TEttinger ZofBot: once upon a time, 02:47
Zoffix :) 02:48
ZofBot: good robot!
ZofBot Zoffix, Your father is a much more pacient person
TEttinger aw
pacient heh
it should be spelled like that, shouldn't it
02:52 et09 left 02:56 ilbot3 joined, ChanServ sets mode: +v ilbot3 03:00 pierre joined
Kaiepi m: say (2419872,984522,*%*...0).tail(2)[0] 03:03
camelia 42
Kaiepi is there a shorter way to get the second last element?
Zoffix .tell TimToady I thought about it and kinda hate RatStr being the type for high-precision literals. `my Str $x = 1.1111111111111111111` is a typecheck error, but `my Str $x = 1.11111111111111111111 isn't` and it's hard to say what a numeric literal has to do with a `Str` object. I drafted the latest version of the proposal to implement a `MidRat` instead that's literally a `Rat`/`FatRat` allomorph (and its 03:04
yoleaux Zoffix: I'll pass your message to TimToady.
Zoffix `Str` allomorph `MidRatStr` is). I don't really like the overkill of introducing two new types to solve this, but I like all the other ideas even less. I updated the proposal doc and there's a crude trial impl in `ratlab-fattish-rat` branch ; what do you think on this? github.com/rakudo/rakudo/blob/mast...tionals.md
.tell TimToady `Str` allomorph `MidRatStr` is). I don't really like the overkill of introducing two new types to solve this, but I like all the other ideas even less. I updated the proposal doc and there's a crude trial impl in `ratlab-fattish-rat` branch ; what do you think on this? github.com/rakudo/rakudo/blob/mast...tionals.md 03:05
yoleaux Zoffix: I'll pass your message to TimToady.
Zoffix m: say (2419872,984522,*%*...^0).tail
camelia 42
Zoffix "and its `Str` allomorph `MidRatStr` is"... Looks like sleep deprivation turned me into Yoda 03:06
m: say (2419872,984522,*%*...0)[*-2] 03:07
camelia 42
Zoffix Kaiepi: ^ the first one is specifically for … op, the …^ version excludes endpoint and then you just do a `tail` on it. The second one is a generic one to get $nth element from the end
Though writing .tail(2).head can betterer as this doesn't cache, while the [...] thing caches 03:08
ZzZombo Kaiepi, just using subscripts is shorter, `(...)[2]`. 03:10
Kaiepi, just using subscripts is shorter, `(...)[*-2]`.
I mean the latter.
Kaiepi ah
thanks
03:17 Zoffix left 03:37 maettu left 03:38 maettu joined, eliasr left 03:40 sharksoft left 04:01 Zoffix joined
Zoffix .tell TimToady I slept on it and decided I hate MidRat. It's totally an overkill. Got a new idea tho: when making a Rat, if denomunator is too big, mix in a role with Int denominator. Basically this: `role ExtPrecisionRational { has Int $.denominator }; role Mouse does Rational[Int,Int] { method new(\nu, \de) { my \r := nqp::create(self); r does ExtPrecisionRational if reduced-de-is-over-64-bit; 04:06
yoleaux Zoffix: I'll pass your message to TimToady.
Zoffix p6bindattrinvres(...) }` Thinking it'd be a private role tho. Gonna try a trial impl on on Mar 10th weekend
.tell TimToady p6bindattrinvres(...) }` Thinking it'd be a private role tho. Gonna try a trial impl on on Mar 10th weekend
yoleaux Zoffix: I'll pass your message to TimToady.
Zoffix re-beds
04:06 Zoffix left 04:07 xtreak joined 04:21 kybr left 04:22 kybr joined 04:24 llfourn left 04:26 llfourn joined 04:31 pierre left 04:32 pierre joined 04:34 pierre left 04:44 pierre joined 04:48 pierre left 04:51 wamba joined 05:06 aindilis` left 05:10 w_richard_w joined 05:41 curan joined 05:48 trnh joined 05:49 pierre joined 05:54 pierre left 06:08 pierre joined 06:10 trnh left 06:12 pierre left 06:18 pierre joined, domidumont joined 06:20 troys left 06:23 xtreak left, pierre left, wamba left 06:25 domidumont left, domidumont joined 06:26 pharv joined 06:31 pharv left 06:34 xtreak joined, perlUser joined
perlUser Hi can I use perl 5 modules in perl 6 06:35
trying to learn perl6
06:36 pierre_ joined
perlUser exit 06:37
06:37 perlUser left 06:40 pierre_ left 06:42 jimav left, skids left, jimav joined 06:50 khw left
Geth Pod-To-HTML: JJ++ created pull request #32:
Tested with htmlify.p6
06:50
06:53 domidumont left 06:54 pierre_ joined 06:55 jimav left, wamba joined 06:57 tuoneta joined 06:58 tuoneta left 06:59 pierre_ left 07:11 espadrine left 07:13 pierre_ joined 07:14 trnh joined 07:15 pierre_ left 07:16 pierre_ joined
Geth doc/master: 5 commits pushed by (JJ Merelo)++ 07:19
07:22 robertle joined 07:25 rindolf joined 07:40 xtreak left 07:43 xtreak joined 07:45 darutoko joined 07:57 Ven`` joined 07:58 ufobat joined
ufobat good morning :) 08:01
08:02 abraxxa1 joined, abraxxa left 08:03 abraxxa1 is now known as abraxxa, abraxxa left, abraxxa joined 08:06 xtreak left
moritz \o ufobat 08:20
08:21 noganex left 08:25 Ven`` left 08:27 pharv joined 08:31 Ven`` joined, pharv left 08:32 trnh left
masak good antenoon, #perl6 08:40
08:41 lowbro_ joined
moritz \o masak 08:41
still morning here :-)
08:46 Ven`` left 08:51 vike left 08:59 Ven`` joined
masak you have a point 08:59
masak is reading about Go pseudo-assembly 09:00
for some reason I've become very hungry for the low-level details of bytecode interpreters/runtimes/VMs recently 09:01
maybe I should blog about this
09:01 lookatme left
masak most interesting thing I learned so far is that in Go, the _caller_ is responsible for managing the callee's stack frame 09:05
not sure how common that is, but it seems to me that'd be problematic in the face of multimethod dispatch (which Go doesn't have AFAIK)
09:07 xtreak joined
masak does anyone know how close Go is to previous Rob Pike languages, such as Alef and Limbo? 09:09
oh, Alef wasn't Pike's. but Newsqueak was.
09:10 scimon joined 09:11 xtreak left
masak at Wikipedia, both the Limbo and the Newsqueak articles mention "first-class channels" and distributed programming. the Limbo article mentions strong typechecking, GC, and portable object code. so it sounds pretty similar 09:12
09:13 zakharyas joined
masak (I once heard it said, meant as a nasty criticism I'm sure, that Pike has been re-implementing the same antiquated language over and over for the past few decades) 09:13
09:15 zakharyas left 09:16 zakharyas joined 09:18 zakharyas left 09:19 zakharyas joined 09:26 trnh joined 09:30 xtreak joined, pierre_ left 09:34 xtreak left 09:41 w_richard_w left 09:42 pierre joined, trnh left 09:58 tt left 10:01 tt joined
El_Che masak: interesting take 10:01
masak: it's true that go doesn't feel modern, but at the same type not archaic.
stmuk I really like Go although its pretty much at the opposite end of the "syntax complexity" spectrum to Perl 6 10:04
El_Che also on speed :P 10:05
10:06 vike joined
masak I haven't programmed in Go. but I'm reluctantly attracted to the minimalist philosophy it expresses, where you're expressly given a "good parts" subset to work with, instead of All The Things 10:06
El_Che I should register a p6p6 domain :)
masak enjoyed commandcenter.blogspot.se/2012/06/...-more.html
though "no generics" still feels like a very trivial hill to die on to me 10:07
El_Che masak: in my opinion, the syntax doesn't offer much. What it does however is simplicity (e.g. reading other projects), safety, easy concurrency, speed and easy deployment
stmuk Go "Interfaces" are nice
El_Che masak: what's annoying in go is the repeat yourself part (partly to the lack of generics and compact standard lib) 10:08
stmuk the Go team are asking for generic use cases for Go 2.x
El_Che and they are fixing the awful lib versioning 10:09
(or better: the lack of)
stmuk you can fudge generics but Go is probably a bit too "static" for it TBH
jast I don't really like Go that much, but I guess that's because minimalism is the hardest thing and people prefer different ways of reducing things 10:10
stmuk www.youtube.com/watch?v=rFejpH_tAHM dotGo 2015 - Rob Pike - Simplicity is Complicated 10:13
masak cf "I didn't have time to write a shorter letter" ;) 10:14
stmuk :)
jast exactly
masak it's funny -- I'm just back from teaching Git for the umpteenth time. I'm experimenting right now with focusing more on team workflows than on advanced Git commands. it's a big shift in how I teach Git. 10:15
jast and reducing something is always a trade-off
masak and every time I do it, I can feel how I get a little closer to the core of what I want to say, and how I get there quicker
10:16 noganex joined
masak it's amazing to me how much that kind of teaching also becomes an act of *discovery* for me, the teacher 10:16
jast yeah, IMO team workflows are much more central to using git successfully
for advanced commands you can always go ask in #git after all ;)
masak it's like I'm amortizing the cost of finding out what I want to say over dozens of clients :P
it's also my thesis lately that everyone wants continuous integration, whether they know it or not 10:17
10:17 curan left
jast absolutely... you're building up experience about what matters most, what the most common problems and gotchas are, and so on 10:17
I've been running the #git gauntlet for like ten years now... I can do almost arbitrary git talks without any preparation now :) 10:18
masak well, I know what I want to convey, I'm just not used to overcoming the Curse of Knowledge and explaining it well to people who need to hear it 10:19
jast this is why I like very interactive workshops, makes it much easier to see where people are at and tailor-fit explanations 10:20
masak yesterday I ended up building a shopping cart in ES6+, gradually migrating from committing directly on master via feature branches to PRs 10:21
the culmination was when I reviewed my own PRs, fixed the problems, and then had the merge of one cause conflicts in another so it needed rebasing/model changes
it came together quite nicely <3 10:22
10:23 vike left 10:24 Ven`` left
masak biggest hurdle this time was that eslint was overconfigured and wouldn't shut up about complete inessentialities :P 10:24
"hey, this function is empty!" -- I know. -- "you didn't use `this` in this method!" -- I know. -- "you didn't use that parameter!" -- I'm doing TFD, OK? 10:25
10:25 vike joined
jast linting is the worst :) 10:27
masak I disagree :)
but it makes a big difference if you opted in to rules or not
jast well it depends
if you take the time to set up the right ruleset for the linter, sure, why not
masak also, it's not that those rules are bad or wrong, but they are just over-eager and don't make sense in the middle of the branch 10:28
I'd like two modes: "lint before commit" and "lint before merge"
jnthn Was gonna say, the things I want a linter to tell me in the middle of developing something aren't the ones I'd want at commit time
jast I don't think I even have a commit-time linter, but my editor does linting in the background 10:29
masak maybe even a third: "lint during authoring" -- mostly because JS is still JS. but that one can be swapped out for a decent modern IDE.
jnthn The default sets of rules are often a bit over-eager, I find, though. Perhaps 'cus linter developers want to show off all their hard work. :-)
And yeah, in JS, linters are more useful than in many other languages, because they tell you stuff the compiler does in other languages. :P 10:31
jast some of them do style-related things, too, like warning about long lines... yeah, I know exactly how long my lines are, thank you very much
10:31 xtreak joined
masak some eslint rules simply make absolutely no sense, like eslint.org/docs/rules/no-param-reassign 10:33
if you read the linked article that motivates that rule, there are some solid points about `arguments` aliasing 10:34
but the rule also forbids you to change *properties* of arguments, which is completely fine
jnthn wat?
:) 10:35
masak oh, that's opt-in... but still.
jnthn I was about to write "Perl 6 actually enforces a rule like that" until you said the last part :-)
jast the example in the linked article is a classic example of shooting yourself in the foot, anyway 10:36
El_Che feet are overrated
jast you'd only do this if you didn't know how arguments works in JS
the 'arguments' keyword/fake variable, that is
masak guess that's the point, yes 10:37
jast IMO the goal of a linter shouldn't be to protect yourself against people who don't understand the language, it should be to catch things that might happen to someone who knows what they're doing
masak +1 10:38
10:39 Ven`` joined
masak this explains why I hate linter rules about parentheses for clarity (instead of relying on precedence) and against using bit ops (because it could be a typo) 10:40
jast one case where I like parentheses for clarity is 'if (foo = bar)' in C and friends 10:42
masak if I get you right, I believe those are necessary...? 10:44
or did you mean `if ((foo = bar))` ? 10:45
jast the latter
I suppose in some cases it's clear from the context that it's a deliberate assignment, though
masak reminds me of github.com/masak/007/issues/279 which I'm mulling over right now 10:48
(and I just learned that in Go, assignment is not an expression. figures.) 10:49
jast I tend to be in the "everything is an expression" camp 10:54
masak aye -- I understand that stance quite well. and note that 007 currently behaves like C and Perl there 10:57
but as a language designer, I feel I have to argue the other side too ;) 10:58
in a sense, for any "everything is an X" stance, you have to do a certain amount of violence to things which aren't _really_ an X
"everything is an object" -- except for primitives, methos invocations, the call stack itself, properties, reprs, and object code 11:00
method*
"everything is a sexpr" -- except for... almost everything :P 11:01
Geth Pod-To-HTML: 413a5f2cf4 | (Juan Julián Merelo Guervós)++ (committed by Zoffix Znet) | 2 files
Tested with htmlify.p6 (#32)

  * Adds precomp everywhere
  * Avoid errors in documentation
  * Comment out debug
  * Fix that works refs perl6/doc#561
synopsebot DOC#561 [open]: github.com/perl6/doc/issues/561 [big][docs][site] Lots of broken links, invalid HTML and so on (checklink)
Pod-To-HTML: b8d03a0c75 | (Zoffix Znet)++ (committed using GitHub Web editor) | .gitignore
Simplify rule
11:02
masak "everything is an associative array" -- so I can store a key "foo" in my integer-indexed array? gee, thanks.
Geth Pod-To-HTML: 5864afc79c | (Zoffix Znet)++ (committed using GitHub Web editor) | META6.json
Bump version
jast of course "everything is an X" isn't universally sensible 11:03
but for expressions specifically I have yet to see any real problem
masak Rakudo had performance problems for a while because loops spat out all their iterations somehow 11:04
or, more generally, because routines returned things when that wasn't the intent
jast well, if you went the expressionist route you'd have optimizations for expressions where the resulting value isn't used
(ideally) 11:05
masak "sufficiently smart compiler", aye
for a brief while I had a fork of 007 called "george-lazenby" where I intended to make everything an expression just to try it out. never got the tuits, though 11:06
jast if you account for this in the design up front it shouldn't actually be too hard
very much an FP mindset: track which expressions have side effects and reduce the emitted code if you find pure elements that don't get used 11:07
11:07 pierre left 11:08 pierre joined, pierre left 11:09 pierre joined 11:13 kaare_ left 11:15 kaare_ joined 11:16 pierre left, pierre joined 11:21 pierre left
masak in general, a callee does not know about all its callers. at least not before "link time", let's say 11:24
and in a setting with method dispatch, an optimizer might have to be pessimistic when optimizing 11:26
11:28 xi- left
jast yeah, this a whole-program optimization thing 11:28
11:28 xi- joined
jast or you can generate two versions of each dispatch: one that does yield a result and one that doesn't 11:30
that bloats up the generated code something awful, of course, but depending on your target platform it might not matter that much ;)
11:31 xtreak left
masak yes, this is a good point 11:32
jast many years ago I had this idea for a language/compiler that is extremely trigger-happy on generating many different versions of routines
11:32 pmurias joined
jast the idea being that you could write untyped code and it would generate a type-specific compiled version whenever one was needed 11:32
probably terrible for CPU caching, but oh well :) 11:33
masak sounds like a JIT to me :)
jast yeah, except it would actually do this ahead-of-time
timotimo rpython does something very much like this, actually 11:34
jast basically an IR layer, and whenever you compile a full program, the correct native code would be generated from that for each type of invocation actually used
11:34 zakharyas left
timotimo it does whole-program type-inference 11:34
it generates versions of all functions for all types that it could receive
masak in the preface of my still-only-theoretical book on compilers, I point out how compilers prefer almost all of the things we dislike as humans: code duplication, massive inlining, feature envy, etc...
timotimo it is also somewhat slow
jast and the whole language was designed for this kind of approach, where the compiler would trace back and forth to determine which types were used in any given place 11:35
but I never actually implemented it to see if it was possible :)
oh, theoretical books... I have a bunch of those, too 11:36
the kicker about my design (which I didn't fully figure out how to implement) is that it would do compile-time type checking, too, even without any type annotations whatsoever 11:37
and unlike, say, OCaml, it wouldn't have type-specific operators
timotimo rpython does this with assertions; partially explicit, partially implicit or transitive
jast the only limitation this imposes is that you need to be clear about which types are coming in via I/O
basically typed interface, inferred anything-else 11:38
the extreme version would be that you could write methods that aren't actually tied to any class, and it becomes available automatically if an instance can deliver whatever the method needed. I was kind of thinking that might be a little too laissez-faire in general, though. 11:39
timotimo hm, what difference between methods and subs is left if it just "becomes available" like that? 11:41
jast just syntax 11:42
pmurias Just having a "my $foo = new;" construct and infering the type of the object created based on what methods are called on it is an approach use in a code-completion oriented language by Sean McDirmid (would have too look more for the exact paper language) 11:52
11:54 Grauwolf left
pmurias (Escaping the Maze of Twisty Classes) www.microsoft.com/en-us/research/w...rmid12.pdf 11:57
11:57 xtreak joined
jast that's likely to be ambiguous if you use a lot of inheritance and roles/mixins and such 12:01
12:01 Ven`` left
timotimo if you don't use many methods on the object, maybe it doesn't matter which class you get :) 12:01
12:02 rindolf left
jast maybe the siblings differ only in implementation of various methods 12:02
e.g. ElementLookup has descendants CSSElementLookup and XPathElementLookup 12:03
12:05 lichtkind joined, rindolf joined 12:13 wamba left 12:19 Ven`` joined
jast not to mention it might make code hard to read, because then *you* have to infer the type from the methods being used, too 12:24
unless you start being extremely careful with variable names, and then maybe it's a better idea to have a shorthand construct in which variable name =~= class name 12:25
12:28 pharv joined 12:29 pharv left 12:45 athenot left
pmurias jast: re *you* have to infer, it's part of the live programming movement so it assumes you are using and IDE which does that for you rather then a dumb text editor 12:52
jast: and it seems they allow you to specify the base class and infer traits
jast if the IDE shows me the class without me having to hover over it or anything, it might as well add it to the code 12:53
12:54 AlexDaniel joined
pmurias the IDE editing code on it's seems like potentially super annoying 12:57
jast either way, I'd rather have these essential bits of information in my code
I mean, I wouldn't want the type to magically change just because I implement a new method in some other class 12:58
13:01 Ven`` left 13:04 zakharyas joined 13:05 Ven`` joined 13:14 wamba joined
pmurias jast: I'm not a (strong) proponent of that approach, I just think it's an interesting radical idea (and the paper likely does it justice better than me giving it mine impression over irc ;) 13:14
13:17 Grauwolf joined
jast pmurias: oh, I missed the link. I'll take a look later. 13:17
13:25 obfusk_ left, obfusk joined, pharv joined 13:28 lichtkind_ left 13:30 pharv left 13:38 pmurias left, pierre joined 13:40 Ven`` left 13:41 Ven`` joined 13:50 abraxxa left 13:51 abraxxa joined 13:54 wamba left 13:58 athenot joined, abraxxa left
Geth doc: 5bd17409c5 | (Will "Coke" Coleda)++ | doc/Language/regexes.pod6
avoid 'or so on', which doesn't read right to me.

  ("and so on" which reads fine, didn't quite fit here)
13:59
synopsebot Link: doc.perl6.org/language/regexes
13:59 Zoffix joined
masak [Coke]: I'm always reminded of an early table in Korzybski's book 14:02
the book is about how language can affect thought. he feels a need to introduce half a dozen new types of punctuation (!) 14:03
timotimo interrobang?
masak nonono, nothing as frivolous as that
masak digs it out to have a look
14:04 zakharyas left
masak I'm not sure if I find the whole idea of "non-Arestotelian" things incredibly fascinating or dangerous and corrosive 14:04
ok, first off, he says "non-arestotelian" so much that he abbreviates it early on as "Ā" 14:05
14:05 zakharyas joined
masak (similarly for "non-euclidian" and "non-newtonian", both of which terms I have a much easier time grokking) 14:06
14:07 cdg joined
masak oh! here we go: ".," for "etc.,", ",." for ",etc.", ".;" for "etc.;", ".:" for "etc.:", ".?" for "etc.?", and ".!" for "etc.!" 14:07
guy really wants to be able to say "etc." a lot
Zoffix .tell TimToady never mind. I'm back on MidRat wagon (which is the latest work draft). Both fatty RatStr and mixing-in-a-role for boosted precision force us to use $.denominator instead of $!denominator in all Rational methods, which is 5.5x slower for native attributes and 4% slower for non-native.
yoleaux Zoffix: I'll pass your message to TimToady.
masak I wish this was more off-topic, but this is a Perl channel :P
14:12 Kaiepi left 14:13 Kaiepi joined
[Coke] :) 14:16
14:17 abraxxa joined
Zoffix m: class Foo { has uint64 $.x = 42 }; with Foo.new -> \F { for ^1000_000 { F.x; Nil }; say now - ENTER now } 14:20
camelia 0.34139625
Zoffix m: class Foo { has Int $.x = 42 }; with Foo.new -> \F { for ^1000_000 { F.x; Nil }; say now - ENTER now }
camelia 0.10212501
14:20 xtreak left
Zoffix Is it expected for native one to always be slower or is this just lack of things to make it fast? 14:20
jnthn Zoffix: Lack of optimization 14:21
Zoffix *phew* :)
jnthn It's one of the things on my spesh hit list for the not too distant future
Zoffix \o/
14:23 eliasr joined
timotimo is it about NativeRef not being turned into direct local/lexical access even after inlining? 14:23
Geth perl6-most-wanted: 50f16f72d6 | (Curt Tilmes)++ (committed using GitHub Web editor) | most-wanted/bindings.md
Add link to LibGit2 WIP
14:24
14:27 abraxxa left 14:29 zakharyas left 14:31 zakharyas joined
jnthn timotimo: Yes. At the moment we don't do anything in spesh like that 14:32
timotimo: But post-inlining is exactly the time for it
timotimo aye, i've dreamt about this moment for quite some time :)
masak does the optimization require escape analysis? 14:38
lichtkind greetings masak 14:40
Zoffix: do you mind some pull requests for math vector? 14:41
Zoffix has no idea what "math vector" is... 14:43
masak lichtkind: ahoy, fellow grey one :>
Geth doc: titsuki++ created pull request #1836:
Fix link positions in the FAQ
doc: 0782b5a4f0 | (Itsuki Toyota)++ | doc/Language/faq.pod6
Fix link positions in the FAQ
doc: e00a78f5dd | (Itsuki Toyota)++ (committed using GitHub Web editor) | doc/Language/faq.pod6
Merge pull request #1836 from titsuki/fix-pos

Fix link positions in the FAQ
synopsebot Link: doc.perl6.org/language/faq
masak er, I mean. of course aliens are not among us. that's preposterous.
masak does jedi hand motion 14:44
14:45 zakharyas left 14:49 zakharyas joined
Zoffix lichtkind: I think you're thinking of colomon 14:49
eco: Math::Vector
buggable Zoffix, Math::Vector 'Vector math class': github.com/colomon/Math-Vector
14:52 zakharyas left 14:56 zakharyas joined 14:59 zakharyas left 15:00 zakharyas joined 15:01 Zoffix left 15:02 domidumont joined 15:12 wamba joined 15:18 pierre left 15:20 comborico1611 joined 15:23 skids joined 15:24 Ven`` left 15:31 evalable6 left, Ven`` joined, evalable6 joined, ChanServ sets mode: +v evalable6 15:34 khw joined 15:45 aindilis joined 15:47 Kaiepi left 15:48 Kaiepi joined 15:49 pierre joined 15:53 pierre left 16:07 jeromelanteri left 16:08 scimon left 16:15 scimon joined 16:16 committable6 left, committable6 joined, ChanServ sets mode: +v committable6 16:17 as_ joined 16:18 scimon left 16:19 scimon joined, committable6 left, committable6 joined 16:20 as_ left, araraloren joined 16:22 troys joined
araraloren HI 16:23
timotimo ohai 16:26
araraloren No appropriate parametric role variant available for 'NativeCall::Native'
I download the module `Digest::SHA1::Native` 16:27
16:27 lowbro_ left
araraloren but installed failed with above error 16:27
the test of the module all passed
16:28 robertle left
araraloren gist.github.com/araraloren/ae4faf6...30e064d155 16:29
some log
16:32 zakharyas left
araraloren :) anyone can help me 16:34
timotimo could you try running the file it's trying to compile with perl6 --ll-exception? 16:35
sub compute_sha1(Blob, size_t, CArray[uint8]) is native( SHA1 ) { * }
this is the line it's complaining about
oh, it'll want to have a -I . so that it finds the META6.info so %?RESOURCES can work
araraloren -I ? 16:36
timotimo include folder, so that it looks for files in your current folder
araraloren do you mean run like this ? perl6 -Ilib ./t/03-sha1.t 16:37
timotimo yes, but -I. instead of -Ilib 16:39
araraloren not seen any error 16:40
all test can run and passed
timotimo huh, strange
delete the .precomp folders and try again? 16:41
araraloren hmm, I am on fedora 23
but I am not found the prebuild binary package for it, so I am using the rpm of fedora25
is that cause this problem ?
timotimo it's actually compiling its own sha1 library 16:42
16:42 natrys joined
araraloren yeah, I see 16:42
ok, maybe I should do a fresh installation 16:43
thanks 16:44
I will try to install from source
16:46 Ven`` left 16:48 Ven`` joined, Ven`` left
El_Che araraloren: fedoraproject.org/wiki/Releases#Cu...d_Releases 16:51
(that reminds me that fedora 25 is out of support, next rakudo-pkg rpms will not include fedora 25 packages) 16:53
araraloren :) thanks 16:55
I was using fedora 26 on my notebook 16:56
That fedora 23 is a virtual machine (dev env )
El_Che I build package for a distro version on the exact same version 16:57
timotimo my desktop is a 27, my laptop might be a 25
El_Che no checking if it works with older of new releases
(some people build on a very old os release and make sure it work on newer releases) 16:58
16:59 cdg left 17:00 Faster-Fanboi left, cdg joined
El_Che I know stmuk experimented with flatpack. That may be an option for out of support distro releases 17:00
timotimo we also have a piece of infrastructure for appimages 17:01
btw, anybody want to build something for dev-assistant?
oh
it's already obsolete
okay
araraloren :( 17:02
I do a fresh installation, still report that error 17:03
17:04 cdg left 17:08 comborico1611 left 17:15 scimon left
Geth doc: bc72bc3c5b | (JJ Merelo)++ | 2 files
Some broken fragments refs #561
17:15
17:17 pierre__ joined 17:22 pierre__ left 17:23 committable6 left, bisectable6 left, committable6 joined, bisectable6 joined 17:30 domidumont left
buggable New CPAN upload: Munge-0.1.tar.gz by CTILMES cpan.metacpan.org/authors/id/C/CT/...0.1.tar.gz 17:31
17:40 robertle joined 17:58 araraloren left 18:03 pharv joined 18:04 aindilis left 18:05 aindilis joined 18:07 captain-adequate joined 18:10 domidumont joined 18:13 pharv left 18:14 pharv joined 18:26 sena_kun joined 18:32 [particle]1 joined, [particle] left 18:37 wamba left 18:40 Kaiepi left 18:42 Kaiepi joined 18:45 daemon left 18:48 daemon joined, Kaiepi left 18:49 daemon is now known as Guest88621, khisanth_ left, Guest88621 left 18:54 espadrine joined 18:59 darutoko left 19:02 khisanth_ joined 19:10 Alchemy joined, Alchemy left 19:11 Alchemy joined 19:12 Alchemy is now known as Guest80966, Guest80966 left, Guest80966 joined 19:13 Guest80966 is now known as daemon 19:18 cfa joined 19:29 pharv left 19:30 pharv joined 19:31 pharv left, pharv joined 19:32 releasable6 left, releasable6 joined 19:34 pharv_ joined, pharv left
Geth doc: 63b6c5b781 | (Zoffix Znet)++ | doc/Type/Metamodel/ClassHOW.pod6
Fix docs for value of failed .^lookup call
19:35
doc: 07c4c7b3c6 | (Zoffix Znet)++ | 2 files
Fix/clarify value for failed .^lookup/.^find_method

And include examples to test for failed cases.
Fixes github.com/perl6/doc/issues/1837 D#1837 Propspec: github.com/perl6/roast/commit/931e8d0e17
synopsebot Link: doc.perl6.org/type/Metamodel::ClassHOW
synopsebot D#1837 [closed]: github.com/perl6/doc/issues/1837 `lookup` ClassHOW method description is wrong
cfa so, i dug into the whole package vs. module issue a little bit further (following on from a discussion with Zoffix a couple of days back). if the following is correct, i think it would be worth documenting on the modules page? 19:36
it seems that a .pm6 file that doesn't declare itself as a module compunit targets the GLOBAL package (as indicated by $?PACKAGE). since subs without declarators are implicitly `my`, non-exported subs are inaccessible outside of the file (i.e. lexical) scope while exported subs (is export) from these "non module" packages are added to the GLOBAL namespace table---this is all probably in line with user
expectation. 19:37
the surprise comes with `our` subs (or vars): these are also added to GLOBAL since that's the current package. so, writing `our sub say { ... }` in your .pm6 file will clobber the existing builtin.
now, if we declare that the file is a module compunit, we're no longer targeting the GLOBAL package; `our` symbols work as expected as they don't bleed into GLOBAL and can be accessed via the module name.
is the above accurate and if so, do folks agree that we need to document this? 19:38
moritz cfa: 'our sub say { }' also creates a lexical alias, which hides the builtin *inside* the module 19:40
cfa: but if you 'use' that module in your own code, that code's say() calls still use the builtin 19:41
cfa oh, interseting 19:42
interesting*
ah yes, that won't clobber 'say' in the caller context 19:43
robertle can anyone tell me where warn() is defined? I seem to be unable to find it in tghe 19:44
rakudo source
cfa control.pm6
multi sub warn, i think?
moritz yep 19:45
cfa moritz: so, the modules page opens with a very muddled description of modules (usually a file or files, typically packages, etc.)
robertle k, thanks! 19:46
19:46 pierre joined
cfa moritz: i'm thinking it would be better to open with a discussion of how one goes about encapsulating code and data, demonstrating the pitfalls of just wrapping things in a .pm6 and then introducing the module compunit and unit keyword 19:46
thoughts?
moritz cfa: I think the modules page should start with a clear explanation of what a module is, and what it's for 19:47
19:47 ufobat left
moritz cfa: but modules aren't the only way to encapsulate code (hey, we have classes and roles), so I'm not sure that's the best approach 19:47
robertle what I don't understand is why the exception lists the source location where I called warn(), rather than the location within warn() where nqp::throw is being called. magic? 19:48
moritz robertle: basically the backtrace printer excludes locations from src/core/, because they tend to be not really useful for the user 19:49
robertle: and warn() just takes the first line of the "public" backtrace
cfa moritz: agreed on all points
robertle ah! so if I want to achieve something similar in my custom warning routine, I am out of luck (unless I put it in core)? 19:50
moritz robertle: you can see the full backtrace of any excption with print $ex.backtrace.full
cfa moritz: i guess i'm saying we need a clearer explanation of what a .pm6 file actually is, what can go in there, what different compunits do, etc.
moritz robertle: I don't think so; you might have success with subclassing Backtrace, or some such
19:50 pierre left
robertle I'll play around a bit... 19:51
moritz m: sub f() { die }; try f(); print $!.backtrace.full()
camelia in method throw at SETTING::src/core/Exception.pm6 line 57
in sub die at SETTING::src/core/control.pm6 line 170
in sub f at <tmp> line 1
in code at <tmp> line 1
in block <unit> at <tmp> line 1
cfa moritz: but in the case of just wanting to package up a few functions, there needs to be a warning against doing so without specifying unit, i think
moritz cfa: I don't think so
it's not dangerous 19:52
cfa perhaps not dangerous, but i'd argue surprising
like, this stuff should be obvious
i guess that's all i'm saying 19:53
Geth doc: 0726163793 | (Zoffix Znet)++ | doc/Type/Iterator.pod6
Clarify .count-only/.bool-only…

  …must adjust to account for already-pulled values.
Spotted misinformation:
  www.reddit.com/r/perl6/comments/82...1/dv9hqgl/
Propspec:
  github.com/perl6/roast/commit/88a1...93f2d99b97
synopsebot Link: doc.perl6.org/type/Iterator
cfa i'm speaking from the perspective of having to try stuff out to understand what's going on with namespacing etc.; we just need something in place that obviates that 19:54
moritz cfa: then please add those aspects to the page
19:54 bisectable6 left, bisectable6 joined, ChanServ sets mode: +v bisectable6 19:55 Zoffix joined
cfa so long as you think i've got the important details correct above, i can give it a whirl 19:55
didn't want to add misleading or incorrect documentation
Zoffix robertle: FWIW routines have .line and .file method that can tell you where they're defined. For Rakudo core, there's also CoreHacker::Sourcery module and our SourceBaby bot that wrap .line/.file inside helper routines 19:56
s: &warn
SourceBaby Zoffix, Sauce is at github.com/rakudo/rakudo/blob/2652...l.pm6#L186
Zoffix ^ like that
m: say [.line, .file] with &warn
camelia [186 SETTING::src/core/control.pm6]
Zoffix robertle: and "is from core" magic isn't too big: github.com/rakudo/rakudo/blob/mast...#L144-L161 19:57
for backtraces I mean. Tho it's really hackish 19:58
eco: CoreHackery::Sourcery 20:00
buggable Zoffix, Nothing found
Zoffix eco: Sourcery
buggable Zoffix, CoreHackers::Sourcery 'Helper for showing actual source code locations of core subs and methods': github.com/zoffixznet/perl6-CoreHa...s-Sourcery
20:00 Zoffix left
cfa moritz: re: 'clear explanation of what a module is', this isn't actually clear to me. it seems to refer to .pm6 contents and module { ... } 20:01
what else does the term cover? 20:02
robertle tried a CONTROL phaser, but that
seems to be fundamentally broken?
cfa (that question's for everyone, not just moritz)
moritz that's the real problem, isn't it? :-) 20:03
cfa yes
compounded for me because i'm going by what the docs say :)
moritz so, a module is a metaclass with certain capabilities
m: module A { }; say A.HOW 20:04
camelia Perl6::Metamodel::ModuleHOW.new
cfa yeah, so .HOW on a 'unit module' is Perl6::Metamodel::ModuleHOW.new
20:04 pharv_ left
cfa but a package Foo.pm6 without unit isn't even registered as symbol afaict 20:04
moritz the "unit" is just syntactic sugar for putting module foo { ... } around the whole thing, without having to indent everything
cfa yeah
that much i get
but we use 'module' to refer to a .pm6 too, or at least seem to in the documentation 20:05
moritz yes, and that's where the confusion starts
cfa yeah
so i'm calling that a package
but i'm not sure that's correct either
moritz nah, a package is just something of metaclass PackageHOW
a compunit is closer 20:06
20:06 pharv joined
cfa so is Foo.pm6 just a file that use/require knows how to locate on disk? 20:06
moritz and to make the confusion perfect, we also say things like "DBIish is a module", but we mean the whole distribution with that
cfa where the contents (does it have module { ... }, class { ... } etc.) really determines its packageness, moduleness, etc?
moritz so all .pm6 files, the META file etc.
cfa aiee 20:07
moritz cfa: sounds about right
cfa okay
20:07 ChoHag joined
cfa i think this is a good starting point 20:07
japhb
.oO( We need sigils to differentiate these meanings! )
cfa the bit in the docs about module meaning different things could probably be saved for later rather than used at the outset
define what a proper module is, refer to slang use later
and by slang i mean slang not slang 20:08
:/
20:10 Zoffix joined
Zoffix robertle: no, it should work fine. What part looks broken? 20:10
m: warn 'meows'; say 42; CONTROL { when CX::Warn { say "Thou shall not $_"; .resume } }
camelia Thou shall not meows
42
Zoffix ain't got much docs for it tho it seems 20:12
20:13 domidumont left, pharv left 20:14 pharv joined
robertle m: CONTROL { }; warn ""; 20:14
camelia Warning: something's wrong
MoarVM panic: Trying to unwind over wrong handler
Zoffix Filed as R#1605 20:17
synopsebot R#1605 [open]: github.com/rakudo/rakudo/issues/1605 `CONTROL { }; warn "";` says Trying to unwind over wrong handler
robertle m: warn 'meows'; say 42; CONTROL { when CX::Warn { say "Thou shall not $_"; .rethrow } } 20:18
camelia Thou shall not meows
meows
MoarVM panic: Trying to unwind over wrong handler
robertle .resume works though...
Zoffix Doesn't quite do the trick with CX::Take tho, 'cause .throw/.rethrow unwinds over wrong things 20:19
robertle found another ticket about the same thing: R#572 20:21
synopsebot R#572 [open]: github.com/rakudo/rakudo/pull/572 [has conflicts] Let NativeCall map `int` to `longlong`
robertle no, one moarvm!
Geth doc: 272850d224 | (Zoffix Znet)++ | doc/Language/phasers.pod6
Include rudimentary example for CONTROL phaser
20:22
synopsebot Link: doc.perl6.org/language/phasers
Zoffix M#572
synopsebot M#572 [open]: github.com/MoarVM/MoarVM/issues/572 MoarVM panic with CONTROL block
Zoffix M => Moar, R => Rakudo S => Spec (roast) D => Docs 20:23
robertle I was hoping I could modify the exception and then rethrow it..
Zoffix Along with some variations: github.com/perl6/synopsebot/blob/m...m6#L10-L21 + RT for RT tickets 20:24
20:26 Zoffix left 20:30 rindolf left 20:32 pharv left 20:34 pharv joined 20:38 pharv left 20:40 pierre joined 20:41 pharv joined 20:45 pierre left 20:46 Kaiepi joined
Geth doc: 3fcd5c8e88 | (Will "Coke" Coleda)++ | doc/Type/Iterator.pod6
fix typo
21:05
doc: 513c3e80b6 | (Will "Coke" Coleda)++ | xt/words.pws
learn new word
synopsebot Link: doc.perl6.org/type/Iterator
21:11 athenot left 21:12 athenot joined 21:14 athenot left 21:15 committable6 left, committable6 joined, ChanServ sets mode: +v committable6 21:18 comborico1611 joined 21:25 khw left 21:29 khw joined 21:31 sena_kun left, koto joined 21:33 khw left 21:34 koto left 22:04 skids left, committable6 left 22:05 committable6 joined, ChanServ sets mode: +v committable6 22:06 khisanth_ left 22:11 Kaiepi left, Kaiepi joined, khisanth_ joined 22:14 bisectable6 left 22:15 bisectable6 joined 22:16 robertle left, kaare__ joined 22:17 kaare_ left 22:27 tbrowder left, tbrowder_ joined 22:32 khw joined 22:40 pierre joined 22:41 pierre left 22:42 pierre joined, mniip left 22:44 khisanth_ left 22:45 mniip joined 22:46 pierre left 22:50 wamba joined 22:54 khisanth_ joined
jdv79 timotimo: you think i could just take the Cancellation obj from $sched.cue() to kill a promise i don't need anymore? 22:56
haven't tried it yet but noticed it the other day
of course i'd have to make my own Promise code since Promise never returns that obj.
timotimo i'm not actually sure how cancellations work in general. i know that for IO-related things they translate into a specific function being called from the async task ops table it has attached 22:57
that's how i made signal handler unsubscribable
jdv79 uh ok
i'll test it this weekend 22:58
timotimo it definitely won't cause code that was passed to create the promise in question to stop execution
that sentence was weird
jdv79 huh? 22:59
so if i have a Promise.in().then() it won't cancel the timer and thus abort the then? 23:00
same question regarding Promise.start(...await $chan...)?
oh 6pm - time to bounce 23:01
23:02 maettu left 23:05 lichtkind left, natrys left
jnthn You can't "kill a Promise" because a Promise is just a data structure for conveying a result. start { } is a way of scheduling code to run and getting the result conveyed through a Promise. Any cancellation of code needs to be done explicitly and cooperatively. 23:13
Ditto for Promise.start and .then 23:14
Geth doc: gfldex++ created pull request #1839:
tell that whenever reacts to a closed Channel
23:15
gfldex /type/Channel could do with better examples too 23:17
23:17 lichtkind joined 23:28 Kaiepi left 23:32 Kaiepi joined 23:33 Kaiepi left 23:34 Kaiepi joined 23:38 Kaiepi left, Kaiepi joined 23:42 Kaiepi left, Kaiepi joined 23:45 comborico1611 left 23:49 pierre joined 23:52 lichtkind left 23:57 skids joined