Zig JS 开发人员的第一印象

PHPz
发布: 2024-08-24 22:31:38
原创
745 人浏览过

Zig First Impressions from a JS Dev

我一直在为我的游戏开发项目学习 zig,请在此处阅读更多相关信息。这些是我对这门语言的最初(大部分是积极的)印象,来自最近主要是 JS/TS 的经历。

错误处理

错误就是值- 目前很流行的观点是异常并不是最好的。它们创建了一个隐藏的控制流,在 JavaScript 中它们甚至无法被声明;这使您的应用程序更加不稳定。

Zig 使用错误枚举和漂亮的语法糖来实现简单有趣的错误处理。例如:

雷雷

在上面的代码中,我们声明一个错误MyError(这也可以单独完成)并返回它。
try 的意思是“如果返回错误,则在此处返回”,如下所示:

雷雷

我相信这种方法是一个很好的组合,可以让我们避免 Go 语言中无穷无尽的 if (err != nil) 。

其他亮点

  • 错误是显式的,所有类型都必须声明和处理
  • 处理是当场完成的,而不是在区块层面上
  • 由于有效负载捕获,错误可以正确输入并自动完成,从而可以轻松使用诸如 switch 表达式之类的东西。

!void 语法- !用于创建返回类型和错误类型之间的联合。 Zig 支持在 ! 之前不添加任何错误,这应该创建您实际从函数返回的所有错误的并集。

在实践中,我发现这种语法没有帮助。至少以我的 IDE 经验来看,在这种情况下我没有得到任何智能感知,这使得函数不太清晰。只要告诉我你要返回什么!
我只看到它在 main() 函数上有用。

有效载荷捕获

你知道在 TS 中你可能会有像 number 这样的类型 |不明确的?您可以使用 if 或某些逻辑来将类型缩小到您需要的类型,TS 会自动正确显示新类型。
虽然很简单,但这种方法存在问题:

  • 如果类型可以在整个函数中改变,那么就更难遵循
  • 在某些情况下你仍然需要进行演员表

在 Zig 中,您可以通过“有效负载捕获”来完成此操作。您可以“捕获”,即使用结果类型创建一个新的不可变变量。例如:

雷雷

很清楚发生了什么!此外,该变量是不可变的,但如果您真的需要更改它,您可以捕获指向该值的指针。

还值得一提的是,这个机制可以在整个语言中使用,包括:for、switch、catch 等

Comptime恶作剧

不可否认,我还没有掌握 comptime 的全部可能性。但简而言之,您可以在编译期间运行常规代码。您可以创建仅在这段时间内使用的整个函数,并且可以在必要时返回编译错误。

它非常适合 Zig,因为它是一种可塑性很强的语言。甚至类型也是值,这意味着您可以创建、更改和获取有关类型的信息(特别是在 comptime 中)。

Zig 指南中的一个基本示例:

雷雷

编辑经历

我将 VSCode 与官方 Zig 插件(使用 zls)一起使用。我在编辑器中看到的智能感知和错误还有很多不足之处。

“可检测的非法行为”又名会导致编译错误的非法行为通常不会显示在编辑器中。例如:

雷雷

我使用的是 0.14(dev)主分支版本,如果它应该可以工作,请在评论中告诉我!

以上是Zig JS 开发人员的第一印象的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!