gpt4 book ai didi

type-inference - Perl 6类型推断

转载 作者:行者123 更新时间:2023-12-04 03:10:31 26 4
gpt4 key购买 nike

鉴于:

sub abc(Int $n) { say $n }

如果我们将类型为 Str的变量传递给 abc,则会得到编译时错误:
my Str $s = "123";   abc $s;

如果传递包含字符串的无类型变量,则会出现运行时错误:
my $s = "123";   abc $s;

C++支持允许类型推断的 auto关键字。

是否可以在Perl 6中定义类似 auto这样的内容:
auto $s = "123";

会导致 $s键入为 Str吗?

IE。那么我们可以执行以下操作:
auto $s = "123";   abc $s;

并得到一个编译时错误。

最佳答案

Is it possible to define something like auto in Perl 6



我认为是这样。但是我将不得不将您的问题翻译成三个不同的问题,以提供更有用的答案。

对于我对下面前两个问题的回答,请引用 a reddit comment I wrote about this。我的评论分为四个部分,由水平规则分隔。第一部分和最后一部分与您的问题有关。

是否可以修改Perl 6语言?

是的。

您可以或多或少地从用户域代码中随意修改Perl 6语言。

我在上面链接的评论的第一部分引用了一个要点:
  • 使用语法构建的内部语DSL,例如外部DSL,但通过but语机制与标准Perl 6语法混合在一起。必须编写这些DSL,使其与标准Perl 6语法至少有一些基本协调。用这种DSL编写的代码是内联的,与常规代码没有区别。 Relevant slides

  • 引用了我写的最后一部分:

    尽管可以实现can语,但是officially语并没有得到官方的支持……并且不像需要的那样含糖。

    是否可以编写与编译器通信的编译时宏?

    是的。

    不幸的是,您还不能定义语句宏,这是新型变量声明所需要的。引用我上面链接的评论的最后一部分:

    “在需要内部DSL但在语法上与标准Perl 6冲突时,仅使用用户定义的例程和运算符的预期设计选项是...编写 is parsed宏[或]编写s语。从理论上讲,可以解析您想要的任何语法。但是 is parsed宏还没有降落,并且看起来至少还有一年或三年了,它们仍然只是 007中正在讨论的设计概念。”

    是否有可能将新的想法引入Perl 6?

    是的。

    只需实现您的想法并游说它的包容性。可能以a语开头。可能只是直接破解整个编译器。

    我对最后一点很认真。

    Rakudo Perl 6编译器当然是开源的。

    更重要的是,它主要是 written in Perl 6。 (而且不是Perl 6的大多数是nqp,它基本上是完整Perl 6的子集。)

    结论

    如果您可以编写一些基本的Perl 6代码;愿意 ask loads of questions on the freenode IRC channel #perl6-dev;并且有耐心;那么您应该能够在Perl 6中实现几乎任何想法,并且 auto想法似乎相对简单。

    (通过“相对”,我想象一个知识渊博的核心开发人员可能会在几个小时内完成概念验证,前提是我已经正确理解了他们所面临的问题。还有一天,当语和/或宏时抛光,可能需要一个小时左右。)

    关于type-inference - Perl 6类型推断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50516409/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com