MCPcopy Index your code
hub / github.com/ForLoveOfCats/fae

github.com/ForLoveOfCats/fae @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
960 symbols 3,533 edges 51 files 23 documented · 2%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Fae, a friendly and useful systems language

Fae is an unsafe systems programming language with a focus on utility, comfort, and tooling. It steals with flattery from such languages as Rust, Zig, Odin, and Swift. Read the language reference for a detailed snapshot of the current status of the Fae language.

  • Comfortably Useful: Language features are chosen in an attempt to maximize the ratio of utility to language complexity while remaining pleasant to write and reason about
  • Unsafe: Fae is an unsafe language and allows for deep developer control over memory at the cost of compile time safety guarantees
  • High Quality Tooling: A language is only half the experience; having fast, accurate, and pleasant tooling is crucial
>>> cat main.fae
import fae.collections.list.List

fn main() {
    mut list = List<str>.new()
    defer list.free()

    list.push("Hello")
    list.push("There!")

    for item, _, is_last in list.items {
        print(item)
        if is_last.! => print(", ")
    }
    println("")
}

>>> fae run --quiet
Hello, There!
>>> cat main.fae
fn main() {
    println("Hello world")
    println(f"Welcome to {language()}!")
}

fn language(): str {
    return "Fae"
}

>>> fae run --quiet
Hello world
Welcome to Fae!

Browse a selection of example programs here

Language details

The Fae compiler and standard library are very incomplete, missing features include traits, allocator system, error system, and much more.

Read the language reference for a detailed snapshot of the current status of the Fae language.

Community

Join the Fae project Discord server to participate in discussion and ask questions. While not ideal, Discord was chosen to maximize approachability and accessiblity.

Installation

The Fae compiler is immature and incomplete but it can be installed and experimented with today. Here there be dragons, please open an issue when you encounter bugs!

  • Linux x64: Current primary supported platform, binaries available on the releases page.

Statically linked compiler, should run on any recent Linux system

By default expects GNU ld to be in the path - macOS AArch64: Secondary supported platform, binaries available on the releases page.

Tested on macOS 12-14 (may work on 11)

By default expects platform shipped ld to be in the path - Windows x64: Untested and unsupported as of yet. Extremely high priority to support in the near future.

These are the core set of intended supported platforms. Supporting each of these operating systems on the opposite architectures is a goal but lower priority at present.

Primitive syntax support for VSCode is available with this extension, though it lacks code formatting and language server support as those components remain to be built.

Building

See the Build Instructions for directions on how to get up and running with a development build of the Fae language toolchain.

Licenses

The Fae compiler, associated tests, scripts, and supporting infrastructure code, excluding the standard library, are licensed under the 3-Clause BSD license.

The Fae standard library, including portions required for proper compiler function, are licensed under the Unlicense license for maximally unencumbered distribution of applications built with Fae and including portions of the standard library.

Extension points exported contracts — how you extend this code

Generator (Interface)
TODO: Rip out this abstraction, it's causing more touble than it's worth. It didn't end up moving very much common logic [1 …
src/codegen/generator.rs
WriteFmt (Interface)
(no doc) [2 implementers]
src/frontend/error.rs
PathUtils (Interface)
(no doc) [1 implementers]
src/path_utils.rs
Classifier (Interface)
(no doc) [2 implementers]
src/codegen/classification.rs

Core symbols most depended-on inside this repo

push
called by 289
src/frontend/symbols.rs
move_register64_to_register64
called by 256
src/codegen/amd64/assembler.rs
read
called by 253
src/lock.rs
span
called by 236
src/frontend/tree.rs
clone
called by 178
src/frontend/tree.rs
message
called by 157
src/frontend/validator.rs
expect
called by 123
src/frontend/tokenizer.rs
next
called by 117
src/frontend/tokenizer.rs

Shape

Method 414
Function 259
Class 232
Enum 51
Interface 4

Languages

Rust98%
Python2%

Modules by API surface

src/frontend/type_store.rs141 symbols
src/frontend/validator.rs111 symbols
src/codegen/llvm/generator.rs108 symbols
src/frontend/ir.rs100 symbols
src/frontend/tree.rs88 symbols
src/frontend/parser.rs60 symbols
src/codegen/codegen.rs42 symbols
src/frontend/error.rs34 symbols
src/codegen/amd64/assembler.rs33 symbols
src/frontend/tokenizer.rs26 symbols
src/frontend/symbols.rs25 symbols
src/reference.rs18 symbols

For agents

$ claude mcp add fae \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact