Hylo 是一种编程语言,它利用可变值语义和泛型编程进行高级系统编程。
此仓库包含 Hylo 参考实现的源代码。 请访问我们的网站以获取有关该语言本身的更多信息。
该项目使用 Swift 编写,并以软件包形式分发,使用 Swift Package Manager 构建。 您将需要 Swift 5.9 或更高版本才能从源代码构建编译器。
此仓库包含子模块,因此克隆后,请执行git submodule update --init
以填充它们。
Windows 用户:此仓库包含符号链接,因此您需要在签出之前启用对它们的支持。
此软件包需要 LLVM 17。 LLVM 的主要版本不可互换或向后兼容。
如果您正在使用此软件包进行开发,我们强烈建议使用启用了断言的 LLVM,例如这些;否则,很容易在不知情的情况下违反 LLVM 的前提条件。 此软件包的 devcontainer(在 .devcontainer
子目录中)预安装了一个启用了断言的 LLVM 构建,位于 /opt/llvm-MinSizeRel
中。 安装调试版本的说明位于 .devcontainer/Dockerfile
中的注释中。
如果您想使用 Swift Package Manager 构建,并且选择以其他方式获取 LLVM,则您需要一个带有 llvm-config
可执行文件的安装,我们将使用它来为 LLVM 创建一个 pkg-config
文件。
配置:选择一个构建目录和一个 CMake构建类型(通常为 Debug
或 Release
),然后,其中 <LLVM>
是您的 LLVM 安装的根目录的路径,
cmake -D CMAKE_BUILD_TYPE=<build-type> \
-D LLVM_DIR=<LLVM>/lib/cmake/llvm \
-G Ninja -S . -B <build-directory>
(在 Windows 上,用您的 shell 的行继续符替换 \
,或者只是删除换行符和反斜杠)。
如果要运行测试,请添加 -DBUILD_TESTING=1
。
注意:在 macOS 上,如果您没有使用 Xcode 的默认工具链,您可能需要 -D CMAKE_Swift_COMPILER=swiftc
以防止 CMake 使用 Xcode 的默认 swift
。
如果此命令失败,则可能是因为您安装了一个没有 CMake 支持的 LLVM; 我们建议您尝试这些软件包之一。
构建:
cmake --build <build-directory>
测试(需要在步骤 1 中使用 -DBUILD_TESTING=1
)
ctest --parallel --test-dir <build-directory>
您将需要 CMake 3.3.0-rc1 或更高版本。
生成 Xcode 项目:选择一个构建目录,然后,其中 <LLVM>
是您的 LLVM 安装的根目录的路径,
cmake -D LLVM_DIR=<LLVM>/lib/cmake/llvm \
-G Xcode -S . -B <build-directory>
如果要运行测试,请添加 -DBUILD_TESTING=1
。
成功:在构建目录中打开 .xcodeproj
文件,并使用 Xcode 的 UI 进行构建和测试。
Windows 用户:Swift Package Manager 在 Windows 上的支持较差,并且我们发现许多测试在使用 Swift Package Manager 运行时,仅在 Windows 上表现不稳定。 我们强烈建议改用 CMake。
所有人: Swift Package Manager 的总体支持较差,我们正在考虑放弃使用它,因此请考虑使用带有 ninja 的 CMake 或带有 Xcode 的 CMake。
首先,您需要创建一个特定于您的安装的 pkgconfig
文件,并使其对您的构建工具可见。 我们在项目的顶层目录中使用如下所示的 bash
脚本
./Tools/make-pkgconfig.sh ./llvm.pc
如果您使用的是 Windows,则您的 git
安装(Swift 需要)包含一个 bash
可执行文件,因此您可以执行以下操作
C:\Program Files\Git\bin\bash ./Tools/make-pkgconfig.sh ./llvm.pc
上面的命令在当前目录中生成 llvm.pc
,并将其内容打印到终端。 您可以将它的目录添加到您的 PKG_CONFIG_PATH
环境变量中,以便与命令行工具一起使用
export PKG_CONFIG_PATH=$PWD
或者您可以将其放在 pkg_config
已经搜索的位置(与 Xcode 一起使用时需要)
sudo mkdir -p /usr/local/lib/pkgconfig && sudo mv llvm.pc /usr/local/lib/pkgconfig/
设置好 llvm.pc
后,您应该能够使用 Swift Package Manager 构建此项目
swift build -c release
该命令将在 .build/release
中创建一个名为 hc
的可执行文件。 这就是 Hylo 的编译器!
要测试您的编译器,
swift test -c release --parallel
platforms: [.macOS("xxx")]
添加到 Package.swift
,其中 xxx
是您的 macOS 版本,以解决有关“对象文件是为比链接的版本更新的 macOS 版本构建的”的警告。llvm.pc
中添加 zstd
库的路径。虽然 Hylo 本机支持 Linux,但它还提供了一个 Devcontainer 规范,用于通过 Docker 容器在其他平台上为 Linux 进行开发。 我们的 Linux CI 使用此规范;这使得可以在 macOS 等其他操作系统上本地运行 Linux CI。 虽然此规范应该适用于任何支持 devcontainer 的 IDE,但请记住此团队仅使用 VSCode。
首次在 VSCode 中打开 Hylo 项目时,系统应提示您安装 .vscode/extensions.json
中的扩展 recommendations
。 如果未提示您,请通过在扩展市场中搜索扩展标识符来手动安装这些扩展。
然后,使用 VSCode 命令构建 Devcontainer:> Dev Containers: Rebuild and Reopen in Container
。
最后,在 VSCode 中打开一个新的集成终端,并确认 shell 用户是 vscode
。 您可以运行 whoami
来检查这一点。
该集成终端通过 ssh 连接到 Devcontainer。
您现在可以按照[使用 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
将返回 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 或我们的 Zoom 会议(ID:633 2146 3694,密码:409180)与社区联系,时间为太平洋时间每周二和周四的 13:00-13:30 或欧洲中部时间 22:00-22:30。
Hylo 根据 Apache-2.0 许可证的条款分发。 有关详细信息,请参见 LICENSE。