凹语言开发 WebAssembly 应用 3 分钟入门

3 天前
 chai2010

凹语言是国内首个面向 WebAssembly 设计通用编程语言,也是目前被 CNCF 基金会 wasm 全景图 收录的的唯一一个来自中国的开源编程语言项目。凹语言项目诞生时的一个愿景就是简化 WebAssembly 网页应用的开发。这里我们将展示如何快速开启一个 WebAssembly 应用。

1. 安装凹语言命令行

凹语言采用 Go 语言实现,目前可以通过以下 Go 命令安装最新的凹语言命令行:

$ go install wa-lang.org/wa@master

安装完成后输出wa命令查看帮助信息。

2. 初始化凹语言工程

通过wa init命令初始化一个名为hello的工程。

3. 编译并执行凹语言程序

hello目录对应的命令行环境通过wa run命令编译并执行:

$ wa run
listen at http://localhost:8000
...

该命令在编译得到 wasm 文件后,会在 output 命令启动一个 web 服务。然后通过以上网址可以访问index.html页面。效果如下:

在开发者控制台窗口输出了“你好,凹语言!”和5050结果。

4. 定制 html 页面

打开网页看到的是1+2+3+...+100 = 5050,这是在output/index.html网页调用Sum函数计算的结果。index.html文件如下:

<!DOCTYPE html>
<html lang="en">
<body>
  <pre id="output"></pre>
  <script type="text/javascript" src="./hello.js"></script>

  <script>
    let app = new WaApp();
    app.init().then((result) => {
      app.main();
      document.getElementById('output').innerText = `1+2+3+...+100 = ${app.Sum(100)}`;
    })
  </script>
</body>
</html>

首先是通过hello.js胶水代码初始化wasm模块,得到了WaApp对象。然后通过app.init()执行凹语言的init初始化代码,然后通过app.main()执行main函数代码。app.Sum对应的是导出的Sum函数,然后将计算结果更新到页面的output区域。

5. 凹语言版本的 Brainfuck 解释器

在 “st0013:凹语言、图灵机和 BF 语言” 文章中,我们介绍过用凹语言写了一个命令行版本的 Brainfuck 解释器,现在可以将其改造为网页版本。

首先是修改 main.wa 导出 Run 函数,代码在 (waroot/examples/brainfuck)。在线测试地址: https://wa-lang.org/wa/brainfuck/,执行效果如下:

6. 展望

WebAssembly 是一个非常有前景的基础技术,但是至少使用门槛较高。凹语言作为面向 WebAssembly 设计的通用语言,希望通过简化流程让大家更方便地使用该技术从而享受技术发展带来的红利。也希望对该技术方向感兴趣的同学一起共建。


完整文章: https://wa-lang.org/smalltalk/st0053.html

729 次点击
所在节点    程序员
7 条回复
firefoxwang
3 天前
有凹语言就有凸语言 https://github.com/tu-lang/tu
zhangkui
3 天前
[国产语言 MoonBit 崛起,比 Rust 快 9 倍,比 GO 快 35 倍] https://juejin.cn/post/7416604150933733410
dacapoday
3 天前
去找大型国央企和部委背书或推广吧,他们才有技术栈的决定权。
dacapoday
3 天前
标书或职称评定里一个 ”仅限凹语言“,比“简单易用”强多了。
abc0123xyz
3 天前
支持
JohnSmith
3 天前
@zhangkui #2 是会比较的,来 UC 上班
iqoo
3 天前

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1075848

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX