🦋 Welcome to Raku! raku.org/ | evalbot usage: 'p6: say 3;' or /msg camelia p6: ... | irclog: colabti.org/irclogger/irclogger_log/raku
Set by ChanServ on 14 October 2019.
00:26 dogbert17 joined 00:30 AlexDani` joined 00:32 AlexDaniel left 00:40 jaldhar_ left, jaldhar_ joined 00:57 AlexDani` left 01:04 jaldhar_ left, jaldhar_ joined 01:07 Tirifto left 01:08 wildtrees left
SmokeMachine xinming_: I continue playing with json: www.irccloud.com/pastebin/SWYIMqeE/ 01:24
Xliff SmokeMachine: After taking a while to look at it, I get it. That's pretty good! 01:32
I just don't know if I like the use of .^all in some of those situations.
How would it look if I only wanted to set a subset of rows to a specific value?
SmokeMachine Xliff: :)
Xliff: what situations do you mean?
Xliff Like.... setting .num1.foo[$bar] = 'ber' for all rows where num2 == 42 01:33
Assume $bar is an int 01:34
You'd probably use ^all.grep ?
^all.grep.map(...).save ?
Have you thought about making a .^where alias that basically does .^all.grep ? 01:35
SmokeMachine Xliff: yes... 01:40
Xliff: no... but what do you think `.^where` would be better than `.^all.grep`? 01:41
01:41 cpan-raku left 01:43 Zachac joined
Xliff Why do I think .^where is better than .^all.grep? It's easier to remember for new users 01:46
I'm not saying to use this in place of.... I'm saying that it could be an alias to make it more attractive to...folks that it would be more attractive to. 01:47
Like me.
01:47 cpan-raku joined, cpan-raku left, cpan-raku joined
Xliff I get .^all.grep -- but I think most people would prefer .^where. 01:48
01:48 jaldhar_ left, jaldhar_ joined
SmokeMachine Xliff: I think easier to the user, if the don't like the `.^all`, could be if the do: `my @rows := MyModel.^all` at the beginning of the code, and then could use: `@rows.grep(...)` 01:49
ZzZombo m: 42 ~~ :say 01:50
camelia 42
Xliff SmokeMachine: OK, so why not give it to them as an alias. TIMTOWTDI
Most new users won't know enough perl6 to even think of doing 'my @rows := MyModel.^all' 01:51
ZzZombo Why was that added into Raku though? for
m: 42 ~~ :goawayanddie
camelia No such method 'goawayanddie' for invocant of type 'Int'
Did you try to smartmatch against a Pair specifically? If so, then the
key of the Pair should be a valid method name, not 'goawayanddie'.
in block <unit> at <tmp> line 1
SmokeMachine Xliff: (I don't think most people would prefere `.^where` over `.^all.grep`)
ZzZombo Nope, doesn't work.
Xliff SmokeMachine: Trust me on this. They'd appreciate the option
SmokeMachine Xliff: the idea is to use raku's syntax...
Xliff Again, you can keep .^all.grep
But you are already extending the metamodel, so why not make it more accessible to people expecting "where"? 01:52
And this does not break the raku syntax any more than Red already does
s/break/extend/ 01:53
SmokeMachine Xliff: I'm extending the meta model mostly to return a ResultSeq to make it possible to the user use raku's syntax...
Xliff SmokeMachine: The purity is nice and all, but the people who would be interested in Red (and hence drawn to Raku) couldn't give a rats butt about the purity of the syntax 01:54
The advantage of the alias is to give them a starting point and allow them to grow into it.
If it is as simple as I think it might be, then let me see if I can whip up a PR...
SmokeMachine Xliff: what do you think about getting more people's opinions? because, sorry, but a still think people would not use `.^where`... 01:57
Xliff Nope. Was not that hard at all. 01:58
method where($obj, Callable $filter --> Red::ResultSeq) { $obj.^all.grep($filter) } # Alias for .^all.grep(...)
SmokeMachine: Even though this is NOT SQL, there is a reason why SQL is the defacto way to query data. 01:59
And SELECT almost always goes with a particular keyword.
And all I'm suggesting is an alias.
SmokeMachine m: say do given 42 { where :is-prime { "Yes" }; default { "No" } }
camelia 5===SORRY!5=== Error while compiling <tmp>
Unexpected block in infix position (missing statement control word before the expression?)
at <tmp>:1
------> 3say do given 42 { where :is-prime7⏏5 { "Yes" }; default { "No" } }
expectin…
SmokeMachine m: say do given 42 { when :is-prime { "Yes" }; default { "No" } } # ZzZombo 02:00
camelia No
Xliff Ah... that's "when"
SmokeMachine: Please give it some thought. I will submit the PR and maybe we can discuss further? 02:01
SmokeMachine Xliff: I will... but what do you think about a survey?
Xliff I don't mind! :)
SmokeMachine: Also consider this.... how often are you typing ".^all" -- If Red code is littered with it, you really should think of making it implicit to make coding easier, rather than a chore. 02:08
SmokeMachine you can just save it into a variable...
Xliff That's NOT what I'm talking about. 02:09
Yes, you can save it into a variable, but why make that necessary?
If I want to pull anything out of a model, it's going to have to have a .^all after it in one way shape or form. 02:10
Best to give folks a wider variety of coding styles rather than limiting them to one specific design.
... if you can help it...
02:10 jaldhar_ left 02:11 jaldhar_ joined 02:17 jaldhar_ left
SmokeMachine auto-deflating the json and selecting the right value... www.irccloud.com/pastebin/SogvYwTD/ 02:27
Xliff Nice! 02:33
SmokeMachine Xliff: github.com/FCO/Red/blob/join/t/36-json.t 02:38
Xliff :) 02:56
ZzZombo m: say 41, 42 02:57
m: 41 [&say] 42
camelia 4142
WARNINGS for <tmp>:
4142
Useless use of &say in sink context (line 1)
ZzZombo ??
Xliff github.com/FCO/Red/pull/405 03:16
ZzZombo m: False but True.so.say 03:28
camelia True
ZzZombo :P
m: False but True.say
camelia True
ZzZombo oh, what have I done.
m: my $a is Array 03:56
camelia 5===SORRY!5=== Error while compiling <tmp>
is trait on $-sigil variable not yet implemented. Sorry.
Did you mean: my Array $a?
at <tmp>:1
------> 3my $a is Array7⏏5<EOL>
expecting any of:
constraint
ZzZombo m: my %a is Array
camelia ( no output )
ZzZombo m: my %a is Array;dd $a
camelia 5===SORRY!5=== Error while compiling <tmp>
Variable '$a' is not declared. Did you mean '%a'?
at <tmp>:1
------> 3my %a is Array;dd 7⏏5$a
ZzZombo m: my %a is Array;dd %a
camelia Array element = []
ZzZombo m: my %a is Array = 1,2,3;dd %a
camelia Array element = [1, 2, 3]
ZzZombo m: my %a is Array = 1,2,3;dd %a[0]
camelia Int element = 1
ZzZombo m: my %a is True;dd %a
camelia 5===SORRY!5=== Error while compiling <tmp>
Can't use unknown trait 'is' -> 'unknown subtype' in a variable declaration.
at <tmp>:1
------> 3my %a is True7⏏5;dd %a
expecting any of:
TypeObject
default
ZzZombo m: my %a is Int;dd %a 03:57
camelia 0
ZzZombo Huh?
04:57 squashable6 left 04:58 xinming_ left
ZzZombo my $?ASD = 'asd' 04:58
m: my $?ASD = 'asd' 04:59
camelia 5===SORRY!5=== Error while compiling <tmp>
Cannot use ? twigil on 'my' variable because it is reserved
at <tmp>:1
------> 3my $?ASD7⏏5 = 'asd'
ZzZombo m: $?FILE.say
camelia <tmp>
04:59 xinming_ joined
ZzZombo m: $?FILE.io.f 04:59
camelia No such method 'io' for invocant of type 'Str'. Did you mean 'so'?
in block <unit> at <tmp> line 1
ZzZombo m: $?FILE.IO.f
camelia ( no output )
ZzZombo m: $?FILE.IO.f.say
camelia True
ZzZombo m: $?FILE.IO.e.say
camelia True
05:00 squashable6 joined 06:00 tellable6 left, evalable6 left, squashable6 left, statisfiable6 joined, nativecallable6 joined, greppable6 joined, releasable6 joined 06:01 unicodable6 joined, committable6 joined, evalable6 joined, quotable6 joined, shareable6 joined 06:02 squashable6 joined, coverable6 joined, benchable6 joined, notable6 joined 06:03 bloatable6 joined, reportable6 joined, tellable6 joined 06:45 Zachac left 06:48 Xliff left 07:31 jmerelo joined 08:04 sena_kun joined 08:08 sena_kun left
ZzZombo m: class A {};-> A() \x{ x.say }(1) 08:17
camelia No such method 'A' for invocant of type 'Int'
in block <unit> at <tmp> line 1
ZzZombo Shouldn't this fail in compile time rather than run-time?
08:23 sena_kun joined 08:26 sena_kun left 08:39 jmerelo left 08:51 sena_kun joined 09:02 donaldh left 09:08 epony joined
ZzZombo Is there a way to implement Java-like annotations? 09:14
tobs ZzZombo: you can add custom traits docs.perl6.org/type/Sub#index-entr...eclarator) 09:25
ZzZombo But I need to somehow reference declared traits then
tobs if you mean Java-syntax-like, that will require more work.
I'm not following what you want to do. "reference" where and in which way? 09:29
ZzZombo What? Just declaring traits by itself does nothing. You need to reference a declared trait later to make them work as annotations. 09:54
09:58 chloekek joined
sena_kun ZzZombo, you can reference custom traits at "usual" places. 10:19
though, I think, only `is` will be parsed correctly without changes to grammar 10:22
tobs m: multi trait_mod:<is> (Method $meth, :$override!) { say "you should override $meth.name()" }; class :: { method f is override { say "hi" } }.new.f 10:33
camelia you should override f
hi
tobs ZzZombo: sorry, how to apply a trait was obvious for me, so I didn't think you were asking about that. You stick it to the thing it should apply to, in this case with an "is". 10:35
ZzZombo Do you know what annotations are? They are referenced are run-time. Traits are applied at compile time. I do not understand what are you trying to show me. 10:44
sena_kun you can apply roles to things using annotations and check them at runtime, no? 10:48
10:52 Altai-man_ joined 10:54 sena_kun left 11:07 chloekek left
tobs yes exactly, you can change runtime behaviour or look of things at compile time, by mixing in or wrapping. 11:09
m: role Overridden {}; multi trait_mod:<is> (Method $meth, :$override!) { $meth does Overridden }; class A { method f is override { say "hi" } }; say A.^lookup('f') ~~ Overridden 11:10
camelia True
ZzZombo m: role Overridden {}; multi trait_mod:<is> (Attribute $a, :$override!) { $a does Overridden }; class A { has $.f is override = 123 }; 11:13
camelia ( no output )
ZzZombo m: role Overridden {}; multi trait_mod:<is> ($a, :$override!) { $a does Overridden }; class A { has $.f is override = 123 };
camelia 5===SORRY!5=== Error while compiling <tmp>
Can't use unknown trait 'is' -> 'override' in an attribute declaration.
at <tmp>:1
expecting any of:
rw
readonly
box_target
leading_docs
trailin…
ZzZombo m: role Overridden {}; multi trait_mod:<is> (Any $a, :$override!) { $a does Overridden }; class A { has $.f is override = 123 };
camelia 5===SORRY!5=== Error while compiling <tmp>
Can't use unknown trait 'is' -> 'override' in an attribute declaration.
at <tmp>:1
expecting any of:
rw
readonly
box_target
leading_docs
trailin…
11:36 chloekek joined
SmokeMachine Xliff: if we are going to create aliases for `.^all.grep` and `.^all.map`, why not call they `.^grep` and `.^map`? 11:47
tellable6 SmokeMachine, I'll pass your message to Xliff
SmokeMachine Xliff: and, update is just one of the uses of `.^all.map`... 11:51
tellable6 SmokeMachine, I'll pass your message to Xliff
12:11 laif joined 12:12 laif left 12:17 squashable6 left 12:20 squashable6 joined 12:28 chloekek left 12:52 sena_kun joined 12:54 Altai-man_ left 12:56 jaldhar_ joined 13:10 jaldhar_ left, jaldhar_ joined 13:22 jaldhar_ left, jaldhar_ joined 13:26 jaldhar_ left, jaldhar_ joined 13:38 jaldhar_ left, jaldhar_ joined 13:42 jaldhar_ left, jaldhar_ joined 13:46 jaldhar_ left, jaldhar_ joined 13:54 jaldhar_ left, jaldhar_ joined 13:56 jaldhar_ is now known as jaldhar 13:57 leah2 joined 13:58 jaldhar left, jaldhar joined 14:00 jaldhar left, jaldhar joined 14:22 lucasb joined
ZzZombo m: say qq;asd; 14:28
camelia asd
ZzZombo m: say qq>asd> 14:29
camelia 5===SORRY!5=== Error while compiling <tmp>
Use of a closing delimiter for an opener is reserved
at <tmp>:1
------> 3say qq7⏏5>asd>
14:36 mid_home joined 14:38 jaldhar left, jaldhar joined 14:42 jaldhar left, jaldhar joined 14:45 AlexDaniel joined, AlexDaniel left, AlexDaniel joined
AlexDaniel m: sub foo() { return <a b c>, 42 }; my (@a, $b) = foo; say @a 14:46
camelia [(a b c) 42]
AlexDaniel how do I make it return just <a b c> ?
I know I can make it $a instead but I want to keep it as @a
14:46 jaldhar left
AlexDaniel m: sub foo() { return <a b c>, 42 }; my ($a, $b) = foo; say $a 14:46
camelia (a b c)
AlexDaniel so, that, but with @a
14:46 jaldhar joined
AlexDaniel m: sub foo() { return <a b c>, 42 }; my (@a, $b) := foo; say @a 14:47
camelia (a b c)
AlexDaniel any other options?
m: sub foo() { return <a b c>, 42 }; my @a; my $b; (@a, $b) := foo; say @a 14:48
camelia 5===SORRY!5=== Error while compiling <tmp>
Cannot use bind operator with this left-hand side
at <tmp>:1
------> 3 c>, 42 }; my @a; my $b; (@a, $b) := foo7⏏5; say @a
AlexDaniel because that doesn't work
14:52 Altai-man_ joined 14:54 jaldhar left, sena_kun left, jaldhar joined 14:58 veesh left 15:02 jaldhar left, jaldhar joined 15:11 veesh joined 15:13 chloekek joined 15:14 jaldhar left, jaldhar joined 15:16 jaldhar left, jaldhar joined
lucasb IMO, 'my ($x, $y); ($x, $y) := (10, 20)' was supposed to work. If it doesn't, then it's NYI till today 15:17
15:18 jaldhar left, jaldhar joined 15:22 jaldhar left, jaldhar joined 15:26 jaldhar left, jaldhar joined 15:30 jaldhar left, jaldhar joined 15:35 chloekek left
tbrowder i'm trying to read some old p5 files with raku and getting error "Malformed UTF-8" from raku on some files. anyone know a technique for finding the offending characters! 15:37
s/!/?/
i've been able to fix some files by visual inspection with vim, but many the new crop of files i'm having trouble with don't yield any clues with vim. 15:39
i've thought about using "od -c" but haven't yet figured out any way to get an output line-by-line except to filter od output through another tool. 15:41
so is there a single tool that will do the job?
lucasb if you type ':set enc?' in vim does it say it's utf8 or latin-1? 15:43
for any offending text file :)
ZzZombo m: dd my (@a, $) = -> { <a b c>, 123 } 15:44
camelia ([-> { #`(Block|81976160) ... }], Any)
ZzZombo m: dd my (@a, $) = -> { <a b c>, 123 }() 15:45
camelia ([("a", "b", "c"), 123], Any)
ZzZombo m: my (@a, $) = -> { <a b c>, 123 }();dd @a
camelia Array @a = [("a", "b", "c"), 123]
ZzZombo m: my (@a) = -> { <a b c>, 123 }();dd @a 15:46
camelia Array @a = [("a", "b", "c"), 123]
15:55 seb__ joined 15:56 seb__ left 15:58 stoned75 joined 16:06 jaldhar left, jaldhar joined 16:08 kktt joined 16:35 thundergnat joined
thundergnat ZzZombo: Regarding trait handles; perhaps rosettacode.org/wiki/History_variables#Perl_6 may clarify how / why you may use it. 16:36
16:41 chloekek joined 16:44 stoned75 left 16:52 sena_kun joined 16:54 Altai-man_ left
robertle hm, on that rosettacode example the handles trait is one interesting thing, but the fact that it's hard to get to work with a "normal" sigil variable, and kinda needs the naked one is, I don't know, unexpected? weird? WAT? 17:23
17:28 rjt_pl joined
thundergnat Yeah, it's a trade-off. Normal scalars ($ sigiled) don't have or need a STORE method. In an effort to save memory and cycles, Rakudo just disallows STORE and it "just works" 99.99% of the time. 17:29
Cheat until you get caught basically.
That was over-simplified, $ sigiled variables don't use a STORE method, rather they use special low-level syntax to do assignment. 17:32
17:33 mid_home left 17:38 jaldhar left, jaldhar joined 17:40 jaldhar left, jaldhar joined 17:42 jaldhar left, jaldhar joined 17:44 jaldhar left
thundergnat Arguably that is a bug though. 17:44
17:44 jaldhar joined 17:46 jaldhar left, jaldhar joined 17:48 jaldhar left, jaldhar joined 17:53 finanalyst joined
discord6 <theangryepicbanana> I'm having an odd issue with my code where it's taking a long time to compile and I'm not sure why. here's the link: repl.it/@theangryepicbanana/Raku-editor (online ide. yes I know it's using 2019.3 but that shouldn't matter) 17:53
17:54 jaldhar left, jaldhar joined
discord6 <theangryepicbanana> feel free to @ me (I'm on the discord bridge) if you know something 17:55
17:55 jmerelo joined 17:56 jaldhar left, jaldhar joined 18:02 jaldhar left, jaldhar joined 18:04 jaldhar left
thundergnat theangryepicbanana: FWIW, it compiles/runs locally for me in slightly less than .4 seconds (2019.07.1 Linux Mint 19.2) 18:04
18:04 jaldhar joined 18:06 jaldhar left, jaldhar joined
discord6 <theangryepicbanana> hmm 18:06
<theangryepicbanana> I've never had an issue like this for larger projects before 18:07
18:08 jaldhar left, jaldhar joined 18:14 jaldhar left, jaldhar joined 18:16 jaldhar left, jaldhar joined 18:18 jaldhar left, jaldhar joined 18:20 jaldhar left, jaldhar joined 18:22 jaldhar left, jaldhar joined 18:30 jaldhar left, jaldhar joined 18:32 jaldhar left, jaldhar joined 18:44 jaldhar left, jaldhar joined 18:46 jaldhar left, jaldhar joined 18:50 jaldhar left, jaldhar joined 18:52 Altai-man_ joined 18:54 jaldhar left, sena_kun left, jaldhar joined 18:58 wildtrees joined 19:00 jaldhar left, jmerelo left, jaldhar joined 19:01 lucasb left 19:04 jaldhar left, jaldhar joined 19:09 cpan-raku left 19:10 jaldhar left, jaldhar joined 19:13 finanalyst left, cpan-raku joined, cpan-raku left, cpan-raku joined 19:16 squashable6 left 19:18 squashable6 joined 19:20 jaldhar left, jaldhar joined 19:38 user3 joined, user3 left 19:47 thundergnat left 20:47 releasable6 left, notable6 left, nativecallable6 left, statisfiable6 left, greppable6 left, squashable6 left, shareable6 left, committable6 left, quotable6 left, bloatable6 left, unicodable6 left, coverable6 left, reportable6 left, benchable6 left 20:48 releasable6 joined, squashable6 joined, reportable6 joined, statisfiable6 joined 20:49 unicodable6 joined, committable6 joined, nativecallable6 joined, benchable6 joined, coverable6 joined 20:50 bloatable6 joined, greppable6 joined, notable6 joined, shareable6 joined, quotable6 joined 20:53 sena_kun joined 20:55 Altai-man_ left 21:00 kktt left, kktt joined 21:16 eseyman joined 21:20 finanalyst joined 21:24 sena_kun left 21:27 chloekek left 21:56 tejr left 22:02 pubwrk joined
pubwrk Could anybody say if it's feasible to write Raku modules that wrap core functionality written in C (or at least something exposing a C API) similar to Numpy? 22:07
El_Che pubwrk: docs.perl6.org/language/nativecall 22:10
brass NativeCall is an absolute blessing 22:18
22:26 Altreus left, Altreus joined
pubwrk El_Che: I was reading through that this morning, and I found an article about using it with C++. The article made it sound like memory management can actually get kind of hairy 22:31
I guess a better question is if anyone is doing that sort of thing now. That is, are there folks using Raku as a high level api for fortran/C/whatever? 22:33
japhb pubwrk: Yes, it's used quite a bit. Bindings to encryption, compression/archiving, and UI toolkits are common uses. 22:47
22:52 patrickb joined
pubwrk japhb: Thank you, that's good to know. I've looked at raku a little bit, and I already have a lot of experience with Python (very little with Perl), so that was one of the questions I had about how useful it would be to start using Raku for more scripting problems that I'm using Python for now 23:16
since I lean on numpy, pandas and libraries like it pretty often
23:24 finanalyst left 23:47 jaldhar left 23:57 mid_laptop joined