Giter Club home page Giter Club logo

hylo's Introduction

Hylo

Warning Val is getting renamed to Hylo. We apologize for any broken links and confusion this may cause. We're working on it.

Hylo is a programming language that leverages mutable value semantics and generic programming for high-level systems programming.

This repository contains the sources of the reference implementation of Hylo. Please visit our website to get more information about the language itself.

Installation

This project is written in Swift and distributed in the form of a package, built with Swift Package Manager. You will need Swift 5.7 or higher to build the compiler from sources.

Note to Windows users: although this project is not Unix-specific, Windows support is not guaranteed due to the instability of continuous integration (see hylo-lang#252 and hylo-lang#805).

Prerequisites

You can skip directly to step 3 if you're doing development exclusively in a devcontainer. Otherwise:

  1. Install LLVM 15 or later on your system (e.g. brew install llvm)
  2. Have the above installation's llvm-config in your PATH (homebrew doesn't do that automatically; you'd need export PATH="$HOMEBREW_PREFIX/opt/llvm/bin:$PATH").
  3. In this project's root directory.
    1. swift package resolve to get the make-pkgconfig tool.
    2. .build/checkouts/Swifty-LLVM/Tools/make-pkgconfig.sh llvm.pc to generate LLVM's library description
    3. Either
      1. sudo mkdir -p /usr/local/lib/pkgconfig && sudo mv llvm.pc /usr/local/lib/pkgconfig/ (if you want to use Xcode)
      2. or, export PKG_CONFIG_PATH=$PWD in any shell where you want to work on this project

Building the compiler

You may compile Hylo's compiler with the following commands:

swift build -c release

That command will create an executable named valc in .build/release. That's Hylo's compiler!

Running the tests

To test your compiler,

swift test -c release --parallel

Building a Hylo Devcontainer with VSCode

While Hylo supports Linux natively, it also provides a Devcontainer specification to develop for Linux on other platforms through a Docker container. Our Linux CI uses this specification; this makes it possible to run Linux CI locally on other operating systems like macOS. While this specification should work for any IDE that supports devcontainers, keep in mind this team only uses VSCode.

When opening the Hylo project in VSCode for the first time, you should be prompted to install the extension recommendations in .vscode/extensions.json. If you are not prompted, manually install the extensions by searching for the extension identifiers in the Extensions Marketplace.

Then, build the Devcontainer with the VSCode command: > Dev Containers: Rebuild and Reopen in Container.

Finally, open a new integrated terminal in VSCode and confirm that the shell user is vscode. You can run whoami to check this.

That integrated terminal is connected to the Devcontainer, as if by ssh. Use the make-pkgconfig tool to configure LLVM's library description (see steps 3 in prerequisites). You can now run swift test -c release to build and test for Linux.

The Hylo repository files are mounted into the container, so any changes made locally (in VSCode or in other editors) will be automatically propagated into the Devcontainer. However, if you need to modifiy any of the files in the .devcontainer directory, you will need to rebuild the container with > Dev Containers: Rebuild and Reopen in Container.

Implementation status

This project is under active development; expect things to break and APIs to change.

The compiler pipeline is organized as below. Incidentally, early stages of this pipeline are more stable than later ones. (Note: completion percentages are very rough estimations.)

  1. Parsing (100%)
  2. Type checking (50%)
  3. IR lowering (30%)
  4. IR analysis and transformations (30%)
  5. Machine code generation (20%)

You can select how deep the compiler should go through the pipeline with the following options:

  • --emit raw-ast: Only parse the input files and output an untyped AST as a JSON file.
  • --typecheck: Run the type checker on the input.
  • --emit raw-ir: Lower the typed AST into Hylo IR and output the result in a file.
  • --emit ir: Run mandatory IR passes and output the result in a file.
  • --emit llvm: Transpile the program to LLVM and output LLVM IR.
  • --emit intel-asm: Output Intel assembly for all user module(s).
  • --emit binary (default): Produce an executable.

For example, valc --emit raw-ast -o main.json main.val will parse main.val, write the untyped AST in main.json, and exit the pipeline.

A more detailed description of the current implementation status is available on our roadmap page.

Related video and audio

Conference Talks

Conference Year Speaker Title
C++Now 2022-05 Dave Abrahams Keynote: A Future of Value Semantics and Generic Programming Part 1
C++Now 2022-05 Dave Abrahams & Dimi Racordon Keynote: A Future of Value Semantics and Generic Programming Part 2
CppNorth 2022-07 Dave Abrahams Lightning Talk: An Object Model for Safety and Efficiency by Definition
CppCon 2022-09 Dave Abrahams Value Semantics: Safety, Independence, Projection, & Future of Programming
CppCon 2022-09 Dimi Racordon Val: A Safe Language to Interoperate with C++
ACCU 2023-03 Lucian Radu Teodorescu Concurrency Approaches: Past, Present, and Future

Podcasts

Podcast Episode Date Guest Title
CppCast 352 2023-01-20 Dimi Racordon Val and Mutable Value Semantics
ADSP 137 2023-07-07 Sean Parent Sean Parent on Hylo (vs Rust)!
ADSP 138 2023-07-14 Sean Parent Sean Parent on Val! (Part 2)

Contributing

We welcome contributions to Val. Please read through CONTRIBUTING.md for details on how to get started.

You can also get in touch with the community by joining our Slack or one of our Teams Meetings (ID: 298 158 296 273, Passcode: D2beKF) on Tuesdays and Thursdays, 12:30-1:00 PST.

License

Hylo is distributed under the terms of the Apache-2.0 license. See LICENSE for details.

hylo's People

Contributors

kyouko-taiga avatar lucteo avatar dabrahams avatar c-bj avatar nickpdemarco avatar esleche avatar jlscheerer avatar zachiah avatar codereport avatar compnerd avatar camio avatar gsfreema avatar dan-zheng avatar mtk-cognex avatar mptg94 avatar joaogui1 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.