您的位置 首页 > 德语词汇

script language是什么意思、读音 AssemblyScript:专为 WebAssembly 而生的语言!

大家好,script language是什么意思、读音相信很多的网友都不是很明白,包括AssemblyScript:专为 WebAssembly 而生的语言!也是一样,不过没有关系,接下来就来为大家分享关于script language是什么意思、读音和AssemblyScript:专为 WebAssembly 而生的语言!的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

script language是什么意思、读音 AssemblyScript:专为 WebAssembly 而生的语言!

大家好,很高兴又见面了,我是"高级前端?进阶?",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!

本文主要和大家介绍AssemblyScript,即一个专为WebAssembly而生的下一个计算机语言。在年初,我也确实使用WebAssembly将客户端应用成功移植到了Web,这也是为什么我一直对WebAssembly充满好奇的原因。我甚至在头条上开了一个合集《WebAssembly前沿技术》来专门探讨WebAssembly,并将持续关注WebAssembly的最新动态。

正如大家所看到的,当我们还在迟疑是否要在日常开发中引入WebAssembly的时候,很多优秀的应用、工具已经开始吃WebAssembly的红利了,而且取得了不错的成就,这可能也是为什么各个浏览器厂商、开发者如此热衷WebAssembly的原因吧。

这篇文章的灵感来自于我的另一篇文章《2023年这些编程语言已经支持WebAssembly!》,在文中第一次提到了AssemblyScript,因此特书此文来给大家深入介绍下AssemblyScript。话不多说,直接开始!

AssemblyScript使用Binaryen将TypeScript的变体(基本上是带有类型的JavaScript)编译为WebAssembly。

由于AssemblyScript的编译特性,在某些情况下它的性能优于JavaScript。AssemblyScript生成精简且平均的WebAssembly模块,开发者只需要npminstall即可。

~npmiassemblyscript--save-dev\n//安装加载器和编译器\n~npxasinit.\n~npmi\n//实例化一个带有add功能的模板项目\nnpmrunasbuild\n//代码编译为WebAssembly

AssemblyScript具有以下明显特征:

AssemblyScript是根据Apache许可发布的免费开源软件,版本2.0建立在Binaryen之上,并基于WebAssembly规范。

AssemblyScript项目创建于6年前,目前在Github上15.3k的star、630+的fork、19.6+K的项目依赖它、代码贡献者超过60+。从前端发展趋势来讲,是一个值得长期关注的项目。

AssemblyScript与TypeScript非常相似,语法和语义在很大程度上是兼容的。因此,TypeScript中的许多概念也适用于AssemblyScript,但并非所有TypeScript功能都能很好地映射到提前编译或WebAssembly目前支持的功能集。

一些功能可能被省略或者未实现,并且需要添加一些额外的概念。从技术上讲,使AssemblyScript部分成为子集,部分成为超集一种变体。因此,现有的TypeScript代码不太可能被AssemblyScript编译器编译,但很严格的代码可能移植起来并不费力。

TypeScript有类型,类型系统能够描述JavaScript的许多动态特性。毕竟,TypeScript是JavaScript之上的超集/类型检查器。

相反,AssemblyScript是提前静态编译的,这使得支持非常动态的JavaScript特性不进入解释器领域变得不可行,分别需要更严格的类型检查以保证运行时的正确性,而TypeScript不会。

比如,在AssemblyScript中也没有undefined或者any:

//\nfunctionfoo(a?){\nvarb=a+1;\nreturnb;\n}\n//\nfunctionfoo(a:i32=0):i32{\nvarb=a+1;\nreturnb;\n}

目前AssemblyScript还没有联合类型,但可以使用泛型实现类似的效果:

//\nfunctionfoo(a:i32|string):void{}\n//\nfunctionfoo<T>(a:T):void{}

对象必须有类型,例如:使用Map或Class:

//\nvara={}\na.prop="helloworld"\n//\nvara=newMap<string,string>()\na.set("prop","helloworld")\n//\nclassA{\nconstructor(publicprop:string){}\n}\nvara=newA("helloworld")2.3沙盒执行

WebAssembly的独特功能之一是模块无法在不显式导入外部资源的情况下访问外部资源,默认情况下提供强大的安全保证。因此,要使用WebAssembly,就必须将模块连接到宿主环境,例如JavaScript和DOM。

在AssemblyScript中,可以使用环境上下文(AmbientContext)导入宿主功能,即使用声明语句:

//assembly/env.ts\nexportdeclarefunctionlogInteger(i:i32):void

//assembly/index.ts\nimport{logInteger}from'./env';\nlogInteger(42);

AssemblyScript文件中的环境声明将产生WebAssembly模块导入,使用文件的内部路径,不带文件扩展名,作为模块名称(此处:assembly/env),以及声明元素的名称作为模块元素。在上面的示例中,可以通过在实例化时提供以下导入对象来完成导入:

WebAssembly.instantiateStreaming(fetch(...),{\n"assembly/env":{\nlogInteger(i){console.log("logInteger:"+i)}\n}\n})

如有必要,还可以使用@external装饰器并相应地修改导入对象来覆盖相应的外部模块和元素名称:

//assembly/index.ts\n@external("log","integer")\ndeclarefunctionlogInteger(i:i32):void//{"log":{"integer"(i){...}}}\n\nlogInteger(42)2.3.2模块导出

类似地,从入口文件导出将产生WebAssembly模块导出:

//assembly/index.ts\nexportfunctionadd(a:i32,b:i32):i32{\nreturna+b;\n}

然后可以从主机环境调用模块导出:

const{instance:{exports}}=awaitWebAssembly.instantiateStreaming(...)\nconsole.log(exports.add(1,2))2.4tree-shaking

AssemblyScript不会线性编译模块,而是从模块的导出开始,只编译有用内容,通常称为tree-shaking(opensnewwindow)。因此,死代码虽然能在语法上得到验证,但不一定检查语义正确性。

虽然这种机制有助于减少编译时间,并对那些熟悉执行JavaScript的人来说几乎是自然而然的,但对于那些具有传统编译器背景的人来说,一开始可能会觉得有点奇怪,例如:因为发出的诊断不是线性发生的,而且对于那些有TypeScript背景的人来说,即使类型注释作为死代码的一部分仍然未经检查。

该规则的例外是顶级代码,包括顶级变量声明及其初始化程序,必须在相应文件首次执行时立即对其进行执行。

AssemblyScript不能替代当前的JavaScript或TypeScript应用程序,比如:ts-node应用程序或者依赖于浏览器中全局变量的JavaScript(比如window)程序,AssemblyScript编译器无法直接使用这些程序来使开发者获取WebAssembly的红利。

AssemblyScript提供的是一个很好的垫脚石,学习曲线非常小,可以将现有的JavaScript或TypeScript代码及其JavaScript或TypeScript依赖项移植到WebAssembly。因为新AssemblyScript应用程序和移植的依赖项(如果不存在替代依赖项),可以通过AssemblyScript编译器编译为WebAssembly。

如果应用程序或库不依赖于任何平台全局变量(比如:JavaScript或TypeScript是同构的),那么移植可能只需要添加、或更改几种类型代码。如果项目或其依赖项使用特定于平台的全局变量,那么可能会比较棘手,因为需要重新实现这些全局变量或通过主机运行时导入它们。

诚然,如果是从头开始,AssemblyScript是一种很好的WebAssembly入门语言。如果有JavaScript或TypeScript背景的团队可能就非常适合,学习成本低而且非常易于使用。例如:AssemblyScript为构成WebAssembly的概念提供底层访问和API帮助程序。因此,当应用程序作为WebAssembly模块执行时,了解代码是如何执行的以及数据是如何在应用程序之间传递的就很容易。

总之,AssemblyScript是一种令人兴奋的新语言,期待看到它的社区发展不断壮大。

本文主要和大家介绍AssemblyScript,即专为WebAssembly而生的下一个计算机语言。因为篇幅有限,文章并没有过多展开,如果有兴趣,可以在我的主页继续阅读,同时文末的参考资料提供了大量优秀文档以供学习。最后,欢迎大家点赞、评论、转发、收藏!

后续我也会持续关注将JavaScript或TypeScript应用程序移植到AssemblyScript的可行性以及相关技术前沿,毕竟AssemblyScript是专为WebAssembly而生,而WebAssembly才是未来。

https://www.assemblyscript.org/

https://www.assemblyscript.org/concepts.html

https://dev.to/assemblyscript/what-is-assemblyscript-3gfl

https://www.fastly.com/blog/meet-assemblyscript-your-next-computing-language

https://www.sitepen.com/blog/getting-started-with-assemblyscript

文章分享结束,script language是什么意思、读音和AssemblyScript:专为 WebAssembly 而生的语言!的答案你都知道了吗?欢迎再次光临本站哦!

本站涵盖的内容、图片、视频等数据,部分未能与原作者取得联系。若涉及版权问题,请及时通知我们并提供相关证明材料,我们将及时予以删除!谢谢大家的理解与支持!

Copyright © 2023