HVML 是由中国首款开源基础软件 MiniGUI 的作者魏永明设计的描述式编程语言,也是世界首款可编程标记语言。

从 2020 年 5 月开始构思算起,魏永明带领团队历经两年多的时间,于 2022 年 7 月 31 日正式开源发布了 HVML 规范文档以及解释器、渲染器等软件,总代码行数逾百万!

HVML 蕴含了大量新颖的设计和独创的思想,是魏永明及其团队近三十年基础软件开发经验的结晶,一经发布便获得了业界的广泛关注。

本文将向读者介绍 HVML 社区的近期动态。

软件及文档的更新

HVML 解释器 PurC 0.8.2

2022 年 9 月 28 日,HVML 社区发布 PurC 0.8.2,这也是 PurC 1.0.x 的第二个 alpha 版本。若发现任何错误、不兼容性和问题,请向 https://github.com/HVML/PurC/issues 报告。

在这个版本中,主要增加了如下两个功能特性:

首先,增加了重新求值和通道的支持,从而提供了一种非常简洁的协程间通讯机制。我们使用该功能实现了经典的基于协程的素数筛算法,并使用 HVML 提供的协程间共享文档机制,给出了该算法的可视化效果。如下面视频所示:

 

素数筛

 

其次,优化了运行时遇到异常时的执行栈信息,以方便定位程序中的错误。

本版本全部的错误修复、增强、优化和调整罗列如下:

  • 错误修正
    • 迭代元素的内容可能会被求值两次。
    • 带有 &&|| 的 CJSONEE 的求值逻辑不正确。
    • 重构 eJSON 解析器以支持各种字符串模式。
    • 修复 file:// URL 的百分号转义路径错误。
  • 功能增强
    • 提供对通道(channel)的支持,可以作为协程间通信(ICC)机制。
    • 支持 $CRTN 上的 rdrState:connLost 事件。
    • 实现新的 API:purc_coroutine_dump_stack,用于倒出执行栈信息。
    • 支持将元素的标识符用作 init 元素中 at 属性的值。
    • 改进元素 init 以使 as 属性成为可选,因此我们可以使用 init 来初始化数据,但不需要将数据绑定到变量。
    • 实现 request 标签(仅限行者间请求)。
    • 提供对 archetype 元素的 type 属性的支持,可用于指定模板内容的类型,例如 plainhtmlxgmlsvgmathml
    • 支持自定义外部标签名称的前缀。
    • 支持在变量名和属性/方法名中使用 Unihan(统一汉字表意)字符,也就是使用汉字作为变量名。
  • 优化
    • 优化外部元素的内容求值,确保求值后的内容只有一个文本节点。
    • 优化了目标文档的输出格式,使之更清晰及美观。
  • 改进
    • 当目标文档的内容很大时,通过 writeBeginwriteMorewriteEnd 操作向渲染器发送内容。
    • 如果远程数据获取器在加载给定 URL 资源时遇到错误,则引发异常。

HVML 规范 1.0 RC6

我们于 2022 年 9 月 1 日发布了 HVML 规范 1.0 RC6 版本,并进入到 HVML 规范的 1.0 RC7 版本。

在 RC6 版本中,我们围绕 HVML 语言规范主要做了如下调整及增强:

  1. 支持重新求值(evaluating again):HVML 要求解释器提供对表达式的重新求值能力,从而可以在对表达式求值时,可根据需要阻塞当前协程的执行,并在相应的条件到达时唤醒该协程,之后再次对该表达式进行求值,以获得期望的结果。这有助于实现更细粒度的协程调度能力。
  2. 提供对通道(channel,类似 Go 语言)等机制的支持,从而可实现简单高效的协程间通讯机制。
  3. 新增 must-yiled 副词属性,用于确定一个强制的协程调度器调度点。
  4. 使用元组(tuple)定义容量固定的线性容器,以提高性能。
  5. 增强 request 标签,允许向其他行者的主协程发送请求。
  6. 增强 request 标签,允许向其他行者的指定通道发送数据。
  7. 允许在变量名中使用 Unihan 表意字符,也就是使用汉字作为变量名。

在 RC7 版本中,我们增加了 HVML 1.0 的最后一个技术特性(这意味着我们冻结了 HVML 1.0 的技术特性):

  1. 引入替身表达式(substitute expression)
  2. 增强 bind 标签以支持替身表达式
  3. 新增 constantly 副词属性

有关详情,可点击阅读如下链接:

HVML 预定义变量规范 1.0 RC5

我们于 2022 年 9 月 1 日发布了 HVML 预定义变量 1.0 RC5 版本。

在这个版本中,我们围绕 HVML 预定义变量主要做了如下调整及增强:

  1. 使用“行者”替换“会话”。
  2. $SESSION 更名为 $RUNNER$HVML 更名为 $CRTN$SYSTEM 更名为 $SYS$REQUEST 更名为 $REQ
  3. 新增 $CRTN.cid$CRTN.token 以及 $CRTN.uri 属性获取器。
  4. 新增 $CRTN.curator$CRTN.native_crtn 属性获取器。
  5. 新增 $RUNNER.rid$RUNNER.uri 属性获取器。
  6. 增强 $MATH.eval$MATH.eval_l,使之支持常量及函数。
  7. 新增 $EJSON.arith$EJSON.bitwise 方法。
  8. 新增 $EJSON.size 方法。
  9. 新增 $STR.nr_bytes 方法。

有关详情,可点击阅读如下链接:

社区活动

  1. 2022 年 9 月 9 日,魏永明为中央网信办信息安全处的领导们介绍了 HVML 编程语言
  2. 2022 年 9 月 14 日,魏永明为中科院软件所的专家和老师们介绍了 HVML 编程语言
  3. 2022 年 9 月 22 日,魏永明为清华大学及北京工商大学操作系统训练课的同学和老师介绍了 HVML 编程语言
  4. 2022 年 9 月 27 日,魏永明为麒麟软件的专家们介绍了 HVML 编程语言

下面是魏永明为清华大学及北京工商大学操作系统训练课的老师和同学们介绍 HVML 的实录视频。

社区小伙伴们围绕如下方面做出了贡献:

  1. 针对不同 Linux 发行版的 PurC、PurC Fetcher、DOM Ruler、xGUI Pro 等软件包的构建脚本,由 @taotieren、@Zeno-sole、@yetist 等提交拉取请求(PR)。
  2. 添加针对龙芯架构的支持。由 @jtcheng 提交拉取请求。
  3. 修复示例程序错误。由 @YangGangByosoft 提交拉取请求。
  4. 修复文档中的拼写等错误。由 @deleonroselle21、@mofelee 等提交拉取请求。

与 Deepin 社区友好合作:

  • Deepin 20.7 目前已完成对 hvml-purc 0.8.1、hvml-dom-ruler、hvml-xgui-pro 的支持工作。

下一步计划

2022 年 10 月底,我们将发布 PurC 0.9.0 版本,预期功能包括:

  1. 增强 init 元素,使之支持定义行者级变量。
  2. 增强 bind 元素,使之支持 HVML 规范定义的替身表达式功能。
  3. 增强所有可从外部获取数据的元素,使之支持相关的属性。
  4. 增强异步数据源装载过程中的事件,使之可报告数据的获取进度。
  5. 一个简单的内置字符渲染器,可展示文档中的文本内容并动态更新文档的内容。

2022 年 11 月底,我们将发布 PurC 0.9.2 版本,预期功能包括:

  1. 在复合表达式中支持行注释。
  2. 支持元组。
  3. 完善 update 元素的功能。
  4. 完善 request 元素的功能。
  5. 支持 CSS 3 选择器规范,完善预定义 $DOC 变量各属性获取器及设置器。
  6. 增强文档定位功能。
  7. 将来自外部数据源的 text/html 类型装载为原生实体对象,以方便对网页内容的处理和操作。
  8. 全功能的内置字符渲染器,支持多窗口、构件及交互。

2022 年 12 月底,我们将发布 PurC 0.9.4 版本,预期功能包括:

  1. 内存使用。
  2. 性能优化。

2023 年 2 月底,我们将发布 PurC 0.9.9 版本,预期功能包括:

  1. 预定义变量规范中定义的,但尚未完成的动态对象属性及方法。
  2. Windows 平台支持。

预计我们将于 2023 年 3 月底发布 PurC 1.0.0 版本,届时会支持 Linux、macOS 和 Windows 三大平台。

常见问题及解答

Q:HVML 是针对嵌入式和物联网使用的吗?

A:不仅仅是。HVML 是一种通用的胶水语言,HVML 的目标平台包括传统的桌面、服务器、智能手机、平板、嵌入式设备和物联网设备。

Q:HVML 是打算取代现有的 Web 前端开发技术,比如 JavaScript 吗?

A:没有这个计划。HVML 的渲染器会用到 Web 前端技术,但 HVML 的目的并不是取代现有的 Web 前端开发技术,而是为跨平台 GUI 应用的开发提供另外一种技术框架,同时作为合璧操作系统(HybridOS)的首选编程语言。

Q:在哪里可以看到 HVML 相关的源代码?

A:HVML 相关文档及代码仓库在 https://github.com/HVML 上开源发布,其中包括:

  1. HVML 解释器(PurC):https://github.com/HVML/PurC
  2. HVML 外部数据获取器(PurC Fetcher):https://github.com/HVML/PurC-Fetcher
  3. HVML 字符渲染器(PurC Midnight Commander):https://github.com/HVML/PurC-Midnight-Commander
  4. HVML 图形渲染器(xGUI Pro):https://github.com/HVML/xGUI-Pro
  5. DOM 布局库(DOM Ruler):https://github.com/HVML/DOM-Ruler
  6. 扩展 WebKit 引擎(仅源代码包)

Q:有可以直接下载安装的软件包吗?

A:因开发团队精力有限,目前尚没有制作针对各个操作系统的安装包,但来自开源社区的小伙伴们已经积极行动,帮助我们完成了一些 Linux 发行版的安装包。我们将这些软件包收集到了如下页面,可访问查看:

https://hvml.fmsoft.cn/software

Q:如何赞助 HVML 相关的项目?

A:个人打赏性质的赞助,您可以点击文后的原文链接。大额的赞助,可通过“联系我们”留下联系方式,或者致信 hvml@fmsoft.cn,我们会及时联系您。

原文链接

https://store.fmsoft.cn/campaign/denoteoss-lt