|
This channel is intended for people just starting with the Raku Programming Language (raku.org). Logs are available at irclogs.raku.org/raku-beginner/live.html Set by lizmat on 8 June 2022. |
|||
|
01:30
m_athias left
01:31
m_athias joined
01:43
frost joined
01:45
razetime joined
02:55
Util_ left
05:30
Util joined
08:06
lizmat_ left,
lizmat joined
|
|||
| elcaro | I was thinking about this earlier... here are some idle thoughts... | 08:20 | |
| Raku is a very dynamic language... almost to a fault. If you call a `Str` method on a lie, like `.chars` or `.uc`, the list is coerced to a `Str` and then the method is called. Similarly, if you call `.elems` or `.reverse` on a `Str`, it is coerced to a something iterable (probably a `Seq`) and the method is called. | |||
| Now, calling `"stringy"[0]` is calling a _listy_ method (`.AT-POS`) on the string... so it gets coerced to a list, just like the other examples. This is why method names are unique for different types, eg. `.flip` vs `.reverse`, or `.chars` vs `.elems`... rather than having a generic `.length` method. | |||
| That may be a decent rationale, but it doesn't mean it not confusing for the beginner. In fact, calling `.contains` on a list was such a common beginner error... | |||
| ``` | |||
| > $*PERL.compiler | |||
| rakudo (2018.04.1) | |||
| > (< one two three >).contains('two') | |||
| True | |||
| > (< one two three >).contains('e t') | |||
| True | |||
| ``` | |||
| A warning was eventually added | |||
| ``` | |||
| rakudo (2022.07) | |||
| [1] > (< one two three >).contains('two') | |||
| Calling '.contains' on a List, did you mean 'needle (elem) list | |||
| ``` | |||
| I was thinking about this earlier... here are some idle thoughts... | 08:21 | ||
| Raku is a very dynamic language... almost to a fault. If you call a `Str` method on something `Iterable` (eg. a `Seq`), like `.chars` or `.uc`, and the `Seq` is coerced to a `Str` and then the method is called. Similarly, if you call `.elems` or `.reverse` on a `Str`, it is coerced to a something iterable (probably a `Seq`) and the method is called. | |||
| Now, calling `"stringy"[0]` is calling a _listy_ method (`.AT-POS`) on the string... so it gets coerced to a list, just like the other examples. This is why method names are unique for different types, eg. `.flip` vs `.reverse`, or `.chars` vs `.elems`... rather than having a generic `.length` method. | |||
| That may be a decent rationale, but it doesn't mean it not confusing for the beginner. In fact, calling `.contains` on a list was such a common beginner error... | |||
| ``` | |||
| > $*PERL.compiler | |||
| rakudo (2018.04.1) | |||
| > (< one two three >).contains('two') | |||
| True | |||
| > (< one two three >).contains('e t') | |||
| True | |||
| ``` | |||
| A warning was eventually added | |||
| ``` | |||
| rakudo (2022.07) | |||
| [1] > (< one two three >).contains('two') | |||
| Calling '.contains' on a List, did you mean 'needle (elem) list | |||
| ``` | |||
| I was thinking about this earlier... here are some idle thoughts... | 08:24 | ||
| Raku is a very dynamic language... almost to a fault. If you call a `Str` method on something `Iterable` (eg. a `Seq`), like `.chars` or `.uc`, the `Seq` is coerced to a `Str` and then the method is called. Similarly, if you call `.elems` or `.reverse` on a `Str`, it is coerced to a something iterable (probably a `Seq`) and the method is called. | |||
| Now... Calling `"stringy"[0]` is calling a _listy_ method (`.AT-POS`) on the string... so it gets coerced to a list, just like the other examples! This is why method names are unique for different types, eg. `.flip` vs `.reverse`, or `.chars` vs `.elems`... rather than having a generic `.length` method. It facilitates coercing things automatically. This is nice _sometimes_. | |||
| That may be a decent rationale, but it doesn't mean it not confusing for the beginner. In fact, calling `.contains` on a list was such a common beginner error... | |||
| ``` | |||
| > $*PERL.compiler | |||
| rakudo (2018.04.1) | |||
| > (< one two three >).contains('two') | |||
| True | |||
| > (< one two three >).contains('e t') | |||
| True | |||
| ``` | |||
| A warning was eventually added | |||
| ``` | |||
| rakudo (2022.07) | |||
| [1] > (< one two three >).contains('two') | |||
| Calling '.contains' on a List, did you mean 'needle (elem) list | |||
| ``` | |||
| It's not unreasonable to suggest that calling `Str.AT-POS` should perhaps show a similar warning that suggest calling `.substr` | |||
| Thank you for coming to my TED Talk | |||
| I was thinking about this earlier... here are some idle thoughts... | 08:25 | ||
| Raku is a very dynamic language... almost to a fault. If you call a `Str` method on something `Iterable` (eg. a `Seq`), like `.chars` or `.uc`, the `Seq` is coerced to a `Str` and then the method is called. Similarly, if you call `.elems` or `.reverse` on a `Str`, it is coerced to a something iterable (probably a `Seq`) and the method is called. | |||
| Now... Calling `"stringy"[0]` is calling a _listy_ method (`.AT-POS`) on the string... so it gets coerced to a list, just like the other examples! This is why method names are unique for different types, eg. `.flip` vs `.reverse`, or `.chars` vs `.elems`... rather than having a generic `.length` method. It facilitates coercing things automatically. This is nice _sometimes_. | |||
| That may be a decent rationale, but it doesn't mean it not confusing for the beginner. In fact, calling `.contains` on a list was such a common beginner error... | |||
| ``` | |||
| rakudo (2018.04.1) | |||
| > (< one two three >).contains('two') | |||
| True | |||
| > (< one two three >).contains('e t') | |||
| True | 08:26 | ||
| ``` | |||
| A warning was eventually added | |||
| ``` | |||
| rakudo (2022.07) | |||
| [1] > (< one two three >).contains('two') | |||
| Calling '.contains' on a List, did you mean 'needle (elem) list | |||
| ``` | |||
| It's not unreasonable to suggest that calling `Str.AT-POS` should perhaps show a similar warning that suggest calling `.substr` | |||
|
08:28
discord-raku-bot left,
discord-raku-bot joined
|
|||
| Nemokosch | what is this? | 08:51 | |
| yabobay | i tried to do the thing that the error said | ||
| did you mean "needle (elem) list" | |||
| Nemokosch | what needle? never heard of it | 08:53 | |
| yabobay | it says it here | ||
| Nemokosch | oh the message | 08:55 | |
| aaah | |||
| no no that's an operator | 08:56 | ||
| needle and list are variable names in that example | |||
| confusingly enough tbh | |||
| the (elem) operator | |||
| āin other words | 08:57 | ||
| elcaro | yeah, as in `$needle (elem) @haystack` | ||
| or `$needle ā @haystack` | |||
| oh, Nemo beat me to it, but yes. | |||
| lizmat | PR for making that error message less confusing welcome :) | ||
| yabobay | calling it "needle" makes it sound like a function | 08:59 | |
| Nemokosch | well, it does | ||
| yabobay | or at least they could put the sigils in the error message | ||
| so you just intuitively get it | |||
| elcaro | yeah, it assumes familiarity with the English idiomatic expression "needle in a haystack"... Pretty sure something in perldoc (maybe `index`) used to say something like `index(haystack, needle)` | 09:01 | |
| www.youtube.com/watch?v=37BBmRnJnwY | |||
| It's a simple PR to fix, if either of you are interested, <@297037173541175296> or <@989550365533937664> | |||
| yabobay | well i dunno how to do any of that | ||
| and i don't know what the "right" error message should be | |||
| so im not doing it | |||
| elcaro | I can submit it... but you were the one confused by it... so could you suggest something that you would have found less confusing. | 09:03 | |
| What about just putting sigiles on the words, ie `did you mean '$needle (elem) @list` | |||
| I can submit it... but you were the one confused by it... so could you suggest something that you would have found less confusing. | |||
| What about just putting sigiles on the words, ie `did you mean '$needle (elem) @list`? | |||
| Nemokosch | if the input was a List, that should be fine imo | 09:05 | |
| yabobay | well | ||
| i don't think $needle and @list is a good combination of names | |||
| it should be either $needle and @haystack, or $item and @list | |||
| both of those ar econsistent | |||
| well | |||
| i don't think $needle and @list is a good combination of names | |||
| it should be either $needle and @haystack, or $item and @list | |||
| both of those are consistent | |||
| elcaro | yeah, I think the whole 'needle in a haystack' thing associates better with searching a string... a list is discrete elements , not so much a haystack... so `$item` and `@list` is probably better, and less Anglocentric. | 09:09 | |
| yabobay | well the error message is in english anyway | 09:11 | |
| and so is the rest of raku | |||
| elcaro | I'm aware. I speak the same 2 languages as John McClane... English and bad English. Also, `needle` is used extensively throughout the codebase... but errors are for the user and should be more broadly understandable. | 09:15 | |
| You sure you don't wanna submit a PR. You'll have your name in ~~lights~~ the contributors list! | 09:17 | ||
| github.com/rakudo/rakudo/blob/51c0...l.pm6#L209 | |||
| If, not I will submit one | |||
| Nemokosch | I do appreciate the effort to make Raku "as little anglocentric" (does this even make sense?) as possible | 09:19 | |
| yabobay | looking at code is intimidating | ||
| Nemokosch | I think it's rather exciting | 09:21 | |
| yabobay | is it line 209? | 09:22 | |
| screw it, i'm gonna do it | 09:23 | ||
| lizmat | ++yabobay | 09:24 | |
| elcaro | Sweet... I could do it, but I'd rather empower you. | ||
| yabobay | single-quotes don't interpolate right? | 09:27 | |
| single-quotes don't interpolate, right? | |||
| lizmat | indeed, they do not | 09:34 | |
| yabobay | help, i don't know how to open source | 09:52 | |
| do i just pr this? | |||
|
09:53
jaguart joined
|
|||
| Nemokosch | the one that contains the fix, I suppose | 09:53 | |
| to the original rakudo repository | |||
| yabobay | and what happens when someone accepts that request? does the rakudo repo now have a new branch? | 09:54 | |
| Nemokosch | no, your branch will go to an existing remote branch | ||
| like the master branch of arakudo/rakudo | 09:55 | ||
| like the master branch of rakudo/rakudo | |||
| yabobay | ohhh i see | ||
| so like... should i PR it now? | 09:58 | ||
| i made the edit | 09:59 | ||
| Nemokosch | The thing is, I don't know the workflow for rakudo | ||
| but I suppose you should open a pull request from the branch with your modification to the master of the original rakudo repo | |||
| yabobay | idk, it's spooky | 10:01 | |
| Nemokosch | š | ||
| either way, you can't mess up anything | |||
| yabobay | you gotta admit it's pretty scary tho | ||
| Nemokosch | since it's just a "request" | ||
| it might be overwhelming at first | |||
| yabobay | i clicked the big button | 10:03 | |
| Nemokosch | š„ | 10:06 | |
| elcaro | I'm still confused by git. I fudge my way through... `git clone` or `git pull`, `git branch`, `git commit -am 'foo'`, and `git push`. | 10:14 | |
| If I run into any errors, I use the same trick as described in XKCD 1597 | |||
| xkcd.com/1597/ | |||
| Nemokosch | I still keep finding new things about git that I don't use often enough to learn | 10:15 | |
| also I don't get the point of `merge` if there is the omnipotent `rebase` | 10:17 | ||
| I didn't know about `git add --patch <filename>` for a long time | 10:19 | ||
| allows you to select only a part of your changes in a file | |||
| lizmat also clicked a big button :-) | 10:20 | ||
| yabobay++ | 10:21 | ||
| Nemokosch | the reason why Unison is debated - we have great portable tooling for source code stored in plain text | ||
| not so much for hashed syntax trees... | |||
|
11:21
Kaiepi joined
11:24
Kaipei left
12:33
raiph joined,
raiph left
12:54
frost left
|
|||
| masukomi | um... can someone explain what's going on with this to me ? | 13:21 | |
| ``` | |||
| my @exports = <&foo &bar>; | |||
| @exports.^name # Array | |||
| @exports[].^name # Array | |||
| <@exports> #-> "<@exports>" | |||
| <@exports[]> #-> "<&foo &bar>" | 13:22 | ||
| ``` | |||
| that last line really confuses me. Here's what's going through my head. | |||
| * the `<...>` seems to be a "make an array out of these literal strings with no interpretation " operation | |||
| * `@exports` is an array, that, unsurprisingly isn't interpreted when shoved into `<...>` | |||
| * `@exports[]` is also an array, which, being the same thing, I'd expect to be treated the same way. | |||
| * in addition to what seems to be the same type of object being treated in a different way, we have the compounding factor of `<...>` being a thing you use when you _don't_ want to interpret the contents. | |||
| Obviously, something's wrong in my thinking but what? | |||
| um... can someone explain what's going on with this to me ? | |||
| ``` | |||
| my @exports = <&foo &bar>; | |||
| @exports.^name #-> Array | |||
| @exports[].^name #-> Array | |||
| <@exports> #-> "<@exports>" | |||
| <@exports[]> #-> "<&foo &bar>" | |||
| ``` | |||
| that last line really confuses me. Here's what's going through my head. | |||
| * the `<...>` seems to be a "make an array out of these literal strings with no interpretation " operation | |||
| * `@exports` is an array, that, unsurprisingly isn't interpreted when shoved into `<...>` | |||
| * `@exports[]` is also an array, which, being the same thing, I'd expect to be treated the same way. | |||
| * in addition to what seems to be the same type of object being treated in a different way, we have the compounding factor of `<...>` being a thing you use when you _don't_ want to interpret the contents. | |||
| Obviously, something's wrong in my thinking but what? | |||
| um... can someone explain what's going on with this to me ? | 13:23 | ||
| ``` | |||
| my @exports = <&foo &bar>; | |||
| @exports.^name #-> Array | |||
| @exports[].^name #-> Array | |||
| <@exports> #-> "<@exports>" | |||
| <@exports[]> #-> "<&foo &bar>" | |||
| ``` | |||
| that last line really confuses me. Here's what's going through my head. | |||
| * the `<...>` seems to be a "make an array out of these literal strings with no interpretation " operation | |||
| * `@exports` is an array, that, unsurprisingly isn't interpreted when shoved into `<...>` | |||
| * `@exports[]` is also an array, which, being the same thing, I'd expect to be treated the same way. | |||
| * in addition to what seems to be the same type of object being treated in a different way, we have the compounding factor of `<...>` being a thing you use when you _don't_ want to interpret the contents. | |||
| Obviously, something's wrong in my thinking but what? | |||
| git merge is, as far as i can tell, just a convenience feature to make it easier for folks than thinking about rebasing. | 13:28 | ||
| see also `git checkout foo` creating a new local `foo` branch if you didn't have one, but you have 1 (and only one) remote that has a `foo` branch, and then switching to it. They did this, presumably because folks had trouble with `git checkout -b foo some_remote/foo` or `git branch foo some_remote/foo; git checkout foo` | |||
| there have been a lot of "convenience wrappers" around functionality since its inception. | |||
| . | |||
| git merge is, as far as i can tell, just a convenience feature to make it easier for folks than thinking about rebasing. | |||
| see also `git checkout foo` creating a new local `foo` branch if you didn't have one, but you have 1 (and only one) remote that has a `foo` branch, and then switching to it. They did this, presumably because folks had trouble with `git checkout -b foo some_remote/foo` or `git branch foo some_remote/foo; git checkout foo` | |||
| there have been a lot of "convenience wrappers" around functionality since its inception. | |||
| . | 13:29 | ||
| `git merge` is, as far as i can tell, just a convenience feature to make it easier for folks than thinking about rebasing. | |||
| see also `git checkout foo` creating a new local `foo` branch if you didn't have one, but you have 1 (and only one) remote that has a `foo` branch, and then switching to it. They did this, presumably because folks had trouble with `git checkout -b foo some_remote/foo` or `git branch foo some_remote/foo; git checkout foo` | |||
| there have been a lot of "convenience wrappers" around functionality since its inception. | |||
| . | 13:30 | ||
| `git merge` is, as far as i can tell, just a convenience feature to make it easier for folks than thinking about rebasing. | |||
| see also `git checkout foo` creating a new local `foo` branch if you didn't have one, but you have 1 (and only one) remote that has a `foo` branch, and then switching to it. (it used to just error). They did this, presumably because folks had trouble with `git checkout -b foo some_remote/foo` or `git branch foo some_remote/foo; git checkout foo` | |||
| there have been a lot of "convenience wrappers" around functionality since its inception. | |||
|
13:50
Kaiepi joined
14:11
Guest68 joined,
raiph joined
|
|||
| Guest68 | Hi! I have posted a question on stackoverflow (stackoverflow.com/questions/734149...u-2022-04) about qqx, shell and run failing inside a loop reading from STDIN with raku 2022.04. Earlier versions work just fine. A minimal example is attached to the post. Any thoughts? | 14:13 | |
| raiph | Guest68 Hi, just saw your SO comment and now here. :) | 14:14 | |
| Guest68 | Hi raiph! :) Thank you very much for guiding me! | ||
| raiph | masukomi: I can engage about <@foo[]> if you're around. | 14:15 | |
| lizmat: the IRC logs seem to be repeating stuff like crazy. | |||
| yabobay++ | 14:16 | ||
| yabobay | hi what? | 14:17 | |
| Nemokosch | Just stop using Mac aaaaaaa | ||
| That's not just "wasting time", that's knowingly wasting work put into software for the sake of a company deliberately staying incompatible with everyone | 14:19 | ||
| The more you guys repeat Mac, the louder I will protest | 14:20 | ||
| raiph | Guest68: I think the first thing to do is run a bot to identify the commit at which the behavior changed. | 14:22 | |
| Does that make sense to you? | |||
| And then we can look at the commit to see what the dev said about it and look at the code. | 14:23 | ||
| bisectable: hello | 14:25 | ||
| Guest68: I've not been on IRC much the last few years. | 14:27 | ||
| Ā I think it's my first time on this channel. | |||
| I don't yet recall how to run the bisect bot, nor how to find out how to. | 14:28 | ||
| I will now try figure it out. | 14:29 | ||
| But we may have to wait for someone else to speak up. | |||
| Or go to some other channel. | |||
| I still think this was the right place to start. | |||
| Guest68: But if I figure out otherwise I'll let you know here or on SO. | 14:30 | ||
| help # <-- for bots or Rakoons (who I'm presuming are actually humans, but a chatty furry little animal will be cool too) | 14:33 | ||
| Guest68 | Thank you for your time and effort, raiph! | 14:49 | |
| raiph | bisectable6: help | 14:53 | |
|
14:58
raiph left
15:33
raiph joined
|
|||
| raiph | Guest68: Please connect to the #whateverable channel and meet me there. | 15:34 | |
| Then we'll work out how to bisect and read where the behavior changed. :) | 15:35 | ||
|
16:28
tbrowder left,
tbrowder joined
|
|||
| Guest68 | I'm terribly sorry but I've got to go now. And I won't be near a computer until Monday. If you want we can proceed together then. | 16:42 | |
| lizmat | raiph: I don't think it's the logger, it's the discord bridge: discord allows editing of messages, and each edit appears as a new line on IRC | 17:11 | |
| yabobay | the fact there's people still using IRC makes me happy, and whenever i very occasionally use IRC it makes me happy, but i have to wonder why people are still using IRC on a large scale like this | 17:18 | |
| instead of something like matrix. is it just because irc already has adoption? | 17:19 | ||
| or does it have something that nothing else really can do? | |||
|
17:30
razetime left
18:12
jgaz joined
18:23
raiph left
18:34
Guest68 left
19:28
raiph joined
19:29
jgaz left
19:37
raiph left
|
|||
| i don't remember if raku is where i heard this existing, but i remember seeing a code snippet that's something along the lines of `if $x == 1 or 0` | 20:09 | ||
| is this a thing? | |||
| which is equivalent to `if $x == 1 or $x == 0` | |||
| Nahita | it's not `or` but `|` | ||
| `or` is the lower precedence version of `||`, i.e., logical or | 20:11 | ||
| `|` is the any junction operator | |||
| yabobay | any junction operator? | ||
| Nahita | docs.raku.org/type/Junction | ||
| superposition of values... | |||
| in boolean context, `|`s collapse with the "any" semantic | |||
|
20:13
jaguart left
20:33
jgaz joined
21:19
jgaz left
|
|||
| yabobay | as a user do i have any reason for wanting to use jvm over moarvm (or vice versa)? | 21:21 | |
| guifa | I'd say to use JVM mainly if you have a reason to tie into other Java VM resources. Otherwise, there's not really any advantage | 21:26 | |
|
22:18
Kaiepi left
22:19
Kaiepi joined
23:21
Kaiepi left
|
|||