找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4470

积分

0

好友

584

主题
发表于 7 小时前 | 查看: 4| 回复: 0

概述

连连看在文章结尾哦!

星庭连连游戏界面

当所有人都在争论 Electron 太重、Tauri 太新、Flutter Desktop 生态不行的时候,有人正在用 PHP 自研一整套 GUI 框架——从 Vue 语法的模板编译器,到 CSS 选择器引擎,再到 Skia 渲染后端,全部手搓。

这是个什么项目

最近在 GitHub 上翻到一个叫 Px 的仓库,它的自我介绍只有一句话:

GUI Framework powered by Swoole AOT - TypePHP

翻译成人话:用 PHP 写桌面 GUI 应用,模板语法长得像 Vue 3,最终编译成不依赖 PHP 运行时的原生 Windows exe。

第一反应是“这不可能”,第二反应是“这哥们疯了”,看完源码之后的第三反应是——这套技术路线居然是通的。

整条编译链路是这样的:

.vue 单文件组件
   ↓  sfc-compiler.php(自研 SFC 编译器)
PHP 代码
   ↓  Swoole Compiler(AOT 编译)
C++ 代码
   ↓  MSVC
原生 .exe

没错,你写的是 Vue 风格的 .vue 文件,跑起来的是一个 C++ 编译出来的 Windows 原生程序,中间的胶水语言是 PHP。

.vue到原生exe编译流程图

仓库地址:https://github.com/xingye00186/Px/tree/dev

迷你浏览器引擎

很多人以为桌面 GUI 框架的难点在窗口和控件,其实真正的深水区是布局和渲染。Px 的做法相当激进:不套壳浏览器(Electron 路线)、不调系统 WebView(Tauri 路线),而是自己实现了浏览器引擎里最核心的那几层。

看一下它的 framework 目录:

模块 职责
framework/Layout/ 布局引擎,支持 Block / Flex / Grid / Inline 四种排版模型
framework/Css/ CSS 解析:CssLength、CssValue、StylePool、选择器匹配
framework/Paint/ 绘制层,带 6 个渲染后端候选 + 故障降级机制
framework/Text/ 文本渲染后端:GDI / Skia / DirectWrite
framework/Reactive/ 原生响应式系统,用 PHP 注解 #[Reactive] 声明
framework/Compiler/ SFC 编译器,.vue → PHP
framework/Render/ RenderNode 树管理

熟悉浏览器内核的同学看到这个列表应该会心一笑:这就是一个精简版 Blink 的模块划分——Style、Layout、Paint、Text,一层不少。

Web前端技术栈分层架构

PHP 是怎么变成 exe 的

整个项目最反直觉的环节,是 PHP → C++ 的 AOT 编译,它依赖 Swoole Compiler 来完成。

AOT(Ahead-Of-Time)编译对动态语言来说是地狱难度:PHP 的动态特性——变长参数、动态属性、引用传递、闭包捕获、eval——每一个都是静态编译的天敌。

Px 的仓库里有一个 apps/ 目录,塞满了这样的子项目:

apps/aot-abstract-crash-test/     抽象类崩溃测试
apps/aot-array-init-test/        数组初始化测试
apps/aot-c2440-repro/            MSVC C2440 类型错误复现
apps/aot-cross-readonly/         跨文件 readonly 属性测试
apps/aot-named-args-test/        命名参数测试
apps/aot-reference-test/         引用传递测试
apps/aot-dynamic-load-test/      动态加载测试
...

每一个目录都是一颗踩过的雷。aot-c2440-repro 这种命名(C2440 是 MSVC 的类型转换错误码)说明作者是真的在 PHP 语义和 C++ 类型系统的夹缝里一个 case 一个 case 地趟。

为了防止写出编译不过的代码,项目还配了一个 AOT 静态检查器framework/aot-checker.php),在编译前就把不兼容的 PHP 写法拦下来。相当于给 PHP 加了一层“可编译子集”的约束——项目自称 TypePHP,大概就是这个意思。

写在最后

十年前,“用 PHP 写桌面应用”是一个段子。今天有人把它做成了:Vue 的开发体验、自研的渲染引擎、原生 exe 的交付形态。

它可能永远不会流行,但它回答了一个有意思的问题——在 AI 协作时代,一个人能把工程的边界推到多远?

对这个项目的更多讨论,欢迎来 云栈社区 交流。

连连看

连连看游戏关卡界面

下载地址:https://gitee.com/Tinywan_admin/type-php/blob/master/lumen-links-windows-x64.zip




上一篇:VCC、VDD、VSS、VEE到底有何区别?硬件电源命名与避坑指南
下一篇:SCADA系统详解:数据采集监控、功能架构与PLC/DCS区别
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-8-2 08:54 , Processed in 1.018380 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表