Hylo(原名 Val)
Hylo 是一种利用 可变值语义 和 泛型编程 进行高级系统编程的编程语言。
注意:我们目前的大部分工作都集中在位于 https://github.com/hylo-lang/hylo-new 的新编译器上。鼓励新贡献者针对该仓库进行开发。
本仓库包含 Hylo 旧实现的源代码。请访问我们的 网站 以获取有关该语言本身的更多信息。
开发/使用要求
本项目使用 Swift 编写,并以包的形式分发,使用 Swift Package Manager 或 CMake 构建。
你需要 Swift 6.2 或更高版本才能从源代码构建编译器。
本仓库包含
子模块,
因此克隆后,请执行 git submodule update --init 以填充
它们。
Windows 用户: 本仓库包含符号链接,因此你需要 启用支持 才能检出它。
LLVM
此包需要由 Hylo 打包的 LLVM 20,其中包含用于 SPM 的 .pc pkgconfig 文件,并启用了断言以帮助在开发期间发现错误。注意:LLVM 的主要版本
不兼容或向后兼容。
如果你使用的是开发容器,这已经预安装在系统上。运行 llvm-config --prefix 以查看其位置。
在 Windows 上,将环境变量 VSINSTALLDIR 设置为你 visual studio 的安装路径,例如 C:/Program Files/Microsoft Visual Studio/2022/Community,末尾不带 /,以便 LLVM 的 CMake 文件能够定位 DIA SDK。
使用 CMake 和 Ninja 构建
-
配置:选择一个 build-directory 和一个 CMake build type (通常为
Debug或Release)。<LLVM>是 指向 LLVM 安装根目录的路径。cmake -D LLVM_DIR=<LLVM>/lib/cmake/llvm \ -D CMAKE_BUILD_TYPE=<build-type> \ -D BUILD_TESTING=1 \ -G Ninja -S . -B .build
MacOS 特定标志
- 如果你未使用默认的 Swift 工具链,你可能需要 -D CMAKE_Swift_COMPILER=swiftc 以防止 CMake 使用 Xcode 的默认 swift。
- 添加 -D CMAKE_OSX_SYSROOT=$(xcrun --show-sdk-path)
-
构建:
cmake --build .build -
测试(需要第 1 步中的
-D BUILD_TESTING=1):ctest --parallel --test-dir .build
使用 CMake 和 Xcode 构建
您需要 CMake 3.30 或更高版本。
-
生成 Xcode 项目:选择一个 build-directory,然后, 其中
<LLVM>是您 LLVM 安装根目录的路径,cmake -D LLVM_DIR=<LLVM>/lib/cmake/llvm \ -D BUILD_TESTING=1 \ -G Xcode -S . -B .build -
Profit: 在 build-directory 中打开
.xcodeproj文件, 并使用 Xcode 的 UI 进行构建和测试。
使用 Swift Package Manager 或 Xcode 构建
如果您正在使用开发容器,则可以跳过以下步骤。
- 安装 pkg-config.
- Ubuntu:
sudo apt install pkg-config - Windows:
choco install pkgconfiglite(Chocolatey) 或 手动安装 - MacOS:
sudo port install pkgconfig(Mac Ports)
- a) 当不使用 Xcode 时:将 LLVM 安装 的
pkgconfig子文件夹添加到PKG_CONFIG_PATH,除非你正在使用 Xcode。
b) 使用 Xcode 时:你需要将 llvm.pc 安装到 Xcode 已经搜索的目录中,例如 /usr/local/lib/pkgconfig/。Hylo LLVM 安装包含一个位于 <LLVM>/pkgconfig/install-pc.sh 的脚本,可帮助完成此操作:
cd <LLVM>/pkgconfig ./install-pc.sh llvm.pc /usr/local/lib/pkgconfig/
- 现在你应该能够构建和测试:
swift build -c release swift test -c release
该命令将在 .build/release 中创建一个名为 hc 的可执行文件。
这就是 Hylo 的编译器!
要测试你的编译器,请运行
swift test -c release --parallel
致 macOS 用户:
- 在
Package.swift中添加platforms: [.macOS("xxx")],其中xxx是 你的 macOS 版本,以解决关于“object file was built for newer macOS version than being linked”的警告。
使用 VSCode 构建 Hylo Devcontainer
虽然 Hylo 原生支持 Linux,但它也提供了一个 Devcontainer 规范,以便通过 Docker 容器在其他平台上为 Linux 进行开发。我们的 Linux CI 使用该规范;这使得可以在 macOS 等其他操作系统上本地运行 Linux CI。虽然该规范应该适用于任何支持 devcontainers 的 IDE,但请记住该团队仅使用 VSCode。
首次使用 VSCode 打开 Hylo 项目时,你应该会收到提示,要求安装 .vscode/extensions.json 中的扩展 recommendations。如果没有收到提示,请在扩展市场中搜索扩展标识符以手动安装扩展。
然后,使用 VSCode 命令构建 Devcontainer:> Dev Containers: Rebuild and Reopen in Container。
最后,在 VSCode 中打开一个新的集成终端,并确认 shell 用户是 vscode。你可以运行 whoami 来检查这一点。
该集成终端已连接到 Devcontainer,就像通过 ssh 一样。
你现在可以按照使用 [CMake 和 Ninja](#building_with_ cmake_and_ninja) 或 Swift Package Manager 进行构建和测试的说明进行操作。
所有先决条件,包括默认 PKG_CONFIG_PATH 中的 llvm.pc 文件,均已预装。
Hylo 仓库文件已挂载到容器中,因此任何在本地(在 VSCode 或其他编辑器中)所做的更改都会自动同步到 Devcontainer。但是,如果需要修改 .devcontainer 目录中的任何文件,您需要使用 > Dev Containers: Rebuild and Reopen in Container 重新构建容器。
提交问题
提交问题报告时,您需要手动更新 Hylo 版本。
如果没有此步骤,hc --version returns unknown。
./Tools/set-hc-version.sh
实现状态
本项目正处于积极开发阶段;请预期功能可能会失效,API 可能会发生变化。
编译器流水线组织如下。 您可以使用以下选项选择编译器在流水线中应深入的程度:
--emit raw-ast:仅解析输入文件,并将无类型 AST 输出为 JSON 文件。--typecheck:对输入运行类型检查器。--emit raw-ir:将有类型 AST 降低为 Hylo IR,并将结果输出到文件中。--emit ir:运行强制 IR 通道,并将结果输出到文件中。--emit llvm:将程序转译为 LLVM,并输出 LLVM IR。--emit intel-asm:为所有用户模块输出 Intel 汇编。--emit binary(默认):生成可执行文件。
例如,hc --emit raw-ast -o main.json main.hylo 将解析 main.hylo,将无类型 AST 写入 main.json,并退出流水线。
有关当前实现状态的更详细描述,请参阅我们的路线图页面。
贡献
我们欢迎对 Hylo 的贡献。 请阅读 CONTRIBUTING.md 以了解如何开始的详细信息。
您还可以通过加入我们的 Slack 或每周二和周四太平洋时间 12:00-13:00 或中欧时间 21:00-22:00 的 Teams 会议 与社区联系。
许可证
Hylo 根据 Apache-2.0 许可证条款分发。 详见 LICENSE。