2020 年 5 月,笔者有了设计一款与众不同编程语言的想法,后于 2020 年 7 月提出了 HVML 编程语言并公开了第一份规范草案。一年后,即 2021 年 7 月,我们成立了一个攻坚团队并正式开始了 HVML 解释器(PurC)的开发。2021 年 12 月 27 日,第一个 HVML 程序成功运行,标志着 HVML 的正式诞生。约八十日后,在 2022 年 3 月 11 日,HVML 解释器完成和渲染器的对接。又八十日后,HVML 图形渲染器 xGUI Pro 完成。至此,我们可以直观看到 HVML 程序的运行效果并通过图形用户界面和 HVML 程序交互了。

从 2021 年 8 月起,我们通过”考鼎录“公众号发表 HVML 的开发月报,向关注 HVML 的各位朋友汇报相关研发进展。本文是 HVML 开发月报的第十二期。

在笔者发表于 2018 年的《三谈操作系统》一文中提到,一个操作系统区别于其他操作系统最为重要的技术特征就是围绕某个特定编程语言形成的应用框架和编程接口。我将这个技术特征比喻为操作系统的基因。要设计一个全新的操作系统,就必须在某个编程语言基础上设计一套完备的、可扩展的、易用的应用编程接口,而 HVML 就是笔者为正在开发中的下一代操作系统——合璧操作系统——设计的全新编程语言。

本文是 HVML 开发月报的第十二期,主要包括如下内容:

  • 发布扩展 WebKit 引擎源代码包
  • HVML 规范 1.0 RC5 发布
  • HVML 预定义变量规范 1.0 RC4 发布
  • 2022 年 6 月完成的工作内容
  • 下一步计划
  • HVML 社区
  • 常见问题及解答

第一次听说 HVML 的朋友,可以访问 HVML 专题页面 以了解其背景。

本文是 HVML 开发月报的第十二期。接下来,在 HVML 正式发布后,相关开发工作将进入开源协作的新阶段,本 HVML 开发月报将被其他形式取代。也就是说,本文是 HVML 开发月报第一阶段的最后一期。

发布扩展 WebKit 引擎源代码包

2022 年 7 月 1 日,作为 HVML 发布计划的一部分,我们公开了扩展 WebKit 引擎的源代码包:

https://files.fmsoft.cn/hiwebkit/dev/hiwebkitgtk-2.34.1.tar.xz

该定制版本在 WebKitGTK 2.34.1 版本基础上,增加了对 hvml-handle 和 hvml-events 两个新增属性的支持。提供如下新增的 DOM 接口:

  1. Element.hvmlHandle:这是一个只读的 DOM 元素属性,反映的是元素的 HVML 句柄值。一个元素的 HVML 句柄值是该元素的 hvml-handle 这个标签属性值对应的 64 位无符号整数值,0 表示非法值。当 hvml-handle 的标签属性值无法转换为十六进制的无符号整数时,或者转换后的值是 0xFFFFFFFFFFFFFFFF 或者 0xFFFFFFFFFFFFFFFE 时,元素的 HVML 句柄值取 0,等同于未设置。
  2. Element.hvmlHandleText:这是一个只读的 DOM 元素属性,反映的是元素的 HVML 句柄的文本形式。当元素的 HVML 句柄非法时,该属性值为空字符串。
  3. Element.hvmlEvents: 这是一个 DOM 属性,反映的是 hvml-events 这个标签属性的值,字符串,不指定时为空字符串。该属性的值可包含多个空格分隔的事件名称。
  4. Element.hvmlEventList:这是一个只读的 DOM 属性,反映的是 hvml-events 这个标签属性的值按空格分隔之后的词元列表。
  5. Document.getElementByHVMLHandle(): 这是 Document 对象的一个新增方法,类似 getElementById 方法,可根据 hvml-handle 属性值获得对应的元素。

有兴趣在国产芯片上运行 HVML 以及 xGUI Pro 的,可以先将这个版本的 WebKit 引擎移植到目标平台上。

HVML 规范 1.0 RC5 发布

按计划,我们于 2022 年 7 月 1 日发布了 HVML 规范 1.0 RC5 版本。

2022 年 6 月份,我们围绕 HVML 语言规范主要做了如下调整及增强:

  1. 调整对 include 标签的描述,补充针对就地执行的描述。
  2. 调整 request 标签
    • 调整了使用 request 标签向其他协程发送请求的处理模型。
    • 在 to 属性值中,可使用 get: 和 set: 前缀用来获取或者设置元素的动态属性值。
    • 向渲染器发送请求时,使用预定义变量 $RDR
  3. 调整 load 和 call 标签
    • load 支持在指定的行者中创建新的协程来执行指定的 HVML 程序。
    • load 和 call 标签统一使用 within 属性指定新的行者名称。
    • load 标签中,使用新增的 onto 属性指定渲染器页面信息。
    • $HVML 预定义变量上的 idle 以及渲染器事件。
    • load 和 call 异步执行时,返回值为代表新协程的原生实体,该原生实体应提供 id 属性,用于返回新协程的标识符。
  4. 新增 HVML URI 图式及协程描述符
  5. 增强 sort 标签,可使用内建执行器将 on 属性指定的数据转换为数组。
  6. 调整 observe 标签,使用 against 介词属性定义针对变量的观察,而不是 at 属性。

HVML 预定义变量规范 1.0 RC4 发布

按计划,我们于 2022 年 7 月 1 日发布了 HVML 预定义变量 1.0 RC4 版本。

2022 年 5 月份,我们围绕 HVML 预定义变量主要做了如下调整及增强:

  1. 描述了如何通过 pipe URI 的查询组件传递命令行参数。
  2. 描述了 pipe 流实体的额外方法:writeeof 和 status
  3. $SESSION 的 user_obj 静态属性名称调整为 myObj

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

2022 年 6 月完成的工作内容

在研发团队的努力下,2022 年 6 月,我们按照预期完成了如下研发目标,包括:

  1. xGUI Pro V0.8 的开发:
    • 实现了对页面组的支持,可在窗口中使用构件(widget)展示页面内容。
    • 实现了对窗口和构件的布局支持;开发者可使用 HTML 和 CSS 来描述窗口或构件的布局。
  2. HVML 解释器:
    • 补充大量测试用例,并通过测试用例完善已有实现,修复缺陷。
  3. 缺陷修正:
    • 管理渲染器页面分组和布局信息的基础函数库 DOM Ruler

下一步计划

2022 年 07 月,我们将择吉日正式发布 HVML。开发团队正在做最后的准备工作,包括:

  1. 围绕 HVML 标签,继续补充测试用例,力图覆盖所有的 HVML 标签。
  2. 完善可独立运行的 HVML 解释器 purc 的功能。
  3. 补充各类文档及示例程序,方便开发者学习。

2022 年 7 月之后,HVML 的开发将进入开源协作阶段,进入技术和社区生态的建设阶段。团队将围绕跨平台应用以及合璧操作系统两个主题开展后续工作,并联合各方力量共同打造 HVML 相关的技术,同时推进 HVML 的应用。

HVML 社区

作为全球首款可编程标记语言,HVML 语言的诞生是全球性的,对中国来讲,更是历史性的。

要详细了解 HVML 的价值,可阅读笔者以小说形式撰写的文章:《七爷访谈:且看魏森特如何把 HVML 吹破天》

随着 HVML 软件栈最后一块拼图的完成,HVML 后续的开发将通过开源协作的形式开展,这是打造 HVML 技术和社区生态的第一步。

作为 HVML 技术生态的一部分,我们将成立 HVML 社区。欢迎各单位或者个人加入 HVML 社区。同时,为加速 HVML 的开发和推广,我们希望获得来自全球的赞助,尤其是曾受益于 MiniGUI 为代表的国产开源软件的中国企业,参与并助推 HVML 的发展!

有意者,请致信 hvml@fmsoft.cn 或者通过点击“Contact”在后台留言。

我们也欢迎个人小额打赏来鼓励我们,您可以点击此处或文后的原文链接访问打赏页面。

常见问题及解答

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

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

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

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

Q:在哪里可以看到 PurC 和 xGUI 的源代码。

A:我们将在 2022 年 7 月,在 https://github.com/HVML 上公开 PurC 和 xGUI 等项目的代码仓库,其中包括:

  1. HVML 解释器(PurC):HVML 核心代码仓库,实现了 HVML 解释器相关的 API,HVML 预定义变量,以及一个可独立运行的 HVML 解释器可执行程序。
  2. HVML 外部数据获取器(PurC Fetcher):用于支持 HTTP 等协议以独立进程形式运行的外部数据获取器。
  3. HVML 字符渲染器(PurC Midnight Commander):基于 GNU Midnight Commander 的 HVML 字符渲染器,运行在字符终端上,未来还将发展为 HVML 调试器。
  4. 扩展 WebKit 引擎(Tailored WebKit):用于支持 HVML 定义的若干 HTML 属性(已发布)。
  5. DOM 布局库(DOM Ruler):一个使用 CSS 技术实现 DOM 布局的函数库。
  6. HVML 图形渲染器(xGUI Pro):基于扩展 WebKit 的 HVML 图形渲染器,支持多窗口、多页面的自动布局,首期将支持 Linux 桌面和 macOS 平台。

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

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

原文链接

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

附:商标声明

本文提到的产品、技术或者术语名称,涉及北京飞漫软件技术有限公司在中国或其他地区注册的如下商标:

  1. 飛漫

飛漫

  1. FMSoft

FMSoft

  1. 合璧

合璧 合璧 合壁

  1. HybridOS

HybridOS

  1. HybridRun

HybridRun

  1. MiniGUI

MiniGUI

  1. xGUI

xGUI

  1. miniStudio

miniStudio

  1. HVML

HVML

  1. 呼噜猫

呼噜猫

  1. Purring Cat

Purring Cat

  1. PurC

PurC