首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >理解Safe.Coerce的文本

理解Safe.Coerce的文本
EN

Stack Overflow用户
提问于 2021-03-23 19:40:26
回答 1查看 70关注 0票数 1

我一直在查看一些代码片段的编译版本,以深入了解我的代码是如何在运行时表示的。

在编译的JavaScript中,看到安全胁迫和不安全胁迫是相同的,我并不感到惊讶。到目前为止,在我看过的代码中,有一个未使用/未定义的字典被传递给了安全强制。

看起来,如果两种类型的运行时表示是相同的,那么拥有/使用这种类型就不需要任何运行时开销。这不是真的,我很好奇为什么。

胁迫两种类型需要在运行时调用函数。我不明白的是,这个函数调用似乎什么也不做。

代码语言:javascript
运行
复制
exports.unsafeCoerce = function (x) {
  return x;
};

如果我声明一个新类型

代码语言:javascript
运行
复制
newtype Selection = Selection Int

我在JavaScript中看到了类似的东西:

代码语言:javascript
运行
复制
var Selection = function (x) {
  return x;
};

这意味着我可能在JavaScript中看到这样的东西:

代码语言:javascript
运行
复制
return Selection(Data_Int.pow(2)(Safe_Coerce.coerce()(n) - 1 | 0));

它应该与此相同:

代码语言:javascript
运行
复制
return Data_Int.pow(2)(n - 1 | 0);

在这种情况下,Selectioncoerce都只返回给定的内容。一旦完成了类型检查,我就不知道它们继续起什么作用了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-23 22:47:32

代码生成的原因就像您建议的那样,而不是以更高效的形式生成,因为purs编译器只有一个简单的优化器。

之所以定义unsafeCoerce,是因为它是一个PureScript函数,必须与PureScript函数的运行时表示相匹配。Selection也是如此。

约束被表示为字典上的函数。不久前,还添加了一种优化,使空字典不必构造为空JavaScript对象,而是可以由undefined表示。这就是为什么没有将参数传递给coerce的原因。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66770207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档