🦋 Welcome to the MAIN() IRC channel of the Raku Programming Language (raku.org). This channel is logged for the purpose of keeping a history about its development | evalbot usage: 'm: say 3;' or /msg camelia m: ... | Log inspection is getting closer to beta. If you're a beginner, you can also check out the #raku-beginner channel!
Set by lizmat on 25 August 2021.
Xliff japhb: I've never internationalized before, but I'll accept PRs! 00:16
japhb Fair enough. :-) 00:35
japhb is currently hacking on github.com/japhb/Terminal-LineEditor
I will be happy when I can call it a strict superset of Linenoise, but I still need to do tab completion and hints. At least the key bindings are in much better shape now. 00:36
moon-child japhb: just tried it, alt+left causes it to print 'Str $base = "\x[1B][D"', then a newline, then 'Array @args = ["1", "3"]'; and then it freezes 00:44
japhb moon-child: That indicates that I haven't decoded that key properly and it's printing out the escape sequence info so I can figure out what I'm missing. Helps people give good bug reports. :-) 01:00
Were you just trying key combos, or is there something you expect to be bound to that?
moon-child just trying inputs randomly 01:01
japhb I should still at least have *decoded* that properly, even if it's not bound
Looking at it now.
D'oh, I see what I missed. 01:05
japhb Just waiting for GH tests before uploading 01:27
moon-child: It's `fez upload`ed, but hasn't appeared in raku.land yet 01:29
moon-child: Please do let me know if you come across any more of those. 01:32
Actually, that applies to anyone, not just moon-child++ :-) 01:33
japhb moon-child: 0.0.8 is there now, with more README docs about keymaps. 03:41
moon-child japhb: I am trying to teach lineeditor that multiple kills in sequence should append/prepend to the 'yankable' buffer (so given '^W^W^W^Y', you should get back all three words); but other transformations should reset it 04:21
only problem is, moving the cursor should also trigger this, but EditableBuffer does not model the location of the cursor
moon-child not sure if there's a good solution, beyond just providing it a method to say 'something happened', which seems a bit dirty 04:21
moon-child alternately, the kill buffer should not be managed by the buffer itself. Actually, that seems like the better solution, now that I think about it 04:22
japhb moon-child: Interesting. Is that expected for *any* sequence of deletes? Like should ^W^D^D<backspace>^Y pull all deleted bits back? 04:32
When you say "other transformations should reset it" do you mean you expect them to stop the chain, or reset the yank buffer? 04:33
(Note that I haven't modeled the Readline concept of a kill/yank ring yet, are you expected that as well?) 04:34
moon-child japhb: I mean that they should stop the chain; an operation other than a kill, following a kill, should make it so that subsequent kills will replace the kill buffer rather than adding to it 04:36
japhb Normally EditableBuffer reports from its methods whether *it* made a change to the buffer, and part of the reason for that is that it *does* track the position of the insert cursor.
moon-child my experience with zle and readline is that characterwise deletions should not count
japhb moon-child: ... or in the case of a kill/yank ring, start a new kill buffer on "top"? 04:37
moon-child but repeated word-wise or other deletions should. So ^W M-D M-D ^W ^Y should give you back all four words
japhb: 'on "top"' yeah
japhb Interesting. OK, makes sense (or at least, as much as any historical baggage does :-) ) 04:38
Oh, sorry: 04:39
moon-child in terms of defaults. Presumably you would have an operation 'kill-character-back' vs 'delete-character-back', and can bind whichever you like
japhb Terminal::LineEditor::SingleLineTextInput has-a Terminal::LineEditor::SingleLineTextBuffer::WithCursors -- which is exactly what it sounds like
moon-child oh, I see 04:40
japhb Oh decent point, so then just have word-ish bindings default to kill, and char-ish bindings default to delete?
moon-child that's what I would do. There's also delete-line which should probably (?) replace the entire buffer 04:42
japhb (FWIW, the infrastructure was designed to support infinite cursors and arbitrary undo/redo, neither of which is actually used to full extent when emulating a POSIX shell's line editor, but you know ... it's there. I even tried to make the lower-levels amenable to supporting someone who wants to do collaborative CLI apps.)
moon-child: Yeah, I originally had Ctrl-U bound to delete-line, but found out that was a misunderstanding and it should be (as it is now) delete-to-start 04:44
Oh, you're saying it should create a whole new kill buffer?
moon-child in zsh: 'ab cd |ef gh' (| is the cursor), ^W ^U ^Y gives 'cd ab ef gh' 04:45
it would be neat to give 'ab cd ef gh', but I think 'ab ef gh' is preferable to 'cd ab ef gh' 04:46
(that is, the delete-line operation, regardless of which key it is bound to) 04:47
japhb Yeah, looks like bash/readline gives 'ab cd ef gh' as you want. 04:52
OK, do you want to continue hacking away, or would you like me to give it a swing?
japhb moon-child: I assumed the former, and instead sketched out Linenoise-style tab completion in a branch: github.com/japhb/Terminal-LineEdit...ompletions (And updated the Rakudo PR to match: github.com/rakudo/rakudo/pull/4623) 06:58
frost m: say DateTime.now 12:47
camelia 2021-11-08T13:47:21.589178+01:00
melezhik . 14:42
weekly: Raku weekly on mybfio - mybf.io/?language=Raku&filter=top 14:44
notable6 melezhik, Noted! (weekly)
suman m: my @shaped_array[3,4]; say @shaped_array; 16:36
camelia [[(Any) (Any) (Any) (Any)]
[(Any) (Any) (Any) (Any)]
[(Any) (Any) (Any) (Any)]]
suman Is it possible to assign all elements to be zero? 16:37
lizmat m: my @shaped_array[3,4] is default(0); say @shaped_array 16:40
camelia 5===SORRY!5=== Error while compiling <tmp>
is default on shaped Array not yet implemented. Sorry.
at <tmp>:1
------> 3my @shaped_array[3,4] is default(0)7⏏5; say @shaped_array
expecting any of:
constraint
lizmat meh
ugexe double sorry
suman m: my @new_arr = [2,3,4]; say [@new_arr for 1..3]; 16:59
camelia [[2 3 4] [2 3 4] [2 3 4]]
suman Is this right to create a new list with multiples of same list? 17:00
Altreus m: my @new_arr = [2,3,4]; say @new_arr xx 3 # maybe 17:03
camelia ([2 3 4] [2 3 4] [2 3 4])
Altreus This seems more semantic
suman Hmm 17:05
dakkar m: my @a=[2,3,4];my @b= @a xx 3; @b[0][0]=7; say @b 17:24
camelia [[7 3 4] [7 3 4] [7 3 4]]
dakkar Altreus: suman: notice that little issue, though
Altreus I presumed this was intended by "the same list"
I forgot to mention it though :) 17:25
dakkar it may be intended, it may be surprising… we never know ☺
m: my @a=[2,3,4];my @b= map { [.Slip] }, @a xx 3; @b[0][0]=7; say @b 17:26
camelia [[7 3 4] [2 3 4] [2 3 4]]
dakkar there may be a nicer way of saying "shallow-clone this array"
Altreus m: my @new_arr = [2,3,4]; my @b = [|@new_arr] xx 3; @b[0][0] = 7; say @b # maybe 17:29
camelia [[7 3 4] [2 3 4] [2 3 4]]
Altreus oh it worked
xx calculates per iteration, not before iterating!
dakkar ah yes, it's chunked! 17:30
ugexe .clone does a shallow clone
my @b = @a.clone xx 3;
dakkar ugexe: I should have guessed ☺ thanks
tonyo m: my @a[3,4] = [0 xx 4] xx 3; dd @a 17:35
camelia Array element = Array.new(:shape(3, 4), [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0])
andinus do we have something like go's defer? 18:09
i would like to close Net::SMTP's socket before the program ends, be it from crash or otherwise 18:10
ugexe LEAVE
andinus i see,s o just a LEAVE phaser in MAIN() will do? 18:11
ugexe or END, or whatever phaser you find most appropriate 18:13
andinus is there any difference in using LEAVE (in MAIN()) or using END? 18:15
ugexe yes, LEAVE fires when the block is exited 18:16
andinus ah i see, exit prevents LEAVE to be executed, i asumme END runs everytime
ugexe people can call main my $foo = MAIN(...)
so END cannot be the same as LEAVE
codesections Also, if you have both, END comes last 18:17
ugexe as far as exit short circuiting the LEAVE... that kinda sucks at first glance but also seems like it might make sense 18:18
andinus ah isee, make sense, thanks 18:19
ugexe "It's a common idiom to use LEAVE phaser for closing the handles, which ensures the handle is closed regardless of how the block is left." 18:23
i cant tell if that sentence is technically wrong re: exit or not
lizmat LEAVE .disconnect with $handle;
m: LEAVE say "bye"; exit 1 18:24
camelia ( no output )
lizmat hmmm
m: END say "bye"; exit 1
camelia bye
lizmat if it's about program exit, I guess END is safer
ugexe while it might be case in the naive sense, managing the number of handles open usually shouldnt wait till program END (nor is there probably any reason to close handles at END) 18:25
tonyo if you exit the process cleanly it should close those handles anyway..using exit in the case of leaving files open seems like bad design anyway 18:27
gfldex lolibloggedalittle: gfldex.wordpress.com/2021/11/08/2nd-class-join/ 19:47
codesections m: say (1900..2100).grep({ Date.new(.Int, 1, 1).day-of-week | Date.new(.Int, 12, 31).day-of-week == 4 }).batch(8)».join(' ').join("\n") 19:54
camelia 1903 1908 1914 1920 1925 1931 1936 1942
1948 1953 1959 1964 1970 1976 1981 1987
1992 1998 2004 2009 2015 2020 2026 2032
2037 2043 2048 2054 2060 2065 2071 2076
2082 2088 2093 2099
codesections gfldex++ ^^^ (not that I'd be opposed to a smarter &join, mind you :D ) 19:55
ugexe the feed operator is underused because it is slow 19:56
codesections what makes it slow? It seems like is should be basically the same as a method chain 19:58
is it just a lack of opt work, or is there something about the semantics? 19:59
ugexe from what i remember (and its been a long time so take with a grain of salt) the current implementation was mostly just to have them in the language before release, and that someone really need to put work into revamping or improving them 20:02
there was github.com/rakudo/rakudo/pull/2903 from Kaiepi though 20:04
lizmat and yet another Rakudo Weekly hits the Net: rakudoweekly.blog/2021/11/08/2021-...wo-commas/
ugexe "Turns out getting this to run faster was just a matter of handling QAST better. Feed operators now run roughly 500% faster than the current implementation."
codesections 500% faster is good :) 20:05
ugexe hopefully they will rev-ist their efforts eventually 20:07
revisit
gfldex I believe feed operators use .assuming under the good. 20:08
Kaiepi that was kind of a vague explanation of how that was faster 20:17
it's from the use of STORE instead of append for each stage of the feed
i tried to take it a step further with Channel but iirc came with overhead for the simpler use cases for feeds 20:18
there's probably a means of taking that a step further through Iterator
lizmat fwiw, this is what I did about that about 3 years ago: gist.github.com/lizmat/787a6ddb31d...f3403de78c 20:21
Skarsnik Hello lizmat, should I fill a bug repport for my INIT/BEGIN confusing behavior in a module or is that hidden in the spec somewhere? xD 20:32
lizmat Skarsnik: yes, please 20:35
although it should probably be a problem solving issue
Skarsnik Language Issue? 20:44
Skarsnik lizmat, I realise also we maybe need more phaser for module? since all the compile time phaser in a module only happen at precomp. 21:17
gfldex Skarsnik: Do you want to run code at EXPORT-time? 21:26
Skarsnik Not really, I wanted to forbide a sub to be run at BEGIN time 21:28
so I added a INIT phaser in it to set something so you know it's run time or not in the exported sub, but INIT get run on use/export for the module 21:29
SmokeMachine Hi there! I'm trying to make it easier to share connection, schema, models, etc inside a project, to do that, I've made something that when using like this: github.com/FCO/Red/pull/524/files#...a8d27303R7 it would export all Red, your connection, your models and your schema. But to accomplish that, a use should write something like this: 21:40
github.com/FCO/Red/pull/524/files#...733aedfeR3 I'd like to have that settled without the user having to write the EXPORT sub. Is that possible (without using macro?) is there some way of doing that?
using that, `red-config` does almost everything, but the user needs to place it inside a EXPORT... is there a way to make the EXPORT not necessary? I've tried exporting a fund called EXPORT, but it's exported before the function call... so I can't customise the export...(only if I put that inside a BEGIN, I suppose... but if I have to put that inside anything, the EXPORT would be better) 21:50
SmokeMachine or would it be better to leave the EXPORT there to make it visible it's being exported? 21:52
tonyo bloatware 22:51