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. |
|||
Anton Antonov | <@297037173541175296> Here: www.youtube.com/watch?v=G2eDeSRZ6p8&t=1309s | 00:01 | |
Nemokosch | does this actually explain though? I watched this back then | 00:17 | |
Anton Antonov | Yeah, it is a very short explanation -- camelCase puts more line-noise to the reader of the package. | 00:34 | |
I agree with that. I prefer kebab-case, but often I forget that is an option in Raku. | 00:36 | ||
00:54
Nemokosch left
|
|||
Nemokosch | I'm fine with kebab-case but yeah, I don't think it's an unforgivable sin to use camelCase for whatever reason | 00:55 | |
01:14
frost joined
|
|||
guifa | To me it's just a "make stuff consistent" — and that's when you can often argue in favor of using stuff other than kebab case — if interacting with tools that default to other ones, it can sometimes make more sense to maintain their styles | 01:48 | |
02:01
razetime joined
02:34
Heptite joined
|
|||
CIAvash | I personally think one should use whatever style they want, unless they want to follow a convention or style guide for working in a team or other reasons. | 03:15 | |
Anton Antonov | I have used camelCase for decades in any language I have programmed. So, that style creeps in if I do not pay attention into my Raku packages. | 03:32 | |
03:49
Heptite left
04:38
razetime left
04:39
razetime joined
05:15
razetime left
05:16
razetime joined
06:38
razetime left,
razetime_ joined
07:39
Guest68 joined
07:58
razetime_ left
07:59
razetime joined
|
|||
Kaiepi | i use kebab-case in raku mostly | 08:53 | |
huge exception being metamethods | |||
because those tend to use `_` | |||
Nemokosch | I would like to use my own comparator for testing my module, it would be good if I could import it in all test files without exporting it from the module | 10:30 | |
Is there a way to do this without making a different module? | |||
10:44
gfldex left,
deadmarshal left
|
|||
lizmat | Nemokosch: logs.liz.nl/raku/2021-07-28.html#22:06 perhaps answers your question | 10:45 | |
10:49
gfldex joined,
deadmarshal joined
|
|||
Nemokosch | well, I don't know... maybe not | 10:58 | |
the important part is that I want it to be shared across multiple test files | 10:59 | ||
without polluting my module to the outside | |||
11:30
razetime left
11:31
razetime joined
12:31
frost left
12:35
Kaiepi left
12:36
Kaiepi joined
|
|||
Kaiepi | my `Trait::Traced` module has a shared `t/lib` for tests | 12:39 | |
`use lib $?FILE.IO.sibling: 'lib'` | 12:40 | ||
but i recall people working on the module loader being kind of irked by this pattern for one reason or another | |||
but i recall people working on the `CompUnit` etc. being kind of irked by this pattern for one reason or another | 12:42 | ||
in rust it's not uncommon for one crate to be fragmented. maybe a test dependency others depending on it could take advantage of optionally <@297037173541175296> ? | 12:44 | ||
Nemokosch | > maybe a test dependency others depending on it could take advantage of optionally | 13:03 | |
sorry but I just can't comprehend this sentence lol | |||
Kaiepi | a completely separate module not bundled with the library itself | 13:09 | |
there's a test dependency field in `META6.json` for stuff like that | 13:10 | ||
if you need tools to help with testing, others might as well | 13:11 | ||
guifa | Nemokosch: a few things I could think of. One, put it in a separate module file within your module. This would make it available to you, but you could even feature guard it as exported only with `use My::Comparator :TESTING` or something. Two, if the comparator might have even a slight bit of general benefit outside of your module, put it in its own module, and include it as a test dependency only. Three, I believe you | ||
are able to have t/lib/Comparator.rakumod; and then in t/01-foo.rakutest have `use lib 'lib', use Comparator` | |||
I feel like I've done three before, but don't quote me on it | |||
Kaiepi | ^ | 13:12 | |
lizmat | and yet another Rakudo Weekly News hits the Net: rakudoweekly.blog/2022/09/05/2022-...-in-at-50/ | 13:25 | |
Nemokosch | well, I'll have to ponder upon this anyway. Let me summarize the situation itself as well | 13:44 | |
HTML::Tag generates HTML strings from objects that describe tags | 13:45 | ||
the order of attributes doesn't matter in HTML | 13:46 | ||
but random attribute order is hard to test | |||
so the workaround I inherited was to sort the attributes some way | |||
I'd like to get rid of this eventually, it's an unnecessary performance cost | |||
I'd rather have slower tests than slower runtime code | 13:47 | ||
Kaiepi | are you depending on `^attributes`? | 13:48 | |
Nemokosch | perhaps not | ||
but the attributes are stored in a Hash anyway iirc | |||
Kaiepi | yeah, that's `^attribute_table` | ||
Nemokosch | I mean, it's done by hand basically | ||
there is an attr field | |||
and that attr field is populated | 13:49 | ||
eventually the mktag method generates the string from that (as well) | |||
github.com/2colours/HTML-Tag/blob/...akumod#L16 | 13:50 | ||
Kaiepi | it looks a bit like the values want a wrapper with a `Str` method | 13:53 | |
with `when %self-resolving{$_}` and `default` being one type and `when 'value'` being another | 13:54 | ||
Nemokosch | Let me quote the original author: "definitely work in progress" 🙂 | ||
And I don't want to appear thankless because what you're saying makes sense ultimately, it's a good way to go about it probably | 13:55 | ||
But I think we could establish the "Y-X problem" term, as a paraphrasis of "X-Y problem" | 13:56 | ||
and I can understand that many people don't like to show code because of that | |||
they ask about "Y" and they get answers about "X" instead | |||
Kaiepi | ah sorry | ||
Nemokosch | like let's assume for now that the implementation is nicer 😂 | 13:57 | |
I'm not sure if that makes the test easier | |||
unless there is a clever way to eliminate to nondeterminism altogether | |||
13:58
Heptite joined
|
|||
yabobay | is this very beginnery? | 14:00 | |
Nemokosch | I assumed so, because I'm super unknowledgeable with modules | ||
and since it came up if the testing could be useful for others, I thought it would be good to talk about what needs to be tested | 14:01 | ||
so that others can judge if it's worth it | 14:03 | ||
guifa | I wonder if a Test::Util module might not be a bad idea. For instance, it's not super easy to see if two lists are functionally equivalent. for instance, <a b c> ~~/eqv <c b a> returns False, but that's probably a common test someone might want to do. You *could* convert both to a bag, but I'd venture to say that's not immediately intuitive for someone. So Test::Util could export, say, is-basically-same test, or an | 14:05 | |
unord-eqv infix, etc. | |||
(also the Bag version wouldn't work on arbitrary objects, since IIRC it uses WHICH / === comparisons) | 14:10 | ||
Nemokosch | yes, it does | 14:13 | |
<@989550365533937664> 😎 | 14:25 | ||
yabobay | where is this written | 14:26 | |
Nemokosch | rakudoweekly.blog/2022/09/05/2022-...-in-at-50/ | ||
liz always sends it to IRC | 14:27 | ||
lizmat | m: <a b c> (==) <b c a> # guifa, set equality for the win! | ||
Nemokosch | and gfldex usually reposts it in <#538445796664803330> | ||
camelia | WARNINGS for <tmp>: Useless use of "(==)" in expression "<a b c> (==) <b c a>" in sink context (line 1) |
||
Nemokosch | if you are looking around on a monday or tuesday afternoon on this server, there are ~ 3 occasions to catch it 😋 | ||
lizmat | m: say <a b c> (==) <b c a> # guifa, set equality for the win! | 14:28 | |
camelia | True | ||
Nemokosch | does it work for "multisets" as well? | ||
m: say <a b c a> (==) <b c a> | |||
lizmat | Nemokosch: if no sets are in the equation, then set semantics are assumed | 14:29 | |
m: say <a b c a> (==) <b c a> # set semantics | |||
camelia | True | ||
lizmat | m: say <a b c a> (==) <b c a>.Bag # bag semantics | ||
camelia | False | ||
Nemokosch | well... sometimes you want this to be False, depending on the task | ||
lizmat | then use Bag semantics by making either side of the comparison a Bag | 14:30 | |
m: say <a b c a> (==) bag <b c a> # perhaps better readable | 14:31 | ||
camelia | False | ||
Nemokosch | it makes sense but if we accept the premise that converting to Bag is "code smell" in the test, then we are left with nothing | ||
which I don't necessarily agree with, to be honest, but it's not ocompletely baseless either | 14:32 | ||
which I don't necessarily agree with, to be honest, but it's not completely baseless either | |||
lizmat | m: dd (<a b c a> (==) <a b c>):bag # would an adverb like that make more sense ? | 14:45 | |
camelia | ===SORRY!=== Error while compiling <tmp> You can't adverb (<a b c a> (==) <a b c>) at <tmp>:1 ------> dd (<a b c a> (==) <a b c>):bag⏏ # would an adverb like that make more expecting any of: pair value |
||
Anton Antonov | Why not use XOR (symmetric difference) on sets (or lists or bags) and test is it empty? Something like `@A ⊖ @B eqv ∅` . | 14:55 | |
(I might have missed the point of the discussion though... ) | 14:56 | ||
lizmat | Anton Antonov: that's why I implemented set equality, so you wouldn't have to do that | 14:59 | |
set equality also allows short-circuiting | |||
m: say <d a b c> (==) <a b c> # returns False on seeing that "d" is not at the right hand side | 15:00 | ||
camelia | False | ||
Anton Antonov | @lizmat Yes, `(==)` is good / useful. Definitely wasn't in my active Raku vocabulary. (But I can "figure out" or come up equations like the one I posted above.) | 15:03 | |
@lizmat I started considering Raku for implementing Machine Learning (ML) algorithms after seeing this talk of yours: "Raku - Sets without borders", archive.fosdem.org/2021/schedule/e...t_borders/ . (I mentioned that before.) Before that I was using _only_ Raku's grammars functionalities. So, I am rewatching that talk now, since I am sure I have missed some (important) detai | 15:28 | ||
Heptite | Is Learning Perl6 a decent resource to start learning Raku? | 15:33 | |
Anton Antonov | @Heptite I think so. It is the first book I read on Raku / Perl6. (Then Moritz' "Parsing with Perl 6 Regexes and Grammars: A Recursive Descent into Parsing".) | 15:45 | |
Heptite | Thank you. :) I'll start there. | 16:16 | |
guifa | m: class A { has $.x }; say A.new(:2x) (==) A.new(:2x) | 16:17 | |
camelia | False | ||
guifa | ^^ lizmat unfortunately, (==) fails for non-value types. A (==)-like operator that uses eqv instead of === could be useful (not for Raku itself, but for test utils and such) | 16:18 | |
lizmat | guifa: fair point, but of course, you could make A a ValueType (if that makes sense) | 17:16 | |
Anton Antonov | Is there are a way to make provide detailed descriptions for CLI scripts in a package? For example, I think the CLI usage message is way too long here: github.com/antononcube/Raku-DSL-En...-interface | 17:23 | |
17:49
razetime left
18:35
n1to joined
|
|||
guifa | You can override `sub USAGE` for basic control, or `sub GENERATE-USAGE` for really fine grained control | 18:37 | |
Anton Antonov | @guifa Thank you! I will read the documentation for that. | 18:40 | |
22:04
n1to left
|