🦋 Welcome to the MAIN() IRC channel of the Raku Programming Language (raku.org). Log available at irclogs.raku.org/raku/live.html . If you're a beginner, you can also check out the #raku-beginner channel! Set by lizmat on 6 September 2022. |
|||
00:07
lizmat_ left
00:08
lizmat joined
00:15
jpn joined
00:20
jpn left
00:35
Summer left
00:36
Summer joined
00:38
epony left
00:39
epony joined
00:55
Guest94 joined
|
|||
Guest94 | Hello, how do I see where a symlink file points to in Raku? | 00:58 | |
Without fully resolving it (following all the symlinks on the way down to the original file path) | |||
If I do “.resolve” I can’t see if it points to another symlink, only the final point | 00:59 | ||
I guess I can always do something like run(<readlink -->, file, :out).slurp(:sink) or something like this. But maybe there is some native-ish way in Raku to do the same? | 01:01 | ||
jdv | leont: did you do symlinks recently? | 01:03 | |
01:05
Sgeo joined
01:10
jpn joined
01:15
jpn left
|
|||
ugexe | nqp::readlink | 01:39 | |
github.com/Raku/nqp/blob/main/docs...n#readlink | 01:40 | ||
tonyo | you can use nqp to do it | ||
oh, ugexe too fast | |||
ugexe | honestly it might be worth creating a IO::Path function to provide a supported interface to readlink (using nqp::readlink) | 01:41 | |
tonyo | the src in IO::Path would make it easy to pass :max-depth, it's set to 256 | ||
i don't know why the :$completely field doesn't seem to do anything in that fn either, a good first ticket for someone (src/core.c/IO/Path.rakumod) | 01:42 | ||
oh, refers to ensuring path exists | |||
02:16
epony left
02:18
epony joined
02:22
epony left
02:23
epony joined
02:26
epony left
02:28
epony joined
02:42
hulk joined,
kylese left
02:58
jpn joined
03:03
jpn left
03:15
hulk left,
kylese joined
03:54
jpn joined
03:59
jpn left
04:19
jpn joined
04:26
jpn left
|
|||
Guest94 | Looking for “nqp” pragma in the docs and seeing “Use at your own risk." | 05:12 | |
It’s considered so low-level so I can screw something up? | 05:13 | ||
But “nqp::readlink X.relative” seems to do the trick, thanks | 05:17 | ||
It does not work with IO.Path though so I had to do the conversion to string via “.relative” | |||
What repository would I use to create an issue about adding IO::Path method for this “readlink”? | 05:24 | ||
06:00
jpn joined
06:05
jpn left
|
|||
Guest94 | If I have two “grammars” how do I use one in another? Like reuse existing grammar as a building block for another one? | 06:11 | |
Or is it even possible or make sense? | 06:12 | ||
I’m just trying to think from Haskell applicative parsers perspective where you just freely compose all kinds of parsers | 06:13 | ||
06:53
derpydoo left
06:56
jpn joined
07:01
jpn left
07:02
jpn joined
07:08
jpn left
07:09
sftp joined
07:21
jpn joined
07:25
jpn left
07:33
derpydoo joined
|
|||
tonyo | Guest94: for readlink, you can do that in the main rakudo repo, github rakudo/rakudo - most likely (if you wanted) you could actually make it work yourself and just submit a PR. for the second question it kind of depends on how you want the grammar to behave but a grammar can 'does' another | 07:50 | |
m: grammar Text { regex text { <+[a..z]>+ } }; grammar Test is Text { rule TOP { <text> } }; dd Test.parse("abc"); | |||
camelia | Match.new(:orig("abc"), :from(0), :pos(3), :hash(Map.new((:text(Match.new(:orig("abc"), :from(0), :pos(3))))))) | ||
Guest94 | “is”/“does” not exactly what I’m looking for. Rather something like: grammar Foo { token TOP { ^ <x> cc <y> $ }; token x { aa }; token y { bb } }; grammar Bar { TOP { ^ <x> $ }; token x { {Foo} } } | 07:54 | |
I just want something like a token (Bar::x) to involve the TOP parser of another grammar | 07:55 | ||
Imagine I have a grammar for some complex timestamp. Then I have a grammar for a file name where such timestamp is present. So I just want to add another token to parse the timestamp as part of the filename. | 07:56 | ||
Like: grammar Timestamp { ...complex stuff... } grammar FileName { TOP { <name> '-' <timestamp> }; token name { <[ a..z ]>+ }; token timestamp {{Timestamp}} } | 07:58 | ||
tonyo | oh i see, you can just call .parse in there on x - | 07:59 | |
Guest94 | I don’t want to deal with name clashing and namespace pollution in general when using 'is'/'does' | ||
tonyo can you give me a simple example? I’ve tried to do it many different ways but all ended up with one kind of error or another | 08:00 | ||
tonyo | yea writing one now, just making sure it works so i'm not spamming | 08:01 | |
Guest94 | If your example works it worth adding a section to the docs | 08:02 | |
tonyo | got a recall working but it's terrible, have another idea | 08:18 | |
(and i'm fairly distracted) | 08:20 | ||
this is least invasive; | 08:21 | ||
m: role Text { regex text { <+[a..z]>+ } }; grammar Test { rule TOP { ^ <text> $ } }; Test.^add_method("text", Text.^lookup("text")); dd T | |||
camelia | ===SORRY!=== Error while compiling <tmp> Undeclared name: T used at line 1 |
||
tonyo | est.parse("abc"); | ||
m: role Text { regex text { <+[a..z]>+ } }; grammar Test { rule TOP { ^ <text> $ } }; Test.^add_method("text", Text.^lookup("text")); dd Test.parse("abc"); | |||
camelia | Match.new(:orig("abc"), :from(0), :pos(3), :hash(Map.new((:text(Match.new(:orig("abc"), :from(0), :pos(3))))))) | ||
08:21
jpn joined
|
|||
tonyo | those methods would be in the meta model docs | 08:23 | |
08:28
jpn left
09:08
jpn joined
09:13
jpn left
09:36
drakonis left
09:58
sena_kun joined
10:04
jpn joined
10:13
jpn left
10:33
jpn joined
10:34
derpydoo left
10:41
jpn left
|
|||
leont | jdv: not recently, but Path::Finder has a bunch of nqp code to deal with just that sort of issue | 11:09 | |
Guest94: IME you don't want to use .relative with nqp::, you want to use .absolute. Otherwise per-thread current directory doesn't work. | 11:10 | ||
lizmat | leont: that should work... can you provide an example? | 11:11 | |
11:13
andinus left,
andinus joined
11:18
Sgeo left
11:41
jpn joined
11:46
jpn left
11:58
epony left
12:00
epony joined
12:22
jpn joined
12:37
jpn left
12:46
jpn joined
|
|||
Xliff | \o | 12:47 | |
m: my $c = 0; say $c = $c++ % 5 for ^20 | 12:48 | ||
camelia | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
||
Xliff | ?? | ||
This works... | |||
m: my $c = 0; say $c = $c.succ for ^20 | |||
camelia | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
||
Xliff | m: my $c = 0; say $c = $c.succ % 5 for ^20 | ||
camelia | 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 |
||
Xliff | Is infix:<=> higher than postfix:<++>? | 12:49 | |
12:49
epony left
12:51
epony joined
12:53
jpn left
|
|||
nemokosch | you should have used ++$c | 12:59 | |
I don't know if Raku even specifies the behavior of what you are doing, C surely wouldn't | 13:00 | ||
that's not about precedence in the pure functional sense, that's about the order of side effects | |||
and I can vaguely recall something about that (being unspecified), lemme look up | 13:01 | ||
github.com/Raku/doc/issues/4058 | 13:03 | ||
in which case my own advice to use ++$c is probably also suboptimal | 13:06 | ||
13:34
jpn joined
13:39
jpn left
13:41
epony left
13:45
epony joined
|
|||
gfldex | m: m: my $c = 0; say( $c = $c++ % 5) for ^20 | 13:48 | |
camelia | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
||
gfldex | m: m: my $c = 0; say( $c = ++$c % 5) for ^20 | ||
camelia | 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 |
||
gfldex | Xliff: Nope. :) | 13:49 | |
14:35
jpn joined
14:39
jpn left
|
|||
Xliff | gfldex: So what's the problem? | 15:19 | |
...Oh fahrfignugen... nevermind. | 15:20 | ||
15:36
jpn joined
15:40
derpydoo joined
15:41
jpn left
15:54
jpn joined
15:59
jpn left
16:13
eseyman left
16:14
manu_ joined,
manu_ is now known as eseyman
|
|||
nemokosch | I feel even ++$c might be more of an "implementation detail", ie. the most reasonable implementation yields in this behavior | 16:15 | |
16:47
jpn joined
16:52
jpn left
|
|||
antononcube | There is a 33% probability that I would write chess engine in Raku. What is a good package name? "Chess", "Game::Chess", "Acme::Chess" ? Or something more literal, like, "Chess::Engine" ? | 16:53 | |
Guest94 | leont i can’t use “.absolute” because the whole point is that I want to see where the symlink is pointing, just the first level, without following the symlinks. If I use `.absolute` I just loose this information because it will follow all the symlinks down to the final destination | 17:32 | |
17:36
Guest94 left
17:47
jpn joined
17:53
jpn left
|
|||
ugexe | I didn’t think .absolute would resolve a symlink or indeed do any actual file ops at all | 18:05 | |
Are you sure it does? | |||
18:34
jpn joined
18:42
jpn left
|
|||
librasteve | Xliff: to answer your question directly (from docs.raku.org/language/operators#O...recedence) autoincrement eg. postifix:<++> is (much) higher than assignment | 18:48 | |
but that is not what you are doing, bear in mind that ++$c is pre-increment and $c++ is post-increment so basically you have demonstrated that $c++ Increments its argument by one and returns the original value. docs.raku.org/language/operators#postfix_++ | 18:59 | ||
19:14
jpn joined
19:19
jpn left
19:27
jpn joined
19:31
jpn left
|
|||
nemokosch | yes but the behavior isn't exactly trivial either. I agree that it's kind of intuitive but that's somewhat subjective at the end of the day | 20:02 | |
when exactly does the postfix ++ increment its operand? apparently earlier than the assignment takes effect because it's lost | 20:03 | ||
so in this particular case, it seems that the precedence of the side effect is also higher - but is that guaranteed? I don't think so | 20:04 | ||
tonyo | m: my $a = 1; say $a++; | ||
camelia | 1 | ||
tonyo | m: my $a = 1; say ++$a; | 20:05 | |
camelia | 2 | ||
20:10
jpn joined
20:16
jpn left
20:38
epony left
21:15
jpn joined
21:19
jpn left
21:39
epony joined
|
|||
librasteve | good job we have ROAST as our spec then | 21:39 | |
21:41
jpn joined
21:46
jpn left
21:51
Sgeo joined
22:13
constxqt_ left
22:20
constxqt_ joined
22:26
jpn joined,
constxqt_ left
22:31
jpn left
22:38
constxqt_ joined
22:43
jpn joined
22:48
constxqt_ left
22:49
jpn left
22:53
constxqt_ joined
22:58
constxqt_ left
23:08
constxqt_ joined
23:16
constxqt_ left
23:30
constxqt_ joined
23:34
constxqt_ left
|