凹语言开发 WebAssembly 应用 3 分钟入门 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
chai2010
V2EX    程序员

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

  •  
  •   chai2010
    chai2010 2024-09-26 08:11:03 +08:00 2240 次点击
    这是一个创建于 427 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    firefoxwang
        1
    firefoxwang  
       2024-09-26 08:30:58 +08:00   3
    有凹语言就有凸语言 https://github.com/tu-lang/tu
    027creed
        2
    027creed  
       2024-09-26 08:46:13 +08:00   1
    [国产语言 MoonBit 崛起,比 Rust 快 9 倍,比 GO 快 35 倍] https://juejin.cn/post/7416604150933733410
    dacapoday
        3
    dacapoday  
       2024-09-26 09:19:16 +08:00
    去找大型国央企和部委背书或推广吧,他们才有技术栈的决定权。
    dacapoday
        4
    dacapoday  
       2024-09-26 09:21:53 +08:00   1
    标书或职称评定里一个 ”仅限凹语言“,比“简单易用”强多了。
    abc0123xyz
        5
    abc0123xyz  
       2024-09-26 09:36:52 +08:00
    支持
    JohnSmith
        6
    JohnSmith  
       2024-09-26 10:50:32 +08:00
    @zhangkui #2 是会比较的,来 UC 上班
    iqoo
        7
    iqoo  
       2024-09-26 11:26:36 +08:00
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5613 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 03:01 PVG 11:01 LAX 19:01 JFK 22:01
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86