🦋 Welcome to the former MAIN() IRC channel of the Raku Programming Language (raku.org). This channel has moved to Libera (irc.libera.chat #raku)
Set by lizmat on 23 May 2021.
00:13 p6steve left 00:26 p6steve joined 00:31 p6steve left 00:56 lichtkind left
codesections m: class A { my atomicint $n = 0; has Int $.id=$n⚛++ }; say A.new; dd A.new; 00:58
camelia A.new(id => 0)
A.new(id => 1)
codesections is ^^^ correct/threadsafe, or does $.id need to be an atomicint too?
00:59 p6steve joined
moon-child correct wrt what? 01:00
if $.id is never mutated concurrently then that's fine 01:01
codesections ok, thanks, that's what I was asking 01:02
(And what I thought)
01:04 p6steve left
codesections (And with that API, it can't be mutated – concurrently or otherwise. Though of course it could be it more methods were added) 01:05
01:17 p6steve joined 01:21 p6steve left 01:29 colomon joined 01:31 colomon left 01:49 p6steve joined 01:52 rbt left 01:53 rbt joined 01:54 p6steve left
Xliff codesections: New advent PR up! :) 02:04
Day 19 was a bit evil.
codesections Merged! 02:05
Xliff Thanks
02:08 p6steve joined 02:13 p6steve left
japhb advent of what? 02:14
codesections github.com/codesections/advent-of-raku-2020
02:34 ggoebel joined 02:42 p6steve joined
moon-child m: say (√5) 02:46
camelia 5===SORRY!5=== Error while compiling <tmp>
Bogus statement
at <tmp>:1
------> 3say (7⏏5√5)
expecting any of:
prefix
term
moon-child thoughts on prefix:<√> = &sqrt ?
(and infix:<√>(\b, \x) = x ** (1/b)) 02:47
02:48 p6steve left 02:59 p6steve joined
codesections m: say "what's wrong with { 5¯² }?" 03:03
camelia what's wrong with 0.04?
03:04 p6steve left
moon-child well, nothing's _wrong_ with it. One might as easily say: why have map, what's wrong with for? 03:05
TIMTOWTDI :)
codesections Fair :) 03:06
moon-child (also, your example doesn't work and I don't think there's a superscript / or ., so there's no concise way to do it atm) 03:07
GreaseMonkey Python philosophy of "There should be one-- and preferably only one --obvious way to do it" leads me to believe that the obvious way to implement a switch block is to use a dict which may or may not consist of callables
moon-child hmm, should 5 ** (1/3) be written 3√5 or ³√5?
GreaseMonkey i really need to learn the second part of tim toady bicarbonate because that sounds like the right philosophy
moon-child that is, should the latter syntax be enforced?
GreaseMonkey: I believe it goes 'but sometimes consistency can be a good thing', or something to that effect 03:08
GreaseMonkey i'm surprised that prefix:<√> doesn't exist, but the ¯² thing does 03:09
codesections I'd say so 3√5 looks too much like 3 x √5 (especially given the math context)
GreaseMonkey good point
moon-child truue 03:10
while we're dreaming can we get log₂8 = log(8,2)? 03:11
GreaseMonkey sub log₂8() { 2 } 03:12
wait that should be 3, not 2, whoops 03:13
codesections m: my %h is default(42); say %h<foo> 03:14
camelia 42
codesections is there any way to do ^^^^ with a $-sigiled Map?
03:14 ggoebel left
codesections m: my Map $m is default(42) 03:14
camelia 5===SORRY!5=== Error while compiling <tmp>
Default value '42' will never bind to a parameter of type Map
at <tmp>:1
------> 3my Map $m is default(42)7⏏5<EOL>
expecting any of:
constraint
03:32 p6steve joined
raydiak m: my % is Map is default(42) 03:33
camelia 5===SORRY!5=== Error while compiling <tmp>
is default on shaped Map not yet implemented. Sorry.
at <tmp>:1
------> 3my % is Map is default(42)7⏏5<EOL>
expecting any of:
constraint
raydiak ^ not sure that default works on Map at all atm
codesections Ah, makes sense. 03:34
raydiak or else that syntax confuses it... 03:36
m: my % is Hash is default(42)
camelia 5===SORRY!5=== Error while compiling <tmp>
is default on shaped Hash not yet implemented. Sorry.
at <tmp>:1
------> 3my % is Hash is default(42)7⏏5<EOL>
expecting any of:
constraint
raydiak but...
m: dd my % is default(42)
camelia Hash % = {}
03:36 p6steve left
raydiak not sure which part of that it thinks is a shape declaration :) 03:37
anyway, if you could do with a Hash, you could at least write 03:38
m: my $h = (my % is default(42)); say $h<foo>
camelia 42
moon-child m: my %a; my %b is Hash; say %a eqv %b 03:39
camelia True
codesections m: my Map() $h = (my % is default(42)); say $h<foo> 03:40
camelia 42
codesections m: my Map() $h = (my % is default(42)); say $h<foo>; say $h.WHAT
camelia 42
(Hash)
raydiak rememeber that Hash is a Map, so it does pass your type constraint :) 03:41
codesections ...oh, right
that one still seems backwards to me 03:42
m: say SetHash ~~ Set; say Set ~~ SetHash
camelia False
False
raydiak dinner &
03:46 guifa joined 03:47 guifa left 03:49 dogbert17 joined 03:50 dogbert11 joined 03:53 dogbert17 left 04:06 p6steve joined 04:11 p6steve left 04:20 dogbert17 joined 04:23 dogbert11 left 04:24 p6steve joined 04:28 p6steve left 04:30 coverable6 joined 04:40 p6steve joined 04:45 p6steve left 04:58 p6steve joined 05:02 p6steve left 05:05 hankache joined 05:16 p6steve joined 05:20 reportable6 joined, p6steve left 05:32 p6steve joined 05:36 p6steve left 05:49 p6steve joined, p6steve left 06:02 reportable6 left 06:11 muffindrake joined
muffindrake Hey, where can I get the raku docs on one page or one file? 06:11
The one-page view on the website is a 404 06:12
06:28 stoned75 joined
raydiak yes the docs have grown some wrinkles over the years that we're working on ironing out. it looks like you can still find that at docs.raku.org/perl6.html though some of the anchor links here and there seem to be broken 06:47
muffindrake That'll work nicely, thanks! 06:51
raydiak happy to help
moon-child m: +"-²" 06:54
camelia WARNINGS for <tmp>:
Useless use of "+" in expression "+\"-²\"" in sink context (line 1)
Cannot convert string to number: base-10 number must begin with valid digits or '.' in '3-⏏5²' (indicated by ⏏)
in block <unit> at <tmp> line 1
moon-child whyn't?
given 06:56
actually, forget the -; why doesn't +"²" evaluate to 2?
07:10 dolmen joined 07:15 reportable6 joined 07:16 raydiak joined
raydiak m: say (+"²").backtrace.full 07:17
camelia in block at SETTING::src/core.c/allomorphs.pm6 line 290
in sub parse-int-frac-exp at SETTING::src/core.c/allomorphs.pm6 line 349
in sub parse-simple-number at SETTING::src/core.c/allomorphs.pm6 line 525
in sub parse-real at SETTING::src
raydiak definitely a bug, that's what I'm following to try to track it down
near as I can tell so far, the problem is likely somewhere in github.com/MoarVM/MoarVM/blob/mast...1581-L1731 07:28
.u ²
unicodable6 raydiak, U+00B2 SUPERSCRIPT TWO [No] (²)
raydiak I suppose the other question is why it works outside of a string...maybe we're handling that before it gets passed to moar through nqp, like in the grammar/actions or something 07:32
MasterDuke it's an operator, it doesn't have a numeric value. see src/Perl6/Actions.nqp:8072 07:43
raydiak but 07:44
m: say ²
camelia 2
raydiak m: say ².WHAT
camelia (Int)
07:46 Doc_Holliwood left
raydiak seems like val() ought to reflect that, no? 07:49
dpk m: say '²' 07:51
camelia ²
dpk oh, i see why
m: say ५ + ४ 07:52
camelia 9
raydiak yes we support any unicode numeric chars. but the superscripts like ² have dual meaning. it can be used as a term, or as a postfix exponentiation operator 07:55
m: say ²; say 2² 07:56
camelia 2
4
moon-child m: say ²² 07:59
camelia 4
moon-child another thing--should "2²" == 4? 08:00
imo yes, but
raydiak idk about expecting that string to numify by itself. ² is an operator in that context, not part of the term 08:01
ecocode- lizmat: is logs.liz.nl running on your laptop?
moon-child - is also an operator, but "-2" == -2
raydiak val() handles negative numbers, decimals, scientific notation, and radixes. that is all. not operators. yes prefix - parses as an op in raku, but that is a different semantic than what val() does 08:04
dpk personally it seems like a bad idea to me to give special behaviours to characters that will change if a source code file gets saved in NFKC or NFKD
raydiak you can only directly numify strings that look like some form of a number, not whole mathematical operations. you'd have to EVAL for full math op functionality, and that is expected and good (for performance) 08:05
moon-child why does 1e2 look like some form of a number, but 10² does not? 08:06
obviously I wouldn't expect to numify e.g. 5×10 or x² or anything like that
dpk: afaik raku normalizes everything, so I don't think it would make a difference? 08:07
raydiak I'd guess it's just a typical convention we carried over from most programming languages. most of them treat scientific notation as a single term, not an operator. sci notation is allowed in all kinds of places where you can't put operators. like json, for one out of countless examples 08:09
dpk regardless of what Raku does, my editor might perform a compatibility normalization when i save
if i paste source code onto some website, that website might do compatibility normalization, etc
(the 'K' in the normalization forms)
² normalizes in those forms to a normal 2 08:10
raydiak I don't know enough about the nitty-gritty of unicode to have anything intelligent to offer about that. hopefully more people will chime in soon here. it's morning in europe, so maybe... 08:11
08:12 ecocode joined
raydiak if you want a logical argument for why e notation is a term and not an op, I can't give you one because I really don't agree with it. it's just been like that in tech for longer than I've been alive. if you ask me, anything other than nonnegative integers should be an op. not e, not negative, not decimals. I even wrote a toy parser which works that way 08:19
moon-child that's fair 08:20
Altreus sounds like implementation details 08:21
I suppose if they leak through in val() that's worthy of a debate before raku properly solidifies 08:22
raydiak well we got here talking about val("²")
m: say ² 08:23
camelia 2
raydiak m: say +"²"
camelia Cannot convert string to number: base-10 number must begin with valid digits or '.' in '3⏏5²' (indicated by ⏏)
in block <unit> at <tmp> line 1
08:23 rbt left, rbt joined
Altreus m: say val("1+2") 08:24
camelia 1+2
Altreus m
raydiak m: say +"1+2"
camelia Cannot convert string to number: imaginary part of complex number must be followed by 'i' or '\i' in '031+2⏏' (indicated by ⏏)
in block <unit> at <tmp> line 1
Altreus m: say +"1+2i" 08:25
camelia 1+2i
raydiak heh, didn't even know cal handled complex...
s/cal/val/
Altreus That's another not-operator construct then
At least there's not just one
raydiak seems so
08:26 ecocode_ joined
moon-child hmmm, that is also handled inconsistently 08:27
m: say -2.abs; say -2 .abs; say (-2).abs; say 1+i.abs; say 1+i .abs; say (1+i).abs
camelia -2
2
2
2
2
1.4142135623730951
Altreus binding I guess 08:29
I'm starting to think that I disagree with raydiak and I'd prefer things *not* to be operators! 08:30
nah that's not logically sound
But mathematical operators should probably bind tighter to numbers than other language constructs
cos it seems quite likely that you intended to apply the maths to the number
moon-child apl goes that way. monadic - is negation, but ¯ is used for negative literals. j joins the real and imaginary parts of complex numbers (so 1j2 in apl is 1+2i in raku)
Altreus Sure, but if raku did everything as operators and normalised maths at compile time then 1+2i is the same as x+yi 08:31
instead of a specially-parsed string
raydiak but if you make it bind tighter to numbers, then when you substitute in $n, the behavior becomes inconsistent with literals 08:32
moon-child yeah. That's why apl uses different symbols for each
e.g. you can't say ¯x, only ¯5
raydiak interesting 08:33
moon-child (-5 and -x are both ok, though there's no very good reason to write -5)
08:33 rbt left
Altreus raydiak: that makes sense, but then unary minus seems like it should bind tighter than method calls anyway 08:33
-$x.foo always means (-$x).foo in my reading
ah but what of the others 08:34
moon-child I think the current precedence is better
Altreus $x+$y.foo
moon-child most methods are not on numbers, but many methods on non-numbers may return numbers. so -($x.foo) is more common than (-$x).foo
Altreus this is hard, let's go shopping
raydiak I can also see an argument for parsing prefix - as part of the term instead of an op at all 08:35
Altreus Is it bad that literals are treated differently from variables? 08:36
Altreus question everything
moon-child yes, and also you have problems with $x -1
Altreus cos an expression containing entirely literals can be entirely collapsed at compile time anyway 08:37
Ah, now we're talking
See in my head I've always liked the idea that spacing matters
moon-child really? I _hate_ that
Altreus -1 is a number so $x -1 is $x * -1
moon-child and raku agrees with me--whitespace is insignificant in regexes, unlike in literally every other languages' regex 08:38
also raku doesn't multiply adjacent terms, which would be a _big_ change
raydiak we don't have implicit multiplication because it leads to even more rabbit holes. I considered it in math::symbolic and...went shopping instead :)
Altreus true, I'm talking a bit more abstract than the language allows
But I think that's exactly why we can get away with no significant whitespace 08:39
Because there's no other interpretation of $x -1
moon-child til math::symbolic
Altreus although it wouldn't pass code review
moon-child that is cool
Altreus speaking of code review I should do $work work 08:40
raydiak e.g. I couldn't figure out which way people would expect x√y to work, things like that. and it has named vars, so is ab "ab" or "a*b"? all kinds of nasty business 08:43
moon-child I think the ultimate evolution of any cas is towards mathematica. Where you write something like nth-root(x, y), and it is rendered with a superscript x 08:46
i.e. syntax is not super important, and input and display need not be completely commensurate
raydiak m::s does that in places. e.g. x^2 will become x². it has a separate root op from exponentiation, though 08:48
evalable6 (exit code 1) 04===SORRY!04=== Er…
raydiak, Full output: gist.github.com/c07d2e69cce1da6398...029894a49d
raydiak heh oops. wasn't talking to you, evalable6 08:49
moon-child the mathematica cli renders x^2 as
2
x
which is kinda ugly on the one hand, but also more consistent (if you have, e.g. x^x) 08:50
raydiak true. I just revert to ^ in that case. but the strings it outputs are all usable as inputs, so keeping it all concisely on one line has its advantages
not that m::s is anything to compare with a serious cas like mathematica. it was a fun project, would need heavy refinement, expansion, and optimization to be a serious thing 08:52
it has bugs too, in places which are hard to track down and work with because I was too clever back then, wrote some really dense knots 08:54
passes all its tests and everything, but sometimes when I try to shove longer more complex stuff through, it chokes 08:56
moon-child well it still does more than my abandoned cas :)
raydiak the whole thing actually started as just a fun way to learn raku grammars... 08:57
I didn't even know actions yet so for a long time it just did this instead: github.com/raydiak/Math-Symbolic/b...L918-L1007 :D 08:59
09:00 Kaiepi left
raydiak one of many things I mean by "too clever" 09:01
09:02 hankache left, hankache joined
raydiak oh yeah and I forgot all about the MultiHash...it represents e.g. 2*x^2+3*x+4 internally as a hash keyed by hash like { { x => 2 } => 2, { x => 1 } => 3, {} => 4 } . just a variety of really "interesting" stuff going on in there 09:06
lizmat ecocode: no, I use my laptop for development, and an old iMac for "production" :-) 09:07
tellable6 2021-05-27T22:04:09Z #raku-dev <[Coke]> lizmat you said you were going to close github.com/rakudo/rakudo/issues/3748 a year ago, please consider again
moon-child apl has a 'decode' primitive that can represent polynomials. 5⊥2 3 4 ←→ 2*5^2 + 3*5 + 4. So ⊥∘2 3 4 ←→ -> x { 2*x^2 + 3*x + 4 } 09:11
probably that's an easier representation to do logic on polynomials. Though it gets less attractive when you have stuff like x^2 + xy + y^2
09:14 Kaiepi joined
raydiak I can certainly see advantages to that 09:16
moon-child how come there's no complex rat?
raydiak in raku? 09:17
moon-child yeah
raydiak m: dd val("1.2+3.4i") # isn't that what this is? 09:18
camelia ComplexStr.new(<1.2+3.4i>, "1.2+3.4i")
moon-child m: say (i/2).im.WHAT 09:19
camelia (Num)
moon-child m: say (1/2).WHAT
camelia (Rat)
raydiak hm. dunno 09:20
moon-child I guess complex will mostly come out of (and go into) trig and sqrt, and so likely won't be rational anyway?
or maybe it's to allow a stronger ordering of the numeric tower? 09:21
Altreus a rat king? 09:23
raydiak probably a lot easier to implement representation of the parts as one static type than changing under different circumstances
m: say i.im.WHAT # not Int
camelia (Num)
moon-child interestingly the re and im methods return Real, but the Real method returns a Num
(though as you point out they in practice return Num even when they don't have to)
raydiak well also, Real is a role, not a class 09:25
moon-child yes, but Int does Real 09:26
and i.im could be an Int without loss of precision
raydiak oh I see what you mean. again, it probably comes down to preserving the implementer's sanity, if I had to guess. or performance maybe 09:27
and what you said about "where does this thing fit into the class heirarchy" maybe has something to do with it 09:28
especially if you start manipulating it. raku doesn't magically change a Rat to an Int if you manipulate it into something with a denominator of 1, for instance. so you'd have to coerce it to do other non-Int operations on it 09:31
m: say (.5+.5).WHAT
camelia (Rat)
raydiak I'd bet your excellent point about commonly getting irrational complex numbers out of trig ops and roots and other things has a lot to do with why they just picked Num and stuck with it 09:34
Altreus I'm sure I understand these concepts but I feel like the conversation skipped over a lot 09:42
This is what happens when knowledgeable people converse; they don't fill in the shared knowledge
raydiak I feel more like I'm just used to only having half a clue what I or anyone else is talking about :D 09:44
like my last point about Int...was probably toally wrong, because you can just take an Int and do whatever with it, and it'll gradually type to whatever is necessary for precision 09:46
in my defense, I can feel my brain getting squishy from fatigue
moon-child 'only having half a clue what I or anyone else is talking about' can definitely relate
and I am definitely somewhat incoherenent from lack of sleep
incoherent
Altreus y'all should get some rest before you start using terms like y'all 09:47
raydiak I lived in Texas for a couple years...y'all is a hard habit to break
Altreus why thank you sah 09:52
09:53 tejr joined 09:54 rbt joined, rbt left, rbt joined
raydiak went shooting a couple times while I was there too. and got hit by a car. moved back home after 2 years with better aim, three missing teeth, and saying y'all. talk about going native... 09:56
though to be fair, I was in Austin, which is actually a really progressive college town 09:57
lizmat Austin is nice
rest of Texas, meh
loved the Ethiopian vegan restaurant in Austin 09:58
raydiak I went to several vegan restaurants, but don't recall an ethiopian one
lizmat www.foodrepublic.com/wp-content/up...late-2.jpg 09:59
09:59 rbt left 10:00 rbt joined
raydiak looks nice, I'd try it. I'm not vegan any more, but I gave it a shot for half a year while I was there 10:01
lost a noticable of strength, but had way more energy 10:02
noticable *amount* of 10:03
noticeable
I always get that one wrong
lizmat www.tripadvisor.com/Restaurant_Rev...Texas.html # hmmm..., appears they're just vegetarian friendly 10:04
10:06 sono left
raydiak ah, maybe that's why I never noticed it in my searches. I was pretty strict about the vegan thing 10:08
the prices don't look bad for that area though 10:10
lizmat yeah, the housing of that restaurant is definitely "studentesque", almost under the highway
and it definitely has a bit of a "shanty-town" feel 10:11
raydiak I miss the freeway frontage roads, that's a great idea. can't imagine why we don't have them up here in WA 10:12
10:17 sacomo left 10:20 synthmeat joined 10:24 sgrs joined
raydiak alright, I'm going to attempt sleep. was nice chatting moon-child, Altreus, lizmat, #raku. y'all have a good * now, ya hear? \o 10:28
lizmat sleep well! 10:29
Altreus why thank you sah 10:30
hmm strange lag
nn :)
10:39 morayj joined, sacomo joined 10:55 muffindrake left 11:05 rbt left, rbt joined, rbt left, rbt joined 11:08 RaycatWhoDat joined 11:20 dolmen left 11:24 lichtkind joined 11:35 morayj left, patrickb joined 11:37 dolmen joined 11:39 Doc_Holliwood joined 11:45 ecocode_ left 11:56 ggoebel joined 12:02 reportable6 left 12:05 reportable6 joined 12:09 Summer joined 12:19 CIAvash[m] joined, morayj joined 12:21 morayj left
lizmat Changed the layout on the daily pages on logs.liz.nl/raku/today in preparation for a more final design 12:22
hope people will like it 12:27
12:36 CIAvash[m] is now known as CIAvash
lizmat afk for a few hours& 12:38
Summer its a bit information dense for me, and it doesn't feel like the username boxes own the chat line boxes 12:40
13:10 dolmen left 13:21 dolmen joined
vrurg lizmat: I'd join Summer on his note. It's rather hard to follow the current way. 13:25
Summer It'd take a whole rework to do this, but i usually find starting with raw-ish irc logs and then using spans to hide and show parts of each line or whatever, the best option (mainly because then it allows people to copy paste from the log) 13:27
jdv needs "current" for me
the formatting isnt unusable, to me. 13:28
i think moritz's copy even had some sort of tailing ability unlike vanilla collabti, iirc. 13:29
13:35 rbt left
Altreus Agree with the names thing. Feels like they should be side-by-side with the message box 13:56
cognominal lizmat: So nice a toot but he trafic of people joining and leaving should be opt in. And now that username are specially hiligthed they could go with the first of consecutive messages. 14:02
14:10 vrurg_ joined 14:12 vrurg left, sena_kun joined 14:13 Summer left 14:17 dolmen left
codesections as a Mastodon user, I found the typo about it being a "nice toot" briefly very confusing 14:17
(mastodon calls it's micro posts "toots" rather that "tweets") 14:18
s/it's/its
14:21 Sgeo joined 14:25 guifa joined 14:28 guifa left 14:41 dolmen joined 15:12 b2gills joined 15:17 stoned75 left 15:21 jmcgnh left 15:37 dolmen left 15:43 jmcgnh joined 15:44 vrurg joined, vrurg_ left 15:48 dolmen joined 16:07 jmcgnh left 16:10 jmcgnh joined 16:44 dolmen left 16:52 squashable6 left 16:55 squashable6 joined
codesections Do you think we can/should have a warning for this: I ran into a bug in my code because, when I should have done this (or, honestly, should have used an if/else) 17:09
m: say (1 ?? do {my $a = 0; $a+1} !! 'false') 17:10
camelia 1
codesections I instead had:
m: say (1 ?? (my $a = 0; $a+1) !! 'false') 17:11
camelia (0 1)
codesections (that's golfed, obviously, which makes it much more obvious). It took me quite a bit to realize that the ; was being parsed as the same as a comma, rather than as a statement terminator 17:12
17:16 rbt joined
codesections checking the docs, I see that I could also have validly written: 17:17
m: say (1 ?? $(my $a = 0; $a+1) !! 'false')
camelia 1
gfldex QAST::Stmts <wanted> :multislice<?> my $a = 0; $a+1 17:19
That's what Rakudo thinks it is given. 17:20
raydiak I can see why you'd want some feedback there, but I don't see how we could catch it without throwing false positives when people actually mean: 17:21
m: say (1,2; 3,4)
camelia ((1 2) (3 4))
codesections I guess one option would be to warn if that expression contains a ; but no , 17:22
gfldex m: say (1 ?? {my $a = 0; $a+1}() !! 'false')
camelia 1
codesections yeah, there are plenty of ways to do it correctly: $(…), do {…}, {…}() all work 17:24
raydiak m: m: say (1 ?? (my $a = 0)+1 !! 'false')
camelia 1
raydiak I supposed I could see an argument for that 17:25
warning on ; with no , I mean
gfldex m: my @a{1;2} = 42; dd @a; 17:26
camelia 5===SORRY!5=== Error while compiling <tmp>
The {} shape syntax with the @ sigil is reserved
at <tmp>:1
------> 3my @a{1;27⏏5} = 42; dd @a;
expecting any of:
statement end
statement modifier
statement…
gfldex m: my @a; @a{1;2} = 42; dd @a;
camelia Type Array does not support associative indexing.
in block <unit> at <tmp> line 1
gfldex m: my @a; @a[1;2] = 42; dd @a;
camelia Array @a = [Any, [Any, Any, 42]]
gfldex A multislice can show up in plenty of spots.
moon-child m: my @a; @a[my $x = 1;$x+1] = 424; dd @a 17:27
camelia Array @a = [Any, [Any, Any, 424]]
raydiak ah, right 17:28
codesections Hmm, I don't know the QAST internals as well as I want to, but couldn't we annotate that we're inside a ternary? 17:30
gfldex And how deep do you wont to go there? You might actually have a multi-dim slice inside a grouped expression. 17:31
I burned my fingers on () inside a tenery and my code got better. 17:32
Programmers are smart and tend to prefer education over bans. 17:33
codesections Yeah, fair. Though on the other hand, it's just a warning – I don't know that people needing `quietly` in some edge cases is _that_ high a price
patrickb m: my @a = 'a', 'b'; my @b = 'c', 'd'; my (@c, @d) = @a, @b; 17:34
camelia ( no output )
gfldex A litte warning in the docs in the right places would be nice tho.
patrickb m: my @a = 'a', 'b'; my @b = 'c', 'd'; my (@c, @d) = @a, @b; say @c; say @d;
camelia [[a b] [c d]]
[]
patrickb How can I make the above assign @a to @c and @b to @d? 17:35
gfldex m: my @a = 'a', 'b'; my @b = 'c', 'd'; my (@c, @d) := @a, @b; say @c; say @d; 17:36
camelia [a b]
[c d]
ugexe m: my @a = 'a', 'b'; my @b = 'c', 'd'; my (@c, @d) := @a, @b; say @c; say @d;
camelia [a b]
[c d]
ugexe heh
patrickb :-) 17:37
Thanks!
codesections gfldex: Raku currently is pretty free with its warnings, though: there are plenty of times I *want* to use a undefined value in Str context, and thus either get a warning, use quietly, or use //
17:48 zostay joined
raydiak I don't think there is a definitive reason that it can't/shouldn't warn, more of a judgement call. big shaded region, not a sharp line. though fwiw, I don't find "I already stumble over false positive warnings all the time so let's add another" to be a persuasive argument :) 17:57
I like the undef in str warning though, personally. that really commonly does mean something has gone wrong, in the cases of my own code 17:59
codesections ha! :D I was more trying to say that, given the number of warnings we currently get, users might expect warnings for softening like this (there's some value in consistency) 18:00
re: string warning – yeah, I agree. I get it as a false positive a fair bit, but mostly in debugging code (I might do something like `note "the current foo: $bar"`). But I don't mind a bit of extra noise in the debug output 18:02
gfldex This warning feels more like a target for a linter to me.
18:02 reportable6 left 18:03 hankache left 18:04 reportable6 joined
raydiak sure consistency, I just mean the same idea could be inverted to say that we should back off some of the warnings. like this one I hit the other day: 18:04
m: 0 ==> say
camelia 5===SORRY!5===
Argument to "say" seems to be malformed
at <tmp>:1
------> 030 ==> say7⏏5<EOL>
Other potential difficulties:
Unsupported use of bare "say". In Raku please use: .say if you meant
to call it as a method on $…
raydiak and yet
m: sub sayQuietly ($_) {.say}; 0 ==> sayQuietly 18:05
camelia 0
codesections but that's not a warning – that's an error. Which seems like a higher bar/more like something we should back off from 18:06
raydiak the error is something else. maybe a special case in the parser or idk what. but the warning is the part after other potential difficulties 18:07
codesections I don't think they're unrelated, though 18:08
gfldex m: multi sayQuietly ($_) {.say}; 0 ==> sayQuietly
camelia 0
codesections m: 0 ==> say()
camelia 0
raydiak I can certainly see the case you're making for wanting (;) to warn. I guess a lot of the decision would just come down to how often we suspect it would be intentional or not
yes, doing it with () works. but with something that isn't "say", you don't need the ()
gfldex m: multi sayQuietly {}; multi sayQuietly ($_) {.say}; 0 ==> sayQuietly 18:09
camelia 0
18:10 sono joined
raydiak now that we're raku instead of perl 6 I almost want to rip out all the P5ism warnings. but that's probably going a bit far 18:10
codesections raydiak: yeah, agreed that it's something with say. I just think it's the same thing that makes say throw the error 18:11
gfldex `0 ==> say` not working is a bug
codesections yeah, agreed
and I think that bug is also what causes the spurious warning (it's one issue, not two) 18:12
El_Che raydiak: I don't think p5 centrism has a case today as it did when it was the "previous" version. 18:15
raydiak looks like it actually does that same error and warning both, for all of: say print abs chomp chop chr cos defined exp lc log mkdir ord reverse rmdir sin split sqrt uc unlink fc 18:26
for consistency, I'd rather see it do the same dispatch error you get for e.g.: 18:27
m: abs()
camelia 5===SORRY!5=== Error while compiling <tmp>
Calling abs() will never work with signature of the proto ($, *%)
at <tmp>:1
------> 3<BOL>7⏏5abs()
raydiak instead of
m: 0 ==> abs
camelia 5===SORRY!5===
Argument to "abs" seems to be malformed
at <tmp>:1
------> 030 ==> abs7⏏5<EOL>
Other potential difficulties:
Unsupported use of bare "abs". In Raku please use: .abs if you meant
to call it as a method on $…
raydiak though again, doing it in a feed is probably a bug like codesections already pointed out 18:29
should just work
and I wonder why we chose those ones in particular. thought there were a lot more than that which operated on $_ in p5 18:30
for that matter, I sometimes kinda miss being able to do all those on $_ without a . in front. guess it's in the name of self-clocking or somesuch 18:32
18:32 hankache joined, vodkra joined
raydiak or gfldex pointed out. the person with the nick, you know who you are 18:36
gfldex Most of the time I do know who I am. :) 18:37
raydiak ha :) 18:38
18:50 demostanis[m] joined
demostanis[m] Libera chat!!1 18:50
18:53 hankache left
raydiak demostanis[m]!!1 :D 18:55
oh, hey...we have working matrix bridge now?
dpk libera chat, Domine, de Koreae principe, in die illa tremenda … 18:56
demostanis[m] Since yesterday 18:57
raydiak nice!
heh dpk, agreed 18:59
juanfra the matrix bridge is not stable yet. they are testing all the thing.
write a direct message to @appservice:libera.chat if you want to use it 19:00
"!help" will give you the instructions
raydiak some day I should try this matrix thing everyone's talking about 19:01
vodkra raydiak: Matrix is very nice to put some animated stickers and pretty emojis :D 19:04
raydiak *facepalm* 19:06
vodkra raydiak: But it has one big backward. There's no reference server coded in Raku as I know :X 19:07
raydiak I remember when people complained that color support in mIRC was annoying. now we can't get enough animated stickers and emojis? 19:08
vodkra: so you're gonna fix that for us? :)
19:08 m6locks left
juanfra they want to remove all the "pretty" things for the irc bridges, so irc users don't see the weird messages 19:08
a raku client lib for matrix would be really nice 19:10
raydiak but if they filter them out how do I get my daily fix of winking grinning yellow circles dancing to and fro? 19:12
with their tongues sticking out
vodkra raydiak: Errr... Depends on available time I have to work on this unofficial project about the server side :V 19:14
raydiak c'mon you know you'd rather be writing Raku :D 19:19
that's the ticket, expand the community and ecosystem through peer pressure. I double dog dare you to write some Raku! 19:26
demostanis[m] <juanfra "write a direct message to @appse"> What do you mean? I didn't have to do that 19:34
There's a hidden service too now!!1 19:35
juanfra you will need to send your nick and password to appservice or your user will not receive private messages from IRC users 19:37
and your user will not be able to join channels only available for registered users 19:39
raydiak wrt my earlier bug: 19:55
m: 0 ==> say
camelia 5===SORRY!5===
Argument to "say" seems to be malformed
at <tmp>:1
------> 030 ==> say7⏏5<EOL>
Other potential difficulties:
Unsupported use of bare "say". In Raku please use: .say if you meant
to call it as a method on $…
raydiak interestingly, adding a trailing ; fixes the first error
m: 0 ==> say;
camelia 5===SORRY!5=== Error while compiling <tmp>
Unsupported use of bare "say". In Raku please use: .say if you meant
to call it as a method on $_, or use an explicit invocant or argument,
or use &say to refer to the function as a noun.
at <tmp…
raydiak and this does work:
m: use isms <Perl5>; 0 ==> say
camelia 0
gfldex Please file an issue. 19:56
raydiak I will, I'm just still digging at it for a complete understanding. or maybe a PR instead depending on where the digging ends up 19:57
gfldex I'm still contemplating www.reddit.com/r/rakulang/comments...;context=3 19:58
I know there is a bug but I can't quite tell which part is wrong. 19:59
raydiak off the top of my head, I'd vote that an error should be thrown when you try to define OUTER 20:01
though I don't know much about how labels are implemented, tbh. didn't even know it was an actual object and goes in the lexpad, thought maybe it was just a syntactic construct 20:03
20:03 vodkra is now known as VendrediOuLeTrol
gfldex I'm not so sure. One might pull in a module with `use` that, after having a new version released, introduces a new package. So shadowing a label with a package might cause future bugs. 20:03
20:04 VendrediOuLeTrol is now known as vodkra
gfldex I had to query my blog too. Found it at gfldex.wordpress.com/2021/01/17/in...-labeling/ 20:04
codesections Won't that be true for anything that's shadowed by a psudopackage? 20:05
m: constant DYNAMIC = 42; sub f { dd DYNAMIC } f
camelia 5===SORRY!5=== Error while compiling <tmp>
Strange text after block (missing semicolon or comma?)
at <tmp>:1
------> 3stant DYNAMIC = 42; sub f { dd DYNAMIC }7⏏5 f
expecting any of:
infix
infix stopper
codesections m: constant DYNAMIC = 42; sub f { dd DYNAMIC }; f
camelia DYNAMIC
gfldex I can highly recommend writing a blog. Having a search-button on your own past thoughts saves a ton of time. :) 20:06
raydiak isn't that always a chance anyway? any change to exports could potentially interfere with existing user code. not just packages and labels, but literally anything you can export 20:07
moon-child gfldex: sounds more like a diary than a blog
like what's the point of making it public?
raydiak I usually just grep my irc logs, but a blog would be somewhat more organized
oh right, thoughts I don't write on irc...those are scattrered across a bazillion text files :) 20:08
gfldex raydiak: That's why there is a strong emphases on lexical-stuff in Raku. To help mitigate the perils of dynamic languages. So the shadowing without a warning is rather surprising.
moon-child: other ppl can hit the search button too. When you die, what do you plan to leave behind? 20:09
moon-child gfldex: eh, raku is one of the few modern languages that has dynamic scope at all!
gfldex: jack shit :)
raydiak interesting it should come up, I've been considering writing a lot more english, starting with journaling. was kicking around the idea of writing a book, and journaling seemed like a nice, approachable start to getting the ideas expressed concretely so I can then organize them into some sensical order instead of a big interconnected jumble in my head 20:14
codesections raydiak: yeah, I think the bug/issue here is that the user wouldn't expect anything to come between the declaration's lexical scope and the lexical scope it's used in. If I didn't know the names of psudopackages, I'd be pretty certain that `constant OUTER = 0; (sub {say OUTER})()` would print 0 - there's so `use` or anything! 20:16
s/so/no 20:18
raydiak I see now, package names seem to violate lexical scoping expectations 20:19
codesections sort of. I mean, they follow the rules. It's just that pseudo packages are declared in lexical scopes that users might not be thinking of 20:21
Xliff juanfra: Where are the API docs for Matrix? 20:24
raydiak istr something about any and all all-caps package names being considered reserved, which implies you're just better off not using those names, at least for anything without a sigil 20:25
Xliff I take it we have a lot of people here that use Matrix. Please elnighten me as to what it is? 20:27
Linky?
juanfra matrix.org/docs/spec/client_server/latest 20:28
gfldex True. At the other hand, we like to use CALLCAPS for control structures that change the flow of a program. That's why I used OUTER for that label.
juanfra i don't know if they have something more simple
Xliff Oh. Looks like Matrix::Client already exists.
github.com/matiaslina/Matrix-Client
codesections and all the labels in the docs are in caps too: docs.raku.org/language/control#LABELs 20:29
raydiak yeah I've seen people use it for constants, too 20:30
gfldex It's a C-ism I believe.
raydiak so if I understand, we're trying to decide (1) which one should shadow the other, (2) whether to warn/die/silently proceed, and (3) what pattern to suggest instead in the docs and error messages if any? 20:35
if the label were to shadow the package, could you still get at the package with OUTER:: or ::('OUTER') or something along those lines? 20:37
gfldex Pseudo packages must shadow. I'm unsure if there should be a warning or ===SORRY===. 20:38
raydiak I'd vote for the sorry, between those two. why proceed if you're clearly defining things that can't possibly be used? 20:42
20:47 espadrine joined
raydiak even right there where you defined it it's already useless, there's always an OUTER everywhere afaik 20:50
codesections No, in the scope where you defined it, the label shadows the pseudopackage, not the other way around 20:52
raydiak m: LABEL: dd LABEL 20:53
camelia Label LABEL = Label.new
raydiak m: OUTER: dd OUTER
camelia OUTER
codesections ...oh, that surprises me. I thought pseudopackages were (notionally) declared at the top of the scope 20:55
raydiak I obviously have no idea which is the *intended* behavior
codesections m: OUTER: dd callframe(0).my<OUTER> 21:00
camelia Label OUTER = Label.new
codesections ^^^^ so it *is* installed in the lexical scope, but shadowed (as we've been saying)
raydiak just ooc, why must the pseudopackage always shadow as gfldex said? internal reasons, or it's a decision long set in stone, or some reason of consistency I'm not seeing? 21:03
gfldex It's a grammar level thing the same way as .WHAT is. The compiler is cheating. 21:04
21:04 rbt left
raydiak ah 21:06
gfldex That's an implementation detail ofc. A future Rakudo might not have to cheat.
Xliff juanfra: Did you look into Matrix::Client? 21:11
juanfra Xliff: i'm still learning the raku basics. when i discovered the raku grammars the last year, i though that raku would be perfect for a personal bot. the problem of the most of matrix libs (not only for raku) is the lack of e2e support. 21:15
i don't remember if i looked at Matrix::Client at the time 21:18
i gave up on raku because there was not a binary package for archlinux but recently someone create a new aur package (rakudo-bin) and i'm trying to start again with raku 21:20
created*
21:20 wingfold joined 21:23 wingfold left 21:28 Doc_Holliwood left
Xliff OK. I'm looking at it now (at least trying to) 21:36
Is there an interactive version of DDT?
21:56 juanfra left, demostanis[m] left, CIAvash left, CIAvash joined 21:57 demostanis[m] joined, juanfra joined 22:10 espadrine left 22:38 jmcgnh left 22:40 jmcgnh joined 22:47 rbt joined 22:48 patrickb left 23:36 bd3i joined
raydiak bisectable6: 0 ==> say 23:49
bisectable6 raydiak, Will bisect the whole range automagically because no endpoints were provided, hang tight
raydiak, Output on all releases: gist.github.com/a4929ed486581532d6...cb2984835a
raydiak, Bisecting by output (old=2020.06 new=2020.07) because on both starting points the exit code is 1
raydiak, bisect log: gist.github.com/47390fc821382a766f...dcce80e7f9 23:50
raydiak, (2020-07-05) github.com/rakudo/rakudo/commit/56...58c6d381d8
raydiak, Bisecting by output (old=2019.11 new=2020.01) because on both starting points the exit code is 1
raydiak, bisect log: gist.github.com/95bbc1acc7a52e8f5c...dc870a8a0d
raydiak, (2019-12-31) github.com/rakudo/rakudo/commit/60...7981133493
raydiak, Bisecting by output (old=2017.02 new=2017.03) because on both starting points the exit code is 1 23:51
raydiak, bisect log: gist.github.com/478b6da6d472e9faf4...003e8b94ea
raydiak, (2017-02-27) github.com/rakudo/rakudo/commit/6c...3807239dc9
raydiak, ⚠ New output detected, please review the results manually
raydiak, Output on all releases and bisected commits: gist.github.com/a30a80e2ce30af207d...31e4111e74