rust + gnome.gtk 实现的【图形用户界面】版 [npm - inquirer]

53c1cb84be491162f057e7a1cf32ff96.png

scaffold-wizard

Github工程入口:https://github.com/stuartZhang/scaffold-wizard#scaffold-wizard

这是一款加持了【图形用户界面】的npm - inquirer(名曰:问卷)。即,根据【问卷】配置文件,以人-机交互的形式,收集终端用户的【回答结果】。这里提到的【问卷配置】与【回答结果】都是*.json格式的字符串(或文件)。

【问卷】既能够作为.exe文件被双击运行,也支持作为.dll文件被链接和调用-间接运行。

  • 前者的输入与输出都是.json文件。

  • 后者对外开放了两个C ABI以备调用。

    • 【问卷配置】以json字符串的形式从第一个形参questions传入。

    • 【回答结果】通过最后一个【回调函数】的第二个实参输入形参,以json字符串的形式异步地传出。

    • 【问卷配置】以json字符串的形式从第一个形参questions传入。

    • 【回答结果】以json字符串的形式从函数返回值传出。

    • 同步接口:char* inquire(char* questions, char* bin_dir, char* log4rs_file)

    • nodejs风格的异步接口:void inquireAsync(char* questions, char* bin_dir, char* log4rs_file, void (*callback)(char* error, char* answers))

在函数调用期间,会有gnome图形界面被弹出和提示用户输入问题答案。

制作这款工具的动机

我最近花了两个月的业余时间制作【问卷】这款工具的直接冲动来源于:将公司【前端-脚手架安装向导】从·命令行交互·升级为·图形界面互动·的构想。其路线图大约包括:

  • 首先,让整个人-机交互过程更具有表现力;

  • 其次,最好能将【安装向导】改造成为一个“原生GUI平台”,从而在未来添加更多辅助功能。

  • 最终,成为公司技术工具链中重要的一环 --- 目标远大,征程漫长。

后来,我越做这款工具,越是觉得它的·通用性·还是比较高的。其使用场景不应仅只局限于【脚手架-安装过程】的现场配置收集。相反,任何含有【意见咨询】类功能的使用场景都可以考虑使用这款(或这类)工具。而,工具链的后续处理环节,再根据被收集的反馈结果,做定制化的“裁剪”。比如,“裁剪”脚手架内置的工程原型,使其更符合项目要求。

于是,我将这款工具从“脚手架-安装向导”更名为“问卷”。同时,它“下一步”再“下一步”的使用风格真心地相像于传统的windows应用软件的【安装向导】。【情怀】--- 在我认知体系中的任何软件安装都应该是“下一步”再“下一步”...最后“完成”;并且,其步骤越多,越有仪式感。

另一方面,在【rust桌面应用】方向投入更多业余精力也符合我个人对掌握rust技术栈的成长规划。即,

  • rust + wasm入门。作为入门,这个“接入端”算是门槛比较低的了。

  • rust桌面编程领域进阶。毕竟,wasm是一个严重受限的技术平台,许多rust高级语言特性,还有rust生态一多半的crate都没有用武之地。这严重地制约了我对rust技术栈的想像力与领悟层次。而转向rust Iron则很不明智。因为,

    • 就诸多后端解决方案而言,rust相对于go并没有绝对优势,生存空间极为狭小。同时,rust还得受着来自javarubyphppython的冲击。

    • 愣头青地和既得利益【团体】正面抢生存空间不利于团队的团结,我的领导也不会对我满意的。

    • 我掌握新技术的初衷是提高个人岗位竞争力,不是找挨虐的

  • 最后我的愿景是:在IoT嵌入式设备上“开花结果”。这对rust技术栈本身来说真不是问题。它已经一次又一次地证明其实力。愿景的实现主要还是看我对rust的掌握能够达到什么水平。

综上所述,实践rust的务实路径:wasm -> Native GUI App -> IoT嵌入式编程。使用rust做一些GC类语言想做,而做不好的事。

即便作为是一名懒惰的程序员,我也得掌握两个计算机语言

  • GC类精通一门(一般说是“高级计算机语言”)

  • GC类掌握一门(通常认为是“系统计算机语言”)

前者中佼佼者䊨在:“铺得面广+无处不在”,解决“温饱”问题;后者中“剩者”的立足点是:“足够地快+内存安全”,解决“小康”问题。我要是能达到这个目标,那可真是:“中年危机远离我”。

技术

简单地讲,rust写业务逻辑 + gtk组件库画界面。

依赖说明

  • clap

    • 解析命令行参数input-fileoutput-filelog4rs-file

    • 用法还算是高级,给clapyaml配置文件,而不是在代码里攒【解析树】。

  • eval

    • 在运行时,根据上下文,求值【问卷配置】中when表达式。“给表达式求值”的功能真像javascript里的eval函数,但没那么强大。我也绝不想在这个小工具里集成一个JavascriptCore<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值