Hylo (原名 Val)

codecov

Hylo 是一种编程语言,它利用可变值语义泛型编程进行高级系统编程。

此仓库包含 Hylo 参考实现的源代码。 请访问我们的网站以获取有关该语言本身的更多信息。

开发/使用要求

该项目使用 Swift 编写,并以软件包形式分发,使用 Swift Package Manager 构建。 您将需要 Swift 5.9 或更高版本才能从源代码构建编译器。

此仓库包含子模块,因此克隆后,请执行git submodule update --init以填充它们。

Windows 用户:此仓库包含符号链接,因此您需要在签出之前启用对它们的支持

LLVM

此软件包需要 LLVM 17。 LLVM 的主要版本不可互换或向后兼容。

如果您正在使用此软件包进行开发,我们强烈建议使用启用了断言的 LLVM,例如这些;否则,很容易在不知情的情况下违反 LLVM 的前提条件。 此软件包的 devcontainer(在 .devcontainer 子目录中)预安装了一个启用了断言的 LLVM 构建,位于 /opt/llvm-MinSizeRel 中。 安装调试版本的说明位于 .devcontainer/Dockerfile 中的注释中。

如果您想使用 Swift Package Manager 构建,并且选择以其他方式获取 LLVM,则您需要一个带有 llvm-config 可执行文件的安装,我们将使用它来为 LLVM 创建一个 pkg-config 文件。

使用 CMake 和 Ninja 构建

  1. 配置:选择一个构建目录和一个 CMake构建类型(通常为 DebugRelease),然后,其中 <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; 我们建议您尝试这些软件包之一。

  2. 构建:

    cmake --build <build-directory>
    
  3. 测试(需要在步骤 1 中使用 -DBUILD_TESTING=1

    ctest --parallel --test-dir <build-directory>
    

使用 CMake 和 Xcode 构建

您将需要 CMake 3.3.0-rc1 或更高版本。

  1. 生成 Xcode 项目:选择一个构建目录,然后,其中 <LLVM> 是您的 LLVM 安装的根目录的路径,

    cmake -D LLVM_DIR=<LLVM>/lib/cmake/llvm \
      -G Xcode -S . -B <build-directory>
    

    如果要运行测试,请添加 -DBUILD_TESTING=1

  2. 成功:在构建目录中打开 .xcodeproj 文件,并使用 Xcode 的 UI 进行构建和测试。

使用 Swift Package Manager 构建

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

macOS 用户须知

  1. platforms: [.macOS("xxx")] 添加到 Package.swift,其中 xxx 是您的 macOS 版本,以解决有关“对象文件是为比链接的版本更新的 macOS 版本构建的”的警告。
  2. 您可能需要在 llvm.pc 中添加 zstd 库的路径。

使用 VSCode 构建 Hylo Devcontainer

虽然 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 会发生变化。

编译器管道的组织方式如下所示。 您可以选择编译器应该通过管道进行的深度,选项如下

例如,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