2020 年 5 月,笔者有了设计一款与众不同编程语言的想法,后于 2020 年 7 月提出了 HVML 编程语言并公开了第一份规范草案。一年后,即 2021 年 7 月,我们成立了一个攻坚团队并正式开始了 HVML 解释器(PurC)的开发。2021 年 12 月 27 日,第一个 HVML 程序成功运行,标志着 HVML 的正式诞生。约八十日后,在 2022 年 3 月 11 日,HVML 解释器完成和渲染器的对接。至此,我们可以直观看到 HVML 程序的运行效果了。
从 2021 年 8 月起,我们通过“考鼎录”公众号发表 HVML 的开发月报,向关注 HVML 的各位朋友汇报相关研发进展。本文是 HVML 开发月报的第九期。
在笔者发表于 2018 年的《三谈操作系统》一文中提到,一个操作系统区别于其他操作系统最为重要的技术特征就是围绕某个特定编程语言形成的应用编程接口(API)。我将这个技术特征比喻为操作系统的基因。要设计一个全新的操作系统,就必须在某个编程语言基础上设计一套完备的、可扩展的、易用的应用编程接口,而 HVML 就是笔者为正在开发中的下一代操作系统——合璧操作系统——设计的全新编程语言。
本文是 HVML 开发月报的第九期,主要包括如下内容:
- HVML 解释器和渲染器的对接完成
- HVML 规范 1.0 RC2 发布
- HVML 预定义变量规范 1.0 RC1 发布
- 2022 年 3 月完成的工作内容
- 下一步计划
- 欢迎赞助 HVML
- HVML 兴趣小组
- 常见问题及解答
第一次听说 HVML 的朋友,可以访问 HVML 专题页面 以了解其背景。
HVML 解释器和渲染器的对接完成
2022 年 3 月 11 日,开发团队完成了 HVML 解释器和渲染器 PurCMC 的对接。现在,我们可通过渲染器直观看到 HVML 运行的效果。见如下视频:
HVML 运行效果演示
在视频中,我们通过命令行执行一个 HVML 程序,该程序发出指令,在另外一个程序中创建文档并动态更新文档。这里的“另外一个程序”就是独立运行的 HVML 渲染器。目前,渲染器可在字符终端中展示文档对象模型(DOM)树,从而可以直观看到其中内容的变化。这个渲染器的界面是字符的,主要用于开发阶段。开发团队正紧锣密鼓开发图形渲染器 xGUI,等到发布 xGUI 之时,就是我们正式对外发布 HVML 之时!
HVML 规范 1.0 RC2 发布
按计划,我们于 2022 年 4 月 1 日发布了 HVML 规范 1.0 RC2 版本。
2022 年 3 月份,我们围绕 HVML 语言规范主要做了如下调整及增强:
- 异常相关增强。新增
Unsupported
异常,明确了可忽略异常和不可忽略异常,以及如何处理silently
副词属性。 - 可使用
observe
命名一个观察者,以方便移除一个特定的观察者。 - 增强
request
标签,使之可用来在指定的元素汇集上执行一个方法,比如控制视频的播放。 - 调整介词属性。使用
against
定义init
中集合的唯一性键值以及sort
中的排序依据。via
属性只用于定义请求的方法。 - 调整响应式更新的语法。使用
responsively
副词属性定义骨架元素的文本内容为响应式的,不再使用{{$...}}
语法。 - 增强
bind
标签。使之支持使用内容来定义要绑定的表达式。 - 支持 CJSONEE(complex JSON evaluation expression,复合 JSON 求值表达式)。
有关详情,可点击阅读如下的链接:
HVML 预定义变量规范 1.0 RC1 发布
按计划,我们于 2022 年 4 月 1 日发布了 HVML 预定义变量 1.0 RC1 版本。目前开发团队已完成大部分必要动态变量的接口。
利用 HVML 1.0RC2 中引入的复合求值表达式(complex JSON evaluation expression,缩写为 CJSONEE)规则,我们可以如下编码使用预定义变量及其接口:
// 调用 $SYSTEM.cwd 将当前工作路径切换到 `/etc` 目录下,然后调用 $FS.list
// 获得所有目录项对象数组。
{{ $SYSTEM.cwd(! '/etc'); $FS.list }}
// 尝试改变工作路径到 `/root` 目录下,如果成功则调用 $FS.list 获得该目录下
// 所有目录项对象数组,否则向标准输出($STREAM.stdout)打印提示信息,
// 并改变工作路径到 `/` 下,若成功,则获得该目录下所有目录项对象数组,
// 否则将 `false` 作为该 CJSONEE 的最终求值结果。
{{
$SYSTEM.cwd(! '/root') &&
$FS.list ||
$STREAM.writelines($STREAM.stdout,
'Cannot change directory to "/root"'); $SYSTEM.cwd(! '/' ) &&
$FS.list || false
}}
// 尝试改变工作路径到 `/root` 目录下,如果成功则调用 $FS.list_prt 获得该目录下
// 所有目录项清单(字符串),否则返回提示信息。最终将目录项清单或者错误信息
// 输出到标准输出。
{{
$STREAM.writelines($STREAM.stdout, {{
$SYSTEM.cwd(! '/root') && $FS.list_prt ||
'Cannot change directory to "/root"''
}})
}}
有关详情,可点击阅读如下的链接:
2022 年 3 月完成的工作内容
在研发团队的努力下,2022 年 3 月,我们按照预期完成了所有研发目标,包括:
- 对接字符渲染器(PurCMC),直观看到 HVML 程序的运行效果。
- 增强集合一致性的实现。
- 预定义变量的重构以及新增接口的开发。
- 执行更多体现 HVML 便利性和灵活性的示例代码。
- 根据 HVML 规范的调整完善解释器。
下一步计划
2022 年 04 月的主要目标有:
- 梳理 HVML 程序异常的处理,包括
catch
标签的实现。 - HVML 标签的实现:
fire
、bind
、request
、define
、include
等。 - CJSONEE 的支持。
- 预定义变量的重构及新增接口的开发。
- 执行更多体现 HVML 便利性和灵活性的示例代码。
- 根据示例代码的需求进一步完善解释器。
欢迎赞助 HVML
作为全球首款可编程标记语言,HVML 语言的诞生是全球性的,对中国来讲,更是历史性的。
要详细了解 HVML 的价值,可阅读笔者以小说形式撰写的文章:《七爷访谈:且看魏森特如何把 HVML 吹破天》。
目前,HVML 规范、解释器、渲染器等的开发,在飞漫软件的组织下开展,其主要资金来源于飞漫软件的老牌开源项目 MiniGUI 的许可收入。
为加速 HVML 的开发和推广,我们希望获得来自全球的赞助,尤其是曾受益于 MiniGUI 为代表的国产开源软件的中国企业,参与并助推 HVML 的正式发布。
有意者,请致信 tobesponsor@fmsoft.cn
或者通过点击“Contact”在后台留言。
我们也欢迎个人小额打赏来鼓励我们,您可以点击此处或文后的原文链接访问打赏页面。
HVML 兴趣小组
HVML 兴趣小组是一个虚拟小组,主要成员是对 HVML 及相关技术感兴趣的业内人士,这个小组主要通过微信群聊沟通。
如有兴趣加入该群聊,您可以通过点击“Contact”在后台留言,留下您的微信号,小编加您好友之后拉您入群。
目前 HVML 兴趣小组正在围绕如下前述的两个规范文档展开工作。
常见问题及解答
Q:HVML 是针对嵌入式和物联网使用的吗?
A:不仅仅是。HVML 是一种通用的胶水语言,主要用来开发跨平台的 GUI 应用,因此,HVML 的目标平台包括传统的桌面、智能手机、平板、嵌入式设备和物联网设备。
Q:HVML 是打算取代现有的 Web 前端开发技术,比如 JavaScript 吗?
A:没有这个计划。HVML 的渲染器会用到 Web 前端技术,但 HVML 的目的并不是取代现有的 Web 前端开发技术,而是为跨平台 GUI 应用的开发提供另外一种技术框架。
Q:在哪里可以看到 PurC 和 xGUI 的源代码。
A:PurC 和 xGUI 仍然处在开发状态,暂时不向公众开放其代码仓库。
Q:未来会开源 PurC 和 xGUI 吗?
A:会的,而且我们会使用商业友好的宽松许可证(如 LGPL)发布 PurC 和 xGUI。
Q:如何赞助 HVML 相关的项目?
A:个人打赏性质的赞助,您可以点击文后的原文链接。大额的赞助,可点击“Contact”留下联系方式,我们的小编会联系您。
原文链接
https://store.fmsoft.cn/campaign/denoteoss-lt
附:商标声明
本文提到的产品、技术或者术语名称,涉及北京飞漫软件技术有限公司在中国或其他地区注册的如下商标:
- 飛漫
- FMSoft
- 合璧
- HybridOS
- HybridRun
- MiniGUI
- xGUI
- miniStudio
- HVML
- 呼噜猫
- Purring Cat
- PurC