相关疑难解决方法(0)

Raku 中类型/约束的性能损失?

与 Perl 5 相比,Raku 引入了渐进式类型。逐渐类型化的面向对象语言的景观非常丰富,包括:Typed Racket、C#、StrongScript、Reticulated Python。

Raku 官方网站上说“可选的渐进类型检查,无需额外的运行时间成本”。据我所知,由于强制类型系统健全性的策略,一些渐进式类型语言(如 Typed Racket 和 Reticulated Python)遭受了严重的性能问题。另一方面,由于相对便宜的名义子类型测试,StrongScript 中的具体类型表现良好。渐进式分类研究(不包括乐):

StrongScript 中的C#具体类型:在类型构造函数上使用运行时子类型测试来补充静态类型。虽然静态类型代码以本机速度执行,但值是在类型和非类型边界上动态检查的。类型插入有效的强制转换并导致可以优化的代码。它们也很健全,开销也很低,但是在表达能力和从无类型迁移到有类型的能力方面付出了代价。

Typed Racket:监视值以确保它们按照指定的类型运行。包装器不是检查静态类型标签(如混凝土)的高阶和可变值,而是确保值与其声明类型的持久一致性。它避免了类型化代码中的强制转换。然而,它为这种健全性付出的代价是在类型化-非类型化边界插入重量级包装器。

网状Python:介于以上两者之间;它添加了类型转换,但仅针对顶级数据结构。网状 Python 的瞬态语义的性能对于具体类型来说是最坏的情况——即,几乎每次调用都会进行强制转换。它在使用时检查类型,因此向程序添加类型的行为会引入更多强制转换并可能减慢程序速度(即使在完全类型化的代码中)。

Raku 的运行时执行策略是类似于 C# 和 StrongScript 中的具体类型,还是它有自己的一套策略来确保没有像 Typed Racket 和 Reticulated Python 那样明显的性能问题?它有健全的渐变类型系统吗?

c# performance raku

29
推荐指数
2
解决办法
1153
查看次数

Actually CATCHing exceptions without creating GOTO

Looking over my Raku code, I've realized that I pretty much never use CATCH blocks to actually catch/handle error. Instead, I handle errors with try blocks and testing for undefined values; the only thing I use CATCH blocks for is to log errors differently. I don't seem to be alone in this habit – looking at the CATCH blocks in the Raku docs, pretty much none of them handle the error in any sense beyond printing a message. (The …

goto exception rakudo raku

10
推荐指数
2
解决办法
183
查看次数

插入而不在 Raku 中创建字符串上下文?

如果我有一个变量my $a = True,那么我从下面的代码中得到这个输出:

say «a list of words foo $a bar baz».raku; 
# OUTPUT: ("a", "list", "of", "words", "foo", "True", "bar", "baz")
Run Code Online (Sandbox Code Playgroud)

也就是说,即使结果是 a List,元素True在被包含在列表中之前也会被字符串化——列表包含"True",而不是True。有什么方法可以在仍然使用插值的同时避免这种字符串化?

如果$a是我定义的类(因此可以Str为其编写方法)而不是 ,那么有没有办法做到这一点Bool

(我知道我可以写更详细的("a", "list", "of", "words", "foo", $a, "bar", "baz")or «a list of words foo».Slip, $a, «bar baz».Slip,但我问是否有办法仍然使用插值)。

string rakudo string-interpolation raku

8
推荐指数
1
解决办法
113
查看次数

标签 统计

raku ×3

rakudo ×2

c# ×1

exception ×1

goto ×1

performance ×1

string ×1

string-interpolation ×1