【问题标题】:Optimize without sacrificing usual workflow: arguments, POD etc在不牺牲通常工作流程的情况下进行优化:参数、POD 等
【发布时间】:2021-10-14 04:00:52
【问题描述】:

https://martimm.github.io/gnome-gtk3/content-docs/tutorial/Application/sceleton.html,缩写:

在 Raku 中,重要的是要保持主程序很小。这是因为所有代码、程序和模块都被解析并编译成中间代码,由虚拟机执行。大多数时候是 MoarVM,但也有一个 JVM,以后可能还有其他的。无论如何,在运行之前,已编译的模块会保存到 .precomp 目录中,而不是程序中。这意味着程序总是在运行之前被解析和编译,这就是让它保持小规模的原因。

use UserAppClass;

my UserAppClass $user-app .= new;
exit($user-app.run);

嗯,你不能比这更小......,或者也许使用这个单线; exit(UserAppClass.new.run).

其余代码在 UserAppClass 中定义。

很好。

  1. 现在,我们的程序需要接受参数。 sub MAIN 会解析参数并免费生成 $*USAGE,因此我们将使用 sub MAIN。
    我们将sub MAIN 放入used by .raku 程序.rakumod 但我们得到.raku 程序不知道参数。而sub MAIN 在模块中时不会执行。
    我们将sub MAIN 放入.raku 程序中,这样它就可以理解参数但它不再小了。

  2. 此外,该程序的嵌入式POD 可能预计驻留在.raku 程序中。
    将POD 通过.raku 程序.rakumod 放入used 中,我们得到POD 有点隐藏。
    将POD 放入.raku 程序,它不再小了。

  3. 此外,这种方法是否有任何命名约定?
    比如说,你有一个程序Report when your coffee is ready。它的sub MAIN 在coffee-ready.raku 中,而你在use 和QueryCoffeeMachine.rakumod 中。
    您更改了文件的布局,现在对于同一个程序Report when your coffee is ready,您有一个coffee-ready.raku 启动器、一个带有sub MAIN 功能的coffee-ready.MAIN.rakumod 和一个QueryCoffeeMachine.rakumod。
    我相信QueryCoffeeMachine.rakumod 保持不变,
    我觉得coffee-ready.raku 也应该保留这个名字,尽管它的内容改变了
    但是coffee-ready.MAIN.rakumod应该怎么命名呢?

【问题讨论】:

    标签: optimization command-line-arguments main raku precompile


    【解决方案1】:

    无论如何,在运行之前,已编译的模块会保存到.precomp目录中而不是程序。

    Aiui 有人可以将预编译扩展到主程序文件,但对于核心开发人员来说,这是一个低优先级,因为可以使用以下解决方案来解决它:

    1. ...sub MAIN 在模块中时不会执行。

    如果你将它导出/导入到主程序中,模块的MAIN会在你运行主程序时执行:

    # MAIN.rakumod
    our sub MAIN (Int $int-arg, Str $str-arg) { $int-arg }
    
    # main.raku
    use lib '.';
    use MAIN;
    
    1. ...我们得到.raku 程序不知道参数

    如果你在主程序中wrap 导入了MAIN,你就会知道参数:

    # main.raku
    use lib '.';
    use MAIN;
    &MAIN.wrap: -> |args { say args; callsame }
    

    (如果在 CLI 中传递的 args 与从 MAIN 模块导入的 MAIN 子的签名不匹配,则显示使用消息。否则 main.raku 中的包装器被调用并且可以执行它希望传递的参数是什么,并决定如何调用导入的MAIN。)

    (我从Can I capture the returned value of a routine used in RUN-MAIN? 提出了这个解决方案。)

    1. 将 POD 放入 ....rakumod,我们将 POD 隐藏起来。

    我不知道现有的避免这种情况的方法。 (或许可以查看 Access POD from another Raku file 了解如何至少在另一个文件中访问 POD。)

    也许一个新的问题只集中在那个方面是合适的?

    1. .MAIN.rakumod 应该如何命名?

    如果是我,在我的脑海中,我可能有一个Coffee-Ready 文件夹,然后在其中,一个coffee-ready.raku、一个MAIN.rakumod 和一个QueryCoffeeMachine.rakumod。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-14
      • 1970-01-01
      • 2015-12-19
      • 2012-10-17
      • 1970-01-01
      相关资源
      最近更新 更多