记一次 🐰 MoonBit 面试 [jsr-000G]

如何了解到 🐰 MoonBit ,为什么对 🐰 MoonBit 感兴趣,希望在 🐰 MoonBit 做什么?

: ...

套近乎瞎聊时间:

🐰 MoonBit option 语法糖,嵌套问题。

: 单纯语法糖,可以嵌套。

🐰 MoonBit result 语法糖,为什么在左边的是 right

: 习惯和口味问题,因为原来设计的是类似 rust 的 Result<T, E>,所以保留了顺序。

🐰 MoonBit 的错误处理作为二等公民,与 rust 这样的将错误处理作为一等公民的方式有何不同,在程序分析中有什么分别?还特别问了一个问题:在 rust 中,某函数的每一个分支都事实上会返回 Ok(T),用什么方法能够确定这个函数其实应该返回 T 而不是 Result<T, _> 呢?

: (根本不懂,胡扯了一下什么生存分析,什么不动点)。

在 try catch 的方式中,抛出错误的点是明显的,方便程序分析。

𝑺 Second State 做了什么工作?

: rust 库到 WASI 的移植。有时会通过 host function 的方式移植。

host function 是什么?

: 在 host 执行的 native 代码,...

对 WASM 的提案有哪些了解和想法,如果有机会有没有想提的提案。

: 提了一下 WASMGC 和 TCO。后面一个问题没回答。

对 WASMGC 的了解和想法。

: 不太了解。中间提到了 i31,可惜没有机会说出 tagged pointer 这个名词。i31 在 OCaml 中也存在。

对 WASM 的控制流有什么想法,为什么用 loop label 的方式,而不是 goto

: 方便抽象更高的语言编译;方便 simd 优化。

WASM 是栈机,goto 不容易保持栈平衡。

希望在 🐰 MoonBit 做什么工作?

: 语法和特性,非优化和分析方面。

偏好用什么 parser?

: 小的用 parser combinator,大的手写,几乎不用 parser generator。最近写的是 pratt 的。

LL, LR, L ..K 的区别(我完全不懂,听不明白)。

: 不太了解。

写 parser 遇到的心得体会?

: 聊了一个 tokenizer 的 glue 问题:parser 期待的是两个 :,而因为 token 中存在 ::,token stream 中来的也就是 ::,在 parse 过程中判断困难。

用 pratt 的优势?

: 聊了一下 matklad 的文章

为什么大多数语言都不用 parser generator?手写的优势是什么?

: 可能更好的性能;更好的报错信息。