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

1,在https://www.assemblyscript.org/ 官方的演示里,是在console进行命令输出的,开发开发时效率不佳。我记得cocoscreator这边好像是有typescript的更新后,就在内部调用·typescript的transpileMode进行把ts文件转为js文件的。但assemblyscript.和typescript公用一个后缀「.ts」,那么是不是要有一个assemblyscript专属的的扩展名比较好呢?个人觉得 WebAssembly的官方短缩名是「.wasm」,那么assemblyscript的短缩名弄成「.asmts」也可以哦。
2,从CocosCreator增加.asmts文件后,然后这个文件里就这能写assemblyscript.编译时利用另外的编译模块进行后台编译,然后把结果输出到cocos的Editor.console。
3、如果一定要用typescript当作WebAssembly进行编译的话,建议在typescript的头部加上
// used as assemblyscript
这个月的注释,然后在typescript的transpileMode的转换处理进行之前,检测这个注释,然后放行给assemblyscript编译器编译

我个人建议加类型的方法2,这样就不容易产生混乱。
不好意思提了一大堆不着边的意见,希望cocos能更好的发展!!!

5赞

给assemblyscript官方提了一个issues
https://github.com/AssemblyScript/assemblyscript/issues/1750
,如果我失败了的话,如果还有继续想让官方增加这个的话,请大家也提一提。


https://github.com/AssemblyScript/assemblyscript/issues/1003
看来国外解决速度还是挺快的,有类似方案,我说的那个接下来这个设定就可以了
{
“files.associations”: {
“*.asmts”: “typescript”
}
}

That’s not necessarily enough, unfortunately. More information on the matter is available at the issue I linked, but the short version is that there is a compiler option to switch out the file extension considered by asc , but that mileage may very when the goal is also to import external packages, say via a package manager, since these may use different file extension, or other subtleties, as the implementation is not far enough along yet to account for this.

最后这位好心人给我发的。。不太懂原委,不是到到底时哪里有什么问题。。。

cocoscreatorのts→js就是通过程序transpileMode进行的,
似乎assemblyscript也提供了这种,(竟然有两个),看来似乎问题不大
https://www.assemblyscript.org/compiler.html#api-2

似乎comunity内部有定为「.as」的方向性,赞成的人好像很多。。。(flash的老簇拥者也会高兴吧。。。)
https://bleepcoder.com/cn/assemblyscript/536743932/consider-a-file-extension-other-than-ts

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


assemblyscript官方的说明看来很容易嵌入到cocoscreator里

现在的其它typescript开发环境都比不上cocoscreator的,其它的一般都时需要程序员开着监视进程,cocoscreator这边完全不用操心,就直接交给cocoscreator后台进程了。所以期待assemblyscript也一样!

在TypeScript底下增加个·AssemblyScript 希望以后能等到这个版本的出现

@jare
不好意思,我想问问,如果我自己想实验这个的话,需要哪些编辑器开放的接口呢?
我看了看build-finished,compile-finished,before-change-files似乎都时机不对

https://docs.cocos.com/creator/manual/en/extension/api/editor-framework/main/builder.html

小伙子,ts是js的超集,而as是ts的子集,包括类似Union Types,Any Types,Closures等诸多TS/JS具备的能力,目前as都支持或者不太支持。https://www.assemblyscript.org/status.html#language-features
就vue-next都被社区称之为anyscript。而在cocos creator3d的源码中使用任意类型的代码并不在少数,cocos团队并不寄希望与可以利用assemblyscript来编译他们的cocos creator3d源码到webassembly。这本身是一条艰巨漫长的路。https://www.assemblyscript.org/frequently-asked-questions.html#will-assemblyscript-support-all-of-typescript-eventually 而事实上,即便编译成了webassembly,也不见得会比js带给用户肉眼可见的收益。https://www.assemblyscript.org/frequently-asked-questions.html#is-assemblyscript-faster-than-javascript 取决于诸多因素 https://hacks.mozilla.org/2018/10/calls-between-javascript-and-webassembly-are-finally-fast-🎉/ cocos团队只能依赖他们自己的技术实力,走一条类似unity3d从li2cpp到burst的路 也许利用antlr作为前端llvm作为后端,更有希望和实际意义

2赞

路很远,咱们可以慢慢走啊。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多了。