这个 repo 用来记录我在学习 hack 的过程中遇到的坑以及一些 entry level 的项目实现
HHVM 目前并不支持 M1 Mac (see this issue),必须要在 x86_64 (x64,amd64 同平台) 平台上开发才能够正确 build HHVM
所以可以通过在官方支持的 x86_64 Linux 下构建 HHVM 环境再通过 ssh 跳板开发
如果你没有一个 x86_64 Linux 的开发机,或者你的开发机像我一样正好无法正常启动,那么最简单的办法就是在 x86_64 的 windows 下通过 WSL 挂载 Ubuntu 进行开发
Q: 在 WSL 中按照 HHVM 官网 安装了 HHVM 之后 尝试 hhvm --version
出现了 Exec format error
在顺利 apt-get install hhvm
之后无法正确执行 hhvm
的 binary 的原因普遍是 WSL1 对虚拟机的支持问题,建议升级 WSL2,具体见这篇知乎
Q:现在 WSL 中的 hhvm 开发环境配置完成了,需要提供 ssh 登陆的手段
-
首先需要在 WSL 中配置 ssh server
sudo vi /etc/ssh/sshd_config
Port
${SSH_PORT}
指定 WSL 的 ssh 端口号 PermitRootLogin yes PasswordAuthentication yes -
然后配置支持的 host
sudo vim /etc/hosts.allow
添加 sshd: ALL
-
重启 ssh
sudo service ssh --full-restart
-
检查服务是否正常启动
service --status-all
看到
... [ + ] ssh ...
说明 ok 了
-
配置端口转发
在 Windows 下管理员启动终端并输入
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=${WINDOWS_PORT} connectaddress=localhost connectport=${SSH_PORT}
其中
${SSH_PORT}
是上面设置的 WSL ssh 端口号,${WINDOWS_PORT}
是作为跳板的 Windows 监听请求的端口号 -
检查端口转发
netsh interface portproxy show all
结果类似下面即可
Address Port Address Port ------------ -------------------- ------------ -------------------- 0.0.0.0 ${WINDOWS_PORT} localhost ${SSH_PORT}
-
设置防火墙
正确设置 Windows 防火墙,开放
${WINDOWS_PORT}
端口,不做赘述 -
获取 windows 局域网 ip
ipconfig
-
然后就可以通过 ssh 登陆了
ssh ${WSL_USR_NAME}@${WINDOWS_IP} -p ${WINDOWS_PORT}
有多个原因
- 并发异常
- 通过修改
/etc/ssh/sshd_config
中的MaxSessions
和MaxStartups
解决,改大点
- 端口异常
- 如果
${WINDOWS_PORT}
和${SSH_PORT}
端口号一样的话也会出现这个问题,建议设为不同的端口号防止访问冲突
根据学习 HSL 的源码了解到命名规范如下
- 类名使用 Pascal Case
- 类方法 / 实例方法使用 Camel Case
- 包含有类实现的文件名使用 Pascal Case
NOTE 上述"类"包括了 class
, interface
, trait
- Namespace 使用 Pascal Case
- Namespace 的名字 generally 符合文件夹名称
- global 函数使用 Snake Case
- 代码段中的临时变量使用 Snake Case
- 包含有 global 函数的文件名使用 Snake Case
- Async 函数的函数名要取名为 someFunctionAsync (类函数)和 some_function_async (global 函数)
在开发过程中偶尔会出现 lint 通过但是无法正确执行的情况,报错 Fatal error: Undefined interface
/ Fatal error: Unknown trait
,这应该是 Autoload 没有正确刷新导致的,这时候需要通过 vendor/bin/hh-autoload
重新生成 autoload mapping