🦋 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:00 reportable6 left 00:03 reportable6 joined 01:03 committable6 left, bloatable6 left, bisectable6 left, tellable6 left, releasable6 left, benchable6 left, quotable6 left, evalable6 left, statisfiable6 left, reportable6 left, shareable6 left, nativecallable6 left, sourceable6 left, linkable6 left, coverable6 left, unicodable6 left, squashable6 left, greppable6 left, notable6 left, bisectable6 joined, evalable6 joined, statisfiable6 joined, squashable6 joined, notable6 joined 01:04 nativecallable6 joined, tellable6 joined, quotable6 joined, shareable6 joined, benchable6 joined 01:05 releasable6 joined, coverable6 joined, unicodable6 joined, sourceable6 joined, linkable6 joined, committable6 joined, bloatable6 joined, reportable6 joined 01:06 greppable6 joined 01:16 Tirifto left 01:31 razetime joined 01:44 Tirifto joined 02:02 Sgeo joined 02:07 razetime left 02:13 razetime joined 02:30 hexology left 02:47 razetime left 02:52 Xliff left 03:09 razetime joined 03:36 razetime left
SmokeMachine RakuCron now uses Lumberjack as logging framework, internally but you can also use it for your jobs (ex: github.com/FCO/RakuCron/blob/main/...kuconfig). Now I'm thinking in a way to reuse the rules when the configuration file changes (currently it drops all the rules and created new ones). Is there a way to se if 2 Callables are equivalent? Because that's the thing avoiding it to know if a rule has changed or not 03:38
m: my &a := { 42 }; my &b := { 42 }; say &a env &b 03:39
camelia ===SORRY!=== Error while compiling <tmp>
Two terms in a row
at <tmp>:1
------> my &a := { 42 }; my &b := { 42 }; say &a⏏ env &b
expecting any of:
infix stopper
statement …
SmokeMachine m: my &a := { 42 }; my &b := { 42 }; say &a eqv &b
camelia False
SmokeMachine maybe I should store the AST of the current version and compare if that's the same as the new one... 03:40
04:36 evalable6 left, linkable6 left 04:37 evalable6 joined 04:39 linkable6 joined 05:29 silug left 05:32 silug joined 06:00 reportable6 left 06:02 reportable6 joined 06:39 siavash joined 07:02 codesections left 07:26 jpn joined 07:42 siavash left 07:43 siavash joined, sena_kun joined 08:10 teatwo left 08:12 teatime joined 08:16 teatwo joined 08:17 teatwo left, teatwo joined 08:19 teatime left 08:38 Sgeo left 08:41 jpn left 09:14 razetime joined 09:17 razetime left 09:59 jpn joined 10:18 jpn left 10:22 jpn joined 10:59 jpn left 11:02 jpn joined 11:33 jpn left 12:00 reportable6 left, reportable6 joined
leont Just noticed fez seems to support reset-password but not change-password, that seems wrong 12:38
12:49 siavash left 12:56 jpn joined 13:00 jpn left
vrurg .tell SmokeMachine Saw your question about callables. I don't know what and how RakuCron does, but if your callables were generated from a source then why wouldn't you preserve it (or it's hashsum) and compare the source? 13:29
tellable6 vrurg, I'll pass your message to SmokeMachine
14:00 evalable6 left, linkable6 left 14:01 linkable6 joined 14:02 evalable6 joined 14:08 jpn joined 14:19 jpn left
SmokeMachine . 14:21
tellable6 2023-08-13T13:29:17Z #raku <vrurg> SmokeMachine Saw your question about callables. I don't know what and how RakuCron does, but if your callables were generated from a source then why wouldn't you preserve it (or it's hashsum) and compare the source?
SmokeMachine vrurg: because I don’t want to say it’s different if the only thing that has changed is a comment, for example. 14:22
vrurg AST may not be capable of parsing the code yet because RakuAST is not complete. But otherwise it's an option. 14:26
SmokeMachine vrurg: currently, what I do is: I have a supply from notification on the file changes, then for each change I EVAL its content and emit the generated object, and just use .squish to avoid repeating objects one after the other. That’s made by my Configuration module, but RakuCron have Callables inside those objects… then it thinks all objects are different… 14:30
My idea with the ast would be compare it before running the code, as a new step… but yes, if it may not run every code, that’s not a solution yet… 14:33
vrurg SmokeMachine: There is more reliable but implementation-dependent solution. You can produce textual dump of AST using the compiler and get a digest from it. Slower path is to use `rakudo --target='ast' -e <your code>`. Faster path is to get the compiler object and do like EVAL does. 14:34
Except that EVAL is using :from<stage>, you'd need :target<ast> and then .dump the resulting QAST tree. 14:37
SmokeMachine vrurg: interesting… I’ll try that… 14:41
antononcube @SmokeMachine This partial statement by vrurg: “I don't know what and how RakuCron does […]” can be used as a motivator to write a mission statement for “RakuCron”. 14:44
14:57 vrurg_ joined, vrurg left
SmokeMachine antononcube: English is not my primary language and I’m quite bad on it. That’s the reason most of my projects have bad documentation (if any) and I usually left to write it when I’m sure of the API, to not have to write that again… but I do agree that’s needed. I’ll try to spend some time doing that. Thanks 14:57
antononcube Good luck! Also, excuses, excuses… use use OpenAI/ChatGPT or Bard/PaLM to jump-start documentation and/or correct grammar. 15:05
15:32 Xliff joined
Xliff \o 15:32
SmokeMachine: Consider taking the string representation of your code, running it through .AST and then walking the tree and dropping all of the comment nodes. 15:35
Then you can use the result for your comparisons.
m: q|my $a = 1; #`( why would I ever write an inline comment here? ); my $b = 2|.AST.gist.say 15:36
camelia RakuAST::StatementList.new(
expression => RakuAST::VarDeclaration::Simple.new(
sigil => "\$",
desigilname => RakuAST::Name.from-identifier("a"),
initializer => RakuAST::Initia…
Xliff Hmm...
That comment turned into a RakuAST::Statement::Empty, which you can strip from any StatementList. 15:37
SmokeMachine: You might even be able to use your ASTGrepper for that, yes? 15:38
SmokeMachine Xliff: yes, in theory you could… maybe I need to complete that module… :( 15:47
Xliff :) 15:49
SmokeMachine If a callable stored its own asteroid it would be easier to write a eqv to it… :( 15:54
(And it would also make my life much easier with Red…) 15:58
Xliff I've actually been asking for that. 15:59
SmokeMachine What would be the problem of that? Besides the size of blocks? 16:10
Xliff Don't underestimate the amount of bloat that would cause.
You'd basically be asking for everyone to at least double the size of every Raku program in memory. 16:11
At least.
SmokeMachine Yes… maybe that’s not feasible…
Xliff I think a better way might be to identify such callables by trait.
And only use it on those callables that would benefit from or require that their ASTs are available at run-time. 16:12
s/it/said trait/
SmokeMachine For Red I’m thinking on trying to write a slang that would make all `.map({…})` into `.map({…}, :red-ast($red-ast-version-of-block))` map methods that are not from Red::ResultSeq will just ignore it and the Red::ResultSeq ones will use it to create the sql… (same for grep and first) 16:17
16:32 linkable6 left, evalable6 left 16:34 linkable6 joined 16:35 evalable6 joined 17:16 bigdata joined
Xliff SmokeMachine: Good luck! 17:39
SmokeMachine But not sure if it would work… 17:44
18:00 reportable6 left 18:02 reportable6 joined 18:46 bigdata left 19:34 guifa_ left 20:15 tea3po joined 20:18 teatwo left 21:04 Altai-man joined 21:05 sena_kun left 21:35 Altai-man left 21:37 sena_kun joined 21:51 jpn joined 22:24 jpn left 22:28 sena_kun left 22:39 Xliff left 23:19 jfrent joined, jfrent left 23:20 jfrent joined