因「TypeScript 问题答疑及经验分享」产生了 对AssemblyScript的期待。

路很远,咱们可以慢慢走啊。mei’必要一口气吃成胖子,单个.as文件的支持与编译并不是难事,以后复数个.as的合并然后编译,可能还有些问题。但提供接口让cocos使用者个人这边试试也可以啊。有活跃性不挺好么。
大事当然很重要,但我们利用者只是用自己希望的一部分,况且我说的加类型单件编译和cocos整体项目的assemblyscript转型并处冲突。我觉得即使不成功也可以留下好的遗产。

你还是没懂啊,是不支持。不是不可以编译。cocos的源码过于松散,可以称之为anyscript。as需要的是强类型,强类型不等于静态类型。cocos的大量写法本身并不具备通过asc编译成wasm的能力。因为asc不支持。

如果你只是尝试把ts变成为wasm。那太简单了,随便搭建一个脚手架就行

是啊,我的前提就是,在cocoscreator里新增加一个语言.as(assemblyscript),然后cocos发现了.as的文件的话,就把它编译成 .wasm,这个编译和ts编译成js一样,是后台编译,我们不用去敲命令。
然后一般的.ts文件,不把.ts编译为 .wasm,而是.js文件。
.as文件和.ts文件的交互,通过uuid确定·.as文件的uuid形式的.wasm
,所以技术上没什么大问题,如果有的话,提出来可以交流改善一下,
谢谢!

WebAssembly.instantiateStreaming(fetch('c52c8f27-0c82-43cb-88b8-c72b1dd6b001.wasm'), {
  env: {
    memory
  },
  JSMath: Math
}).then(({ exports }) => {

担心ts和as的混用,所以还是让ts继续转js吧,吧好事留给as

我也不知道这个是开发个接口还是hook,还是消息什么的。
Cocos这边压力很大,但如果能给利用者一些甜头的话,那大家就会自发的去爱这款产品,维护这款产品,想着能出微薄之力。

VSCode的插件也把AssemblyScript的扩展名默认为.as

const asc = require("assemblyscript/cli/asc");
asc.ready.then(() => {
  asc.main([
    "myModule.as",
    "--binaryFile", "myModule.wasm",
    "--optimize",
    "--sourceMap",
    "--measure",
    "--extension",
    "as"
  ], {
  }, function(err) {
    if (err)
      throw err;
  });
});

这里更正一个错误,要直接用.as进行编译的话,文件名是.as肯定不用说,必须注意的是asc.main里的参数的写法,我一开始一直写"–extension as",结果不识别。后来阅读资料才发现应该分开写,"–extension", “as”

这里的"myModule.wasm"是sample里的,可以把这个改成uuid的路径,这样看就像cocos多了。

嵌套进cocos编辑器里了,明后天改改loader部分。
(我只是在这个贴里提些希望而已。。让多多公开接口,hook,event。。。。说白了和我的项目无关)

》cocos的源码过于松散,可以称之为anyscript。as需要的是强类型,强类型不等于静态类型。cocos的大量写法本身并不具备通过asc编译成wasm的能力
引擎组的人如果想把引擎重构一下编译我当然支持。
但是我这边是利用者,我需要保护的是我这边的业务逻辑,当然业务逻辑里也有不重要的,不重要的就ts转js后加的混淆就可以了。重要的一部分class,计算,数据,都可以直接一开始创建文件时就建为.as文件,如果规定好里面的命名什么的,和一般使用应用应该没什么差别。
当然引擎组能把cocos引擎这边也wasm化了的话,那当然更好。
为什么不用脚手架什么什么的,.ts怎么通过cocos后台编译成.js的呢?用相同的办法就可以了。把.as拖入cocos编辑器,然后编辑器后台转换,之后就会在lib import那里找到对应的.wasm了。

过去有一个coffeescript,但只是名字和逻辑在,把这个全部替换为assemblyscript,然后在meta里增加一个assemblyscript.js,里面进行.as到.wasm的转换就可以了。
当然这只是单个文件的转换,到要build的时候,怎么把这些wasm结合是个问题,文件会变太多的。
·(从源头的.as文件结合。。。不知道行不行)

。。。不好意思感觉太激动了,我去冷静下。。。

@jare
不好意思,我这边采取了许多不是很正规的方式,达到了把.as (assemblyscript)通过cocos内部黑盒里的文件筛选发配机制,进行了处理。实际上应该时通过消息机制和插件做这些才是正途。所以如果能公布 筛选发配机制的 hook ,并允许我们增加自定义扩展名的文件 ,就可以使用正规途径完成功能了,希望大佬能为cocos的长远打算,言辞过甚请您见谅。

ts都还没有整明白,现在又多了一个as。。。。程序员的世界还真多东西学呀。。。话说这语言和隔壁群laya 的AS又啥区别????

laya的as是ActionScript,cocos这边说的是 AssemblyScript。
ActionScript原本是给Flash用的。AssemblyScript算是TypeScript的一种变种方言,因为类型强制比TypeScript更强,可以像c++,rust一样编译成 wasm(一种可以在浏览器里运行的类汇编语言)。wasm更快,而且是人看不懂的字节码,所以比较安全。wasm是未来的趋势,unity输出的网页端也是wasm。

其实AssemblyScript 用 ActionScript 的标准更好,ActionScript是基于ES4的,你要的强类型它都有,比如int ,char,byte ,当初ES4设计出来的时候被微软谷歌为首的浏览器商打压,认为设计太超前了,改追求ES5了,只有ActionScript继承ES4下来。

谢谢你的回复,不太清楚ActionScript最近的动向。。。

今天碰了许多坑,一个是是wasm.map不能读取的问题,
通过阅读资料,发现了,如果是用 WebAssembly.instantiateStreaming初始化的话,从服务器段送回的Content-Type就一定要是application/wasm,要不就会初始化失败。WebAssembly.instantiateStreaming时,要求 source maps必须时相对途径,其实这个只需要编译wasm时增加一个参数"–sourceMap"就行,后面不用设置。
https://www.assemblyscript.org/debugging.html#source-maps

今天我实验成功的就只有这个。 WebAssembly.instantiate和 Absolute source maps这个组合千万不要用,会累死人的。。。

image
大段的调试也扣可以,文件名.as也没出什么问题

生命在于折腾