【问题标题】:Learning (& teaching) assembly with WASM (WebAssembly)?使用 WASM(WebAssembly)学习(和教学)组装?
【发布时间】:2017-04-25 17:05:20
【问题描述】:

鉴于WASMFebruary 中达到了MVP,是否有人花时间尝试通过使用 WASM 来实际学习/教授 WebAssembly 的更高级别的组装方面的可行性?

浏览了一些资料后,似乎它仍然针对 C/C++ 开发(可能是由于仍然存在的潜在通量状态?)并且目前还没有真正的资料直接讨论使用 WASM作为学习汇编编程原理。

WASM (至少可以)独特地适合于学习和教学,以一种非常通用的方式组装自身,如果需要,以后可以扩展到特定的硬件。学习 WASM 本身对于未来的一般工作和编写有趣且独特优化的程序可能很有价值。

看到人们对用 WASM 复活的旧演示场景之类的东西感兴趣可能会很有趣...

【问题讨论】:

  • 作为一个老演示场景,我发现很难理解任何将“组装”命名为名称的东西,然后以“便携”开始其特性。这不是机器代码的工作方式,也不是我们在能力有限时将机器置于最前沿的方式。现在有了无限的能力,很难证明不使用 C++ 和着色器等高级可移植语言是合理的。
  • 该产品似乎命名错误,就像 JavaScript 与 Java 关系不大一样。我们还有.NET-assembly,它根本不是一种汇编语言。
  • 顺便说一句,出于教育目的,目的是展示低级机械,直接连接到电子/逻辑门,我建议使用类似:Simple 8-bit Assembler simulator (web app)。这涵盖了所有非常基本的原则,并且非常简单。我认为它缺少一个小的调整是完美的,但是如果有足够的课程,这可以通过讲师+理论来涵盖(我认为这可以轻松涵盖 6 甚至 12 个月的跨度,如果学生已经了解 JS,他们甚至可以在以后获得高级任务来扩展模拟器)。
  • 我认为我们都应该注意到这可能是一个非常有价值的问题。很有可能在(不太遥远的)未来,wasm 将用于编译器研究和编译器教育,因为它肯定会用于编译器创建,以便将语言移植到“web”平台。此外,虽然wasm的高层次性与其他组件肯定不一样,但它仍然有可能被用于组件教育,因为它将是一个针对性很强的平台,将成为一个可行的教学点。

标签: javascript webassembly


【解决方案1】:

我不确定 Wasm 是否适合首先学习汇编语言。虽然它提炼了现代 CPU 中可用的许多基本操作,但它也是一种更高级别的抽象。例如:

  • 是堆栈机。

  • 它有一组无限的虚拟寄存器。

  • 它具有结构化的控制流。

  • 它不提供对堆栈的访问。

  • 它不提供对代码的访问。

  • 已输入。

  • 未来它可能会获得其他更高级的功能。

其中许多是使 Wasm 安全可移植的先决条件,这本身就与普通的汇编语言非常不同。

(我碰巧同意那些说“WebAssembly”有点用词不当的人的观点——实际上是“Web”部分和“Assembly”部分。这是对 JavaScript 的一个游戏,以前被称为“the Web 的汇编语言”,因为它无处不在。)

【讨论】:

  • ∞ 寄存器和没有堆栈对于教学来说非常有用:一个人可以人为地限制自己使用 8 或 32 个局部变量,并将所有内容都溢出到内存中,就好像它是一个堆栈。您甚至可以将本地“固定”为堆栈指针。完全同意其他观点!
【解决方案2】:

WASM 就像普通的处理器组装一样,但是...对于 web :-) 同样,99.9% 的人如果不想学习组装,就不需要学习 WASM .

如果你想跳入低级的东西,特别是如果你要处理编译器,WASM 将非常有用。 WASM 将是一种方便的移植方式,例如,将 C++ 编译器的后端移植到浏览器中。因此,您编译到 x86/x64/ARM/etc 的同一个 GCC/LLVM 也可以为 web 编译。

请注意,除了名称 Web“程序集”之外,这与 x86 或 x64 等 CPU 架构没有太大关系。所以“用 WASM 学习汇编”不需要学习“裸机”。有时可能会有点混乱。

【讨论】:

    猜你喜欢
    • 2013-08-29
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多