WebAssembly前瞻及用C/C++写HTML和Hanjst汉吉斯特

2019年12月16日,北京下了今冬第二场雪❄️,不大不小。

年终岁尾,国际上几大软件及互联网公司(Google、Microsoft、Apple和Mozilla)拉上互联网标准化机构W3C发布了 Web Assembly的推荐标准( -R/t2SS )。此举意味着,WebAssembly技术从遮遮掩掩的实验室后台走向前台,开始面向大众,尤其是开发者进行推广应用。

1. Web Assembly推出背景猜测
Assembly 字面上的解释是, “a group of people gathered together in one place for a common purpose”,一群人为一个共同的目标聚集到一个地方。Web Assembly的目标简略地说,就是将 C/C++/Rust 这些编程语言写的程序能够运行在上面那几大公司到网页浏览器中(Google Chrome,Microsoft Edge,Apple Safari 和 Mozilla Firefox)。目前在网页上流行的编程语言 JavaScript 将迎来或是帮手,抑或是对手的Web Assembly。

时光倒回到约10年前, HTML5 标准刚推出来时,其首要的任务是丰富 HTML 或者说 网页应用,使之能够承载其由“内容展示平台”向“应用承载平台”转变的重任(此前 -人民网 内部研究报告)。在这之前,一直是 Adoble Flash努力地奋斗着。 HTML5 贡献了一大批新颖的功能,网页告别第一代只能做内容展示的功能受限版。

HTML5 带来了浏览器/网页作为“应用承载平台”的大发展。不想中途出现了“应用商店”App的怪胎,一下子将互联网前进的步伐打回到PC单机时代,要用个什么软件都需要下载、安装,这明显与互联互通都发展趋势是相背离的。信息孤岛逐渐形成,互联网的继续发展不是加速信息的流动,相反是加剧了信息的不对称,不流通。

这既有商业层面的利益考虑,也有技术层面的制肘,网页应用计算力弱,体验不好,安全有问题等等,一时局面甚是尴尬,有几个应用商店,一个应用就需要开发几个不同的版本。信息在各个APp之间逐渐扎起篱笆,这些与互联网先驱们的让信息更加流畅地流动的理念渐行渐远。

直到 WeAssembly的推出,或许是扭转时局的契机之一。HTML5将网页由“内容展示平台”升级到“应用承载平台”,WebAssembly或将进一步升级优化”应用承载平台”,从根本上消除网页应用与本地应用之间到性能差异。从而实现“Open and Run”, 而不是 “Open 、Download、Install and Run”,实现“Write once, run anyway”, 而不是“Write once more,run once more”。

在 WebAssembly之前,也有类似的探索, 如 asm.js , 甚至上 Java的 Applet 都是希望将编译后的程序能够在浏览器中安全高效地运行,现在看之前的努力并不算成功,希望这次能有所不同而获得预期效果。

2. WebAssembly的直觉体验

对 WebAssembly 的直觉体验:由 hello.c 到 hello.html

$ mkdir hello
$ cd hello

$ cat << EOF > hello.c
#include <stdio.h>
int main(int argc, char ** argv) {
  printf("Hello, world!\n");
}
EOF

$ emcc hello.c -o hello.html

可以预见,大量必需由 C/C++/Rust 写的程序将有可能轻松移植到浏览器以网页应用的形式交付,极大地改变了软件研发及交付的方式方法。

3. Web Assembly的发展前瞻

3.1. WebAssembly 可能不会取代 JavaScript
而只是对其的互补,在 JavaScript 短板之处寻找其发展空间,展现其优势。

3.2. 客户端软件App
单独为特定平台写App的需求将降低,网页应用将逐渐实现跨平台,并与本地应用相一致的体验和性能。有望实现网页应用一版通天下。单独写iOS客户端,Windows客户端,或者Andorid客户端的开发人员,可能需要着手学习使用 WebAssembly。

前景是美好的,预计Native App还将存在相当长时间,并存与网页应用,并逐渐转为小众领域的特定开发。

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. 网页应用
网页应用开发人员需要熟悉新情况,有了新增的屠龙刀,也要善加利用才能将其设计功效发挥出来。

JavaScript 有了 Web Assembly的加持和增强,其性能或有进一步的提升,可供用来设计的应用软件将进一步的扩增,体验或将更好。

得益于 JavaScript进步,也得益于Web Assembly的推出,依赖于其上 Hanjst 汉吉斯特模版语言及引擎将运行更快,体验更好。我们将着手针对这些新特性进行优化。

Hanjst.js 已经投入不少使用。

Hanjst.was / Hanjst.wasm 也将开始研发,为追求更极致的性能和体验,Hanjst 或将以 C/C++/Rust 编写,然后经编译后,引入到浏览器中进行运行。

3.5. 网络应用开发框架 Web Framework

如前所述,既然Web Assembly的原生代码可以工作在服务器端,而编译后的.wasm 可以运行在客户端浏览器中,那么开发网络应用的方式方法势必要受此影响而有所改变。

因此,可以预见,通用网络应用架构GWA2,或将以此为契机进行改造升级,推出 GWA2 in Assembly 或者 GWA2 in C / GWA2 in C++, 又或者是 GWA2 in Rust.

至于最终实现的是 GWA2 的哪个新版本,可能要结合 Web Assembly推广应用普及到一定阶段之后才能有某种趋势判断或定论。


Hanjst是一种基于JavaScript的模板语言及解析引擎,她运行在客户端/服务器端。

Hanjst能够表述逻辑控制,能够实现与服务器端模版语言相同的功能。

Hanjst当完全在客户端解析时,节省服务器端计算资源;

Hanjst模板语言独立,不与服务器端资源做任何绑定;

纯粹的MVC,层间数据用JSON格式传递;

常见模板语言功能全支持,附带复杂而强大的JavaScript编程能力;

无学习成本,直接使用JavaScript书写模板语言;

….

Hanjst is a JavaScript-based templating language and parsing engine that runs on both the client-side and/or server-side.

Hanjst can express logical control and achieve the same functionality as the server-side templating languages.

Hanjst’s Run-time in client-side, reduce computing render in server-side;

Hanjst is Language-independent, not-bound with back-end scripts or languages;

Totally-isolated between MVC, data transfer with JSON;

Full-support template tags with built-in logic and customized JavaScript functions;

No more tags languages to be learned, just JavaScript;

….

-R/M2SQ

Image placeholder
biaoge
未设置
  80人点赞

没有讨论,发表一下自己的看法吧

推荐文章
jsp和html之间有什么区别?

HTML(HypertextMarkupLanguage)文本标记语言,它是静态页面,和JavaScript一样解释性语言,为什么说是解释性语言呢?因为,只要你有一个浏览器那么它就可以正常显示出来,而

html和jsp的区别及优缺点

html和jsp的区别:●最简单的区别就是,HTML能直接打开,jsp只能发布到Tomact等服务器上才能打开●定义上HTML页面是静态页面可以直接运行,JSP页面是动态页它运行时需要转换成servl

html和css难学吗?

什么是HTML?html是HyperTextMark-upLanguage的缩写,即超文本标记语言;html是网页的结构(Structure)。html是用来定义文档内容结构的,包含了用户需要浏览的内

html和css不换行代码是什么?

html和css不换行代码是什么?一、HTML不换行代码:在网页排版布局中比如文章列表标题排版,无论多少文字均不希望换行显示,需要强制在一行显示完内容。这就可以nobr标签来实现。语法:内容不换行内容

使用html-webpack-plugin对HTML文件进行预处理

一、前言先整理一波之前和webpack相关的文章: 使用Webpack对CSS文件进行后处理 基于Webpack的CSSSprites实现方案 Stylus系列——webpack-spritesmit

Java Web html无法引用css?

JavaWebhtml无法引用css?javaweb中html无法引用css是因为css文件放置的位置不正确,css文件应该放在与WEB-INF同级目录,而不是WEB-INF文件夹内。(相关课程推荐:

innerHTML与jquery里的html()区别?

innerHTML与jquery里的html()区别?●html()可以设置tbody、tr这些只读标签,而innerHTML在低版本IE下不行;jQuery的html()做了些容错处理,原生的Dom

html怎么用css

html怎么用cssCSS样式只有应用到HTML元素中,样式才会产生效果。有三种方式可以把CSS样式应用到HTML元素。一、利用HTML元素的style属性,样式表作为style属性的值,该方式也称为

怎么在html页面写js css代码

怎么在html页面写jscss代码一、在html中写css代码的方法:1、首先我们看CSS的内联写法,顾名思义就是写在HTML标签内的,如下所示,将css代码写到元素的style属性上。 D

如何在JavaWeb中用css

如何在JavaWeb中用css一、css概念:CascadingStyleSheets层叠样式表层叠:多个样式可以作用在同一个html的元素上,同时生效二.、好处:1.功能强大2.将内容展示和样式控制

Ambassador 0.52 新特性:会话亲和性、负载均衡控制、gRPC-Web

本文由公众号EAWorld翻译发表,转载需注明出处。作者:RichardLi 译者:白小白 原文:http://t.cn/E6cZoyG现时的云原生应用由多种异构的服务或者微服务组成,服务间、服务与客

怎么在html中加入css样式

html添加css样式有三种方法,分别为行内式(使用style属性,在特定的HTML标签内使用)、内嵌式(style标签把css代码放在特定页面的head部分中)、外联式(使用link标签,将外部cs

html怎么加载css?

有四种加载方式:行内式通过html的style属性实现,如下所示//写在body标签中 行内式嵌入式在style标签中写css样式,在body中引用//写在style标签中的css样式 p{ colo

iis部署html css无法显示怎么解决

iis部署htmlcss无法显示怎么解决如果你的网站在VS或其他软件中运行时具有CSS和JS功能,但到了IIS中就消失了,导致网站变成纯文字界面。你需要进行如下尝试。1、首先确认是否打开IIS中的“动

html找不到css文件怎么解决

html找不到css文件怎么解决如果你在引用css文件时,使用了错误的文件路径,就会导致引用失效。解决方法就是填写正确的css文件路径。下面我们学习下HTML填写路径的两种方法。(推荐学习:HTML视

html如何导入css

html如何导入css1、使用链接式(推荐学习:HTML视频教程)2、使用导入式 @import"style.css" 扩展资料:二者的区别导入式和链接式的目的都是将一个独立的css文件引入一个文件中

css如何去掉html元素

css如何去掉html元素css无法将html元素完全的从页面中去除,但是可以通过一些方法让它们在视觉上隐藏掉。具体的做法是设置元素css属性display:none和visibility:hidde

css怎么写在html中?

css怎么写在html中?css样式写法可以分为:●内嵌式●内部样式表●外部样式表HTML中直接写css只能使用内嵌式和内部样式表。(相关课程推荐:css视频教程)一、内嵌式将css代码写在HTML元

html5 css3是什么?

html5和css3是什么?HTML5和CSS3是HTML和CSS的最新版本。HTML为构成网页的主要语言。通过这种语言,我们可以向计算机说明网页格式、内容、显示效果等等。CSS则是专门用来控制网页显

react-native中IOS的webview和js层通信 - UIWebview

前言在9012的最后一篇写到了在rn中安卓的webview的通信原理,而作为0202年的第一篇,继续讨论上年rn中webview通信剩下的部分。背景:对于webview,了解过的人都知道在ios端会存

Pandas数据处理三板斧——map、apply、applymap详解

微信公众号:「Python读财」如有问题或建议,请公众号留言在日常的数据处理中,经常会对一个DataFrame进行逐行、逐列和逐元素的操作,对应这些操作,Pandas中的map、apply和apply

css什么时候用class和id?

css什么时候用class和id?当css样式用于不止一个元素时,使用class来定义。当css样式只应用于一个元素时,使用id来定义。例如导航条,每个页面中,只存在一个顶部导航条的话,可以使用id来

使用Certbot开启HTTPS访问(最新)

知乎地址友情链接 v-easy-components-基于Vue2.x的组件命令库 逸宿-一款预定民宿的webapp(毕设) 在线网易云API-基于NeteaseCloudMusicApi在线A

HTML中16个全局属性介绍

HTML原有属性accesskey作用:浏览器用来创建激活或聚焦元素的快捷键值:一个键盘字符如O范围:支持该属性的元素有、、、、、、注意:使用该属性可能在新窗口打开链接时可能会被浏览器屏蔽 百度 阿里

HTML文字怎么插入下划线?

在HTML中想要给文字加下划线可以使用标签来实现。下划线标签的语法:我被加下划线了来看个完整代码的用法实例: 这里是HTML中文网! HTML中文网网址:www.html.