V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
chai2010
V2EX  ›  程序员

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

  •  
  •   chai2010 ·
    chai2010 · 77 天前 · 1682 次点击
    这是一个创建于 77 天前的主题,其中的信息可能已经有所发展或是发生改变。

    凹语言是国内首个面向 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

    7 条回复
    firefoxwang
        1
    firefoxwang  
       77 天前   ❤️ 3
    有凹语言就有凸语言 https://github.com/tu-lang/tu
    zhangkui
        2
    zhangkui  
       77 天前   ❤️ 1
    [国产语言 MoonBit 崛起,比 Rust 快 9 倍,比 GO 快 35 倍] https://juejin.cn/post/7416604150933733410
    dacapoday
        3
    dacapoday  
       77 天前
    去找大型国央企和部委背书或推广吧,他们才有技术栈的决定权。
    dacapoday
        4
    dacapoday  
       77 天前   ❤️ 1
    标书或职称评定里一个 ”仅限凹语言“,比“简单易用”强多了。
    abc0123xyz
        5
    abc0123xyz  
       77 天前
    支持
    JohnSmith
        6
    JohnSmith  
       77 天前
    @zhangkui #2 是会比较的,来 UC 上班
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2058 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 16:11 · PVG 00:11 · LAX 08:11 · JFK 11:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.