2019年12月16日,北京下了今年冬天的第二场雪??,不算大也不算小。年底,几大国际软件和互联网公司(谷歌、微软、苹果和Mozilla)呼吁互联网标准化组织W3C发布了WebAssembly的推荐标准(-R/t2SS)。此举意味着WebAssembly技术已经从隐秘的实验室后台走向前台,开始向大众尤其是开发者推广应用。1.WebAssembly推出背景GuessAssembly字面解释是,“agroupofpeoplegatheredtogetherinoneplaceforacommonpurpose”,一群人为了一个共同的目标聚集在一个地方。简单来说,WebAssembly的目标是让用C/C++/Rust等编程语言编写的程序能够运行在上述各大公司的网络浏览器(GoogleChrome、MicrosoftEdge、AppleSafari和MozillaFirefox)上。JavaScript,目前在网络上流行的编程语言,将迎来要么是帮手,要么是竞争对手的WebAssembly。回到大约10年前,HTML5标准刚推出时,其首要任务是丰富HTML或Web应用,使其能够承载从“内容展示平台”向“应用托管平台”转型的重任(以前-人民网内部研究报告)。在此之前,AdobeFlash一直苦苦挣扎。HTML5贡献了大量新颖的功能,网页告别了第一代只能用于内容展示的有限功能。HTML5带来了浏览器/网页作为“应用程序托管平台”的巨大发展。不想看到“应用商店”的应用怪胎半路出现,把互联网的步伐拉回到PC单机时代。您需要下载并安装要使用的任何软件。这显然有悖于互联互通的发展趋势。.信息孤岛逐渐形成,互联网的持续发展并没有加速信息的流动,反而加剧了信息的不对称和不流通。不仅有商业上的考虑,还有技术上的限制。Web应用存在计算能力弱、用户体验差、安全问题等,目前的处境非常尴尬。应用商店有好几个,一个应用要开发好几次。不同的版本。信息逐渐在各种App之间架起栅栏,这与互联网先行者让信息流动更顺畅的概念相去甚远。等到WeAssembly上线,或许是扭转局面的机会之一。HTML5将网页从“内容展示平台”升级为“应用托管平台”,而WebAssembly可能进一步升级优化“应用托管平台”,从根本上消除Web应用与本地应用的性能差异。从而实现“打开并运行”而不是“打开、下载、安装和运行”,实现“编写一次,无论如何运行”而不是“再次编写,再次运行”。在WebAssembly之前,也有类似的探索,比如asm.js,甚至JavaApplet,希望编译后的程序能够安全高效的运行在浏览器中。现在,之前的努力不算成功。我希望这次可以有所不同,以达到预期的效果。2、WebAssembly直观体验WebAssembly直观体验:从hello.c到hello.html$mkdirhello$cdhello$cat<hello.c#includeintmain(intargc,char**argv){printf("Hello,world!\n");}EOF$emcchello.c-ohello.html可以预见,大量必须用C/C++/Rust编写的程序将被轻松移植以浏览器的形式交付Web应用程序极大地改变了软件开发和交付的方式。三、WebAssembly的发展前景3.1.WebAssembly可能不会取代JavaScript,而只是对其进行补充。找到它JavaScript短板的发展空间,展现它的优势。3.2.客户端软件App将减少为特定平台编写App的需要,Web应用将逐步实现跨平台体验和与本地应用一致的性能。预计将向全世界提供一个版本的Web应用程序。单独编写iOS客户端、Windows客户端或Andorid客户端的开发者可能需要开始学习使用WebAssembly。前景是光明的,预计NativeApp会长期存在,与Web应用共存,逐渐转为在小众领域的具体发展。3.3.C/C++/Rust走向前端C/C++等古老的编程语言将应用范围扩展到前端,从而实现真正意义上的跨平台。用C/C++等编写HTML网页将不再是网上的笑话。这样一来,为解决C/C++无法为网页编写HTML的问题而诞生的解决方案或编程语言就过时了吗?或者意义不大?如果C/C++可以写网页,还需要用ASP.NET/PHP/Perl/Python或者Java来写HTML应用吗?可能有必要,因为已经开发了大量的类库,可能有必要,还有其他更完整的生态考虑。但是可以确认的一点是,WebAssembly的引入让我们重新审视和思考这样的问题。3.4.Web应用程序Web应用程序开发人员需要熟悉新情况。有了新加入的龙剑,就必须好好利用,才能发挥出它的设计效果。在WebAssembly的加持和增强下,JavaScript的性能可能会进一步提升,可供设计的应用软件将进一步扩展,体验可能会更好。由于JavaScript的进步和WebAssembly的引入,Hanjst模板语言和引擎将运行得更快,并提供更好的体验。我们将致力于优化这些新功能。Hanjst.js已经被使用了很多。Hanjst.was/Hanjst.wasm也将开始研发。为了追求更极致的性能和体验,Hanjst可能会用C/C++/Rust编写,然后编译引入浏览器运行。3.5.WebApplicationDevelopmentFrameworkWebFramework如上所述,由于WebAssembly的原生代码可以在服务器端运行,而编译后的.被这个效果改变了。因此,可以预见的是,通用网络应用架构GWA2可能会借此机会升级推出Assembly中的GWA2或C++中的GWA2或C++中的GWA2,或Rust中的GWA2。至于GWA2最终会是哪个新版本的实现版本,可能需要结合WebAssembly推广应用到一定阶段,才能有一定的趋势判断或结论。Hanjst是一种基于JavaScript的模板语言和解析引擎,运行在客户端/服务器端。Hanjst可以表达逻辑控制,可以实现与服务器端模板语言相同的功能。当Hanjst完全在客户端解析时,节省了服务器端的计算资源;Hanjst模板语言是独立的,不绑定任何服务端资源;纯MVC,层间数据以JSON格式传输;全面支持常用的模板语言功能,具有复杂而强大的JavaScript编程能力;无学习成本,直接使用JavaScript编写模板语言;....Hanjst是一种基于JavaScript的模板语言和解析引擎,同时运行在客户端和/或服务器端。Hanjst可以表达逻辑控制并实现相同的功能作为服务器端模板语言。Hanjst在客户端的运行时,减少服务器端的计算渲染;Hanjst是语言无关的,不受后端脚本或语言的约束;与MVC、数据传输完全隔离withJSON;全面支持模板标签,内置逻辑和自定义JavaScript函数;无需学习更多标签语言,只需学习JavaScript;....-R/M2SQ