🦋 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.
guifa has anyone tried bundling an executable in the bin/ folder before? I'm thinking about doing it for a module to grab ome basic system stats, but I know on the Mac systems can be ... finicky at best. When zef installs, are they cleared for running normally? (also, does Windows have similar protections?) 00:15
ugexe so installing any non-raku script in bin probably doesn't work since the CURI logic for installing those adds a raku wrapper to everything github.com/rakudo/rakudo/blob/0de2...#L206-L230 00:18
guifa ugexe: ah, I guess what I meant is including something to be used by NativeCall. I guess bin/ actually isn't the directory I wanted then 00:26
kybr oh yay! there's a conference (in the cloud) this week.
guifa What's the correct place to put a .so to call it with NativeCall? In a normal raku script, it'd be in the same directory, but that doesn't seem to be the case for modules 00:37
guifa swears he saw an example for this somewhere but can't find it
tonyo put that in resources guifa 00:44
libyaml has something that does it
guifa: github.com/tony-o/perl6-libyaml 00:45
guifa tonyo++ going to try that and see if I can get it to work 00:48
guifa tonyo++ that works! Big question now is how badly macOS Is going to complain 00:56
ugexe if you are generating a library you probably want to generate e.g. libfoo.so/libfoo.dynlib/foo.dll in `resources/libraries` and have an entry in meta json as `resources/libraries/foo` and access as %?RESOURCES<resources/libraries/foo> 00:59
that directory means it will translate `foo` into whatever filename it thinks is appropriate for that system
of course there is no actual `resources/libraries/foo` file, but that %?RESOURCES entry will point to the likely one 01:00
so tony-o could change those 3 entries in the meta6.json to a single `resources/libraries/yamlwrap` and reference them in code like `is native(%?RESOURCES<libraries/yamlwrap>)` 01:02
guifa oooh, that is convenient. I'm assuming there's nothing special about the directory "libraries", I could just as easily put stuff in `resources/my_fancy_native_stuff/foo`, yeah? 01:04
ugexe it is special -- that system dependant name mapping only applies to that directory 01:05
if you put those files elsewhere you need to explicitly list each file (libfoo.so, libfoo.dynlib, foo.dll)
but then in your code you then have to figure out which one of those to use from %?RESOURCES somehow 01:06
guifa Very cool
In this case, I'll probably just do the explicit one — code will be called from submodules that are very OS-specific (it's a module designed to grab system/user information, so no pretty way around it), but I'll keep in mind the resources/libraries/ trick 01:08
ugexe m: say $*VM.platform-library-name("foo".IO).basename 01:09
camelia libfoo.so
ugexe (that is the underlying mechanism of the name mapping)
guifa ugexe++ thanks! 01:11
guifa tonyo / ugexe, after some work getting a fresh machine all ready, I found a dylib passes GateKeeper. I was legitimately a bit surprised, but nice. 04:10
xinming releasable6: status 08:32
releasable6 xinming, Next release in ≈11 days and ≈10 hours. 1 blocker. 0 out of 7 commits logged
xinming, Details: gist.github.com/4dafd260eaf7065c4d...0d7176b9d4
Altreus Does the/a bot have a search-the-docs plugin? 10:00
Altreus For some reason I find that less of a mental overhead than googling "raku [subject]" 10:01
SmokeMachine do anyone know if its still possible to buy tickets to the conference in the cloud? 10:03
MasterDuke Altreus: yes and no. there's no specific functionality for searching just the docs, but i think (an old version of) the docs repo is searched by greppable
lizmat clickbaits rakudoweekly.blog/2021/06/07/2021-...ing-funky/ 10:50
Altreus deja vu 10:51
El_Che I know now why lizmat's butterfly was broken on twitter :) 11:02
lizmat yeah, it was going too fastly :-) 11:03
El_Che something like that :) 11:03
weird how all is interconnected
single point of failure is fun
lizmat well, NCD is just an anagram of CDN 11:04
as in No Content Delivery :-) 11:05
tbrowder howdy 11:19
i want to pass all args from one signature to a sub signature 11:20
without exhaustively multying it, what form of slurpy wik 11:21
will cover everything? 11:22
something like "(*%) { foo(!%_) }"? 11:23
:(*%aa
:(*%a) { foo(|%_) } 11:24
or do i need to know more about the original signature? 11:25
tbrowder lizmat: i'm trying to allow my DateTime child class to instantiate with the normal DateTime new signatures. i think i need to have at least two multi new methods: one with the currently working new signature, and one ideally the catchall for the native DateTime new signatures. 11:30
lizmat well, generally, one would do sub a(|c) { b(|c) } where "c" is just a name for a capture, could be anything 11:37
tbrowder that's what i came to report! it was as simple as adding ", |c" to my new method and then calling self::new(|c) inside, not even a multi needed! 11:55
thanks, docs need a tweak in the subclass area. current descrip is kind of hidden in capture portion, needs to have a simple sample for pluggers with limited memory banks ;-D 11:57
RandalSchwartz I forget…. how do you use a unicode variable name in Perl6 if you don't have an extended keyboard?  Can you do something like $\u{…} ? 14:57
nine RandalSchwartz: depends on your editor, how you insert those characters 15:01
RandalSchwartz trying to grok docs.raku.org/syntax/identifiers 15:02
RandalSchwartz maybe I can say $<\u…> ? 15:02
jdv m: say "\c[WHITE SMILING FACE]" 15:04
camelia
jdv like that?
search unicode on the docs site? 15:05
dakkar jdv: that works in values, not (necessarily) in identifiers 15:06
nine While that gives you something to copy and paste, it does get tedious quickly
jdv oh i see
lizmat m: my $a = 42; say ::("\$\x61") # RandalSchwartz something like that ? 15:07
camelia 42
dakkar but really, get a better editor 15:08
lizmat m: my $a = 42; say ::("\$\c[LATIN SMALL LETTER A]") # or like this RandalSchwartz 15:09
camelia 42
dakkar (in emacs, `ucs-utils-ucs-insert` works as a near-last resort)
jdv that's pretty ugly
lizmat RandalSchwartz: also, it's called Raku nowadays :-) 15:10
jdv m: my $☺; 15:11
camelia 5===SORRY!5=== Error while compiling <tmp>
Name must begin with alphabetic character
at <tmp>:1
------> 3my $7⏏5☺;
expecting any of:
constraint
infix
infix stopper
postfix
state…
jdv m: my $a☺;
camelia 5===SORRY!5=== Error while compiling <tmp>
Bogus postfix
at <tmp>:1
------> 3my $a7⏏5☺;
expecting any of:
constraint
infix
infix stopper
postfix
statement end
statemen…
jdv m: my $a\☺;
camelia 5===SORRY!5=== Error while compiling <tmp>
Confused
at <tmp>:1
------> 3my $a\7⏏5☺;
expecting any of:
postfix
jdv oh, mine spits out "Confused"
lizmat jdv: emojis are not made of the right unicode elements :-)
jdv oh there it is - i just can't read
ha 15:12
but what if i really want a happy variable?!
RandalSchwartz Ahh, so it's not any unicode. I mis-membered. 15:13
jdv m: my $Ǣ = 123; say $Ǣ; 15:16
camelia 123
jdv haven't had the inkling for unicode in identifiers yet. neat though. 15:17
RandalSchwartz wow… imagine accurately getting unicode from IRC to a bot and back. :) 15:19
Altreus I don't have that kind of brainpower 15:20
gfldex m: my $container; constant term:<$☺> := $container; say ++$☺; 15:41
camelia 1
dakkar gfldex: cheat 😜 15:42
gfldex m: constant term:<$☺> := $; say ++$☺;
camelia 1
masak RandalSchwartz! \o/ 15:53
RandalSchwartz: I don't think I've ever been in here at the same time with you, so let me just take the chance to say this: I'm a big fan of the Schwartzian transform :+1:
RandalSchwartz: I hope you are aware that it was made the default in Raku's `.sort` 15:54
tonyo now i have to start calling him marlin so his head doesn't get too big masak 16:07
masak tonyo: the nice thing though is that you can still sort all the heads by size without unnecessary computation 16:08
RandalSchwartz thank you. 16:12
how is it "the default"? does it cache the key computation somewhere? 16:13
MasterDuke RandalSchwartz++ great books
masak yes, .sort accepts a unary function, and then it caches
RandalSchwartz I'm all-in on Dart/Flutter these days. Far more practical than (and almost as powerful as) modern Perl and Raku. :) 16:14
www.youtube.com/c/RandalLSchwartzo...andFlutter
oops… wrong shortcut
developers.google.com/community/ex...l-schwartz
Altreus almost :) 16:15
RandalSchwartz it's quite a change coding in a strongly typed, sound-null-safety language. 16:16
but i'm liking it.
masak it can be really nice. I recognize that feeling from TypeScript.
RandalSchwartz And it has the things I admired about Perl6 design…. lazy lists, everything is a real object, etc.
TypeScript is still only a thin verneer over javascript. 16:17
there are still 7 ways to say true, and 5 to say false.
masak ah, you would say that, being a Dart aficionado :) but it does fix many of the same issues, I believe
not out to prove it to you, though ;) 16:18
RandalSchwartz In Dart, like Smalltalk before it… there's precisely just "true" and "false", and anything else "used as a boolean" throws.
masak that's nice ;)
in a way, it's great to meet someone who's a convinced Dart user. haven't really done that before 16:19
Altreus Hmm if I were going to learn a language with such strong compilation requirements I'd use Rust
RandalSchwartz Been using it since the early releases. Even gave a talk on it in 2015.
Altreus Having said that, I have no experience with Dart
Not even any exposure 16:20
RandalSchwartz dart.dev is quite thorough. I was going to write Learning Dart, but I didn't want to work for minimum wage again. :)
masak Dart doesn't strike me as a language I'd prefer. but I mean that in a "lack of evidence" way, not in an "I know why not" way
the tooling has something to be said for it. I know they've been toying around with ML-based code completion, for example 16:21
RandalSchwartz it's an unassuming language. meant to be familar, but also having the goals of efficient conversion to both machine bytes and JavaScript.
for example, no resumable contexts because JS can't do that. 16:22
I miss that about Smalltalk.
masak RandalSchwartz: hm, isn't that a bit of a rewrite of history, though? Dart was launched as an alternative to JavaScript, but it ended up compiling to it just like everything else
because nothing can kill JavaScript
[Coke] any pointers on sanitizing output from a run() command on windows to avoid Malformed UTF-8 error? 16:23
RandalSchwartz partly true. the truth is between my story and yours. :)
the main goal was "how do we get away from Java for GWT"
because the big Oracle showdown had high risk. 16:24
thankfully now settled by the SCOtUS
masak oh, parts of that I didn't know
RandalSchwartz It's public, and partially from watching the history for a long time. 16:25
I *am* under an NDA. I can't tell you I've heard internal stories, or what they say. :)
masak but... I didn't dream up the leaked memo, and the "secretly, we'll be working on our own language", and that didn't quite pan out that way
RandalSchwartz it may also be partly responsible for "why fuchsia" 16:26
as in "can we do android over, and leave out the oracle-fight-inducing parts?"
masak [Coke]: no direct pointers, but there totally should be a way to safely decode UTF-8
[Coke]: curious -- in your use case, what should be the appropriate action when a decoding error is encountered? 16:27
RandalSchwartz send an email to the POTUS! 16:28
masak .oO( well, that escalated quickly ) 16:29
[Coke] masak: got there- was just complicated finding the right spot to say "give me the output of this in binary" so I could decode myself. 16:30
RandalSchwartz at least this president might actually read them!
Altreus Flutter is presumably a framework for Dart?
RandalSchwartz: Because he is actually literate?
RandalSchwartz yes, it's a UI SDK
masak [Coke]: great -- we should lobby for a non-complicated solution, though 16:31
[Coke] masak: in my case? I really just don't care about the part of the output that's wrong. Trying to get the output from 'nuget list <some thing>' to give me the one line I care about, and that one line is fine (and sadly cannot get nuget list to NOT give me too much)
masak [Coke]: or if there already is one, work to make it more findable :)
[Coke]: interesting
[Coke] masak: maybe something like .slurp(:close,:utf8-c8) instead of .slurp(:bin,:close).decode('utf8-c8') 16:32
masak [Coke]: so it's kind of "just put those `?` thingies on the parts you can't decode"
[Coke] but it's fine, just trying to get this script done so I can do my job. ;)
masak :D
'night, #raku
[Coke] masak: yup. I'm effectively doing "nuget list packagename" | grep "\bpackagename\b", so I don't care about any other line 16:33
night.
also: hey, RandalSchwartz.
also my cat: mao. mao? mao! mao.
tonyo [Coke]: you might try doing the `run` with :bin mode and encoding to utf8 manually 16:49
tonyo s/encoding/decoding/ 16:49
codesect` Altreus: I'm a fan of Rust. imo, it's a good complement to Raku -- I like Raku enough that pretty much the only reason I'd want a different language is if Raku isn't fast enough for the task 17:06
Altreus Yeah I really want to be able to work in any language that has sufficient compile-time reasoning that it can tell me I'm being stupid before there's even a binary to test 17:12
gfldex moritz: Did the folk at Apress told you they do typesetting? 17:13
ugexe [Coke]: `run` has an `:enc` param you could probably pass 'utf8-c8' 18:13
[Coke] ugexe: ah, thanks. it's in the signature in the docs, but not in the body of the docs. 18:26
Now I'm stuck on conditional formatting in excel. Curses. :) 18:27
thundergnat_ . 20:54
tellable6 2021-06-03T11:02:08Z #raku-dev <lizmat> thundergnat that looks like a bug, could you make an issue for it?
2021-06-03T12:57:44Z #raku-dev <lizmat> thundergnat github.com/rakudo/rakudo/commit/89fd8a8df8 tests would be appreciated :-)
hey thundergnat_, you have a message: gist.github.com/a0ff56f709de2c7210...b9d32a5318
thundergnat_ bisectable6: old=2020.01 new=HEAD gist.github.com/thundergnat/77676d...e25e55ce92 20:57
bisectable6 thundergnat_, Bisecting by output (old=2020.01 new=0de28ae) because on both starting points the exit code is 0
thundergnat_, bisect log: gist.github.com/0c6ab86885a818fa2d...7c1d4ab394 20:58
thundergnat_, (2020-01-26) github.com/rakudo/rakudo/commit/0c...05f29654bc
thundergnat_ lizmat++ 21:00
.tell masterduke (search Rosettacode) There isn't really an easy way for the general public to do so. I went through and grepped out all the easy Perl 6 references, but a few still linger. 21:02
tellable6 thundergnat_, I'll pass your message to MasterDuke
thundergnat_ .tell masterduke: especially in the discussion pages. I was very hesitant to modify those as it is rewriting history. 21:03
tellable6 thundergnat_, I'll pass your message to MasterDuke
MasterDuke thundergnat_: yeah, i wouldn't change discussion 21:04
jdv did leont just do something like $list.grep(:is-prime)? i lost the slide in my memory. 21:06
lizmat .grep(&is-prime) ? 21:09
jdv i think it had a colon and its why it stuck out to me 21:12
hopefully we'll get slides eventually
thundergnat_ m: say ^100 .grep: &is-prime 21:14
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)
leont jdv: there was a syntax error in there though, I should have double checked that. 21:16
It should have been @list((:is-prime)), because otherwise it's a named argument.
If I had double checked that I probably wouldn't have included it, oh well. 21:17
@list.grep((:is-prime))
jdv that still looks odd to me. how is that working then? 21:18
leont @list.grep((:is-prime)) equals @list.grep(*.is-prime) 21:19
and @list.grep((:!is-prime)) equals @list.grep(!*.is-prime)
jdv i'm not sure i've seen (:foo) mean *.foo - is that doc'd? 21:21
codesections m: say ^10 .grep: (:is-prime)
camelia (2 3 5 7)
codesections huh, I didn't know about that syntax. Neat!
japhb Woah, that's a new one on me too. 21:24
jdv i know! where did it come from?!
codesections I think the point is that it didn't come from anywhere -- it's not a special case, just a consequence of the smartmatch semantics 21:25
leont Someone blogged about it recently, I didn't know about it until then either 21:28
jdv i'm not seeing it. 21:29
japhb m: say (:is-prime).ACCEPTS($_) for ^10
camelia False
False
True
True
False
True
False
True
False
False
japhb Well I'll be darned. 21:30
Looks like it's here: github.com/rakudo/rakudo/blob/mast...ir.pm6#L59 21:31
jdv ok then:) 21:33
lizmat This is the reason: docs.raku.org/type/IO::Path#File_test_operators 21:35
[Coke] I feel like while it was intended for those specific tests, it was not intended to include arbitrary methods/subs 21:38
japhb One use I can see for that is to make it simpler to do the code behind interfaces where users can choose to include or exclude matches. Because then you can do .grep((:is-prime($include-primes)))
[Coke] Do we have any roast that allows something like :is-prime there instead of :d ?
jdv lizmat: thanks. now its starting to make sense to me. 21:42
lizmat [Coke]: I would be surprised
fwiw, I think this feature is more on the scale of WAT than DWIM
jdv still feels like a wat though 21:43
leont almost left it out, perhaps I should have
lizmat yeah, I think it's a case of premature optimization
leont was very content with finding the Euclidian distance example. It's a real life algorithm that showcases 3 different kinds of meta-operators quite well 21:49
sqrt [+] (@a Z- @b)»²
jdv just watched the watman thing again - thanks leont 21:51
[Coke] leont: nice. 22:09