Skip to content

raccoonlang/rfcs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Raccoon Language RFCs

Overview

This repository contains the Request for Comments (RFCs) that define the Raccoon programming language specification, implementation, and ecosystem. Raccoon is a general-purpose, async-by-default systems language with TypeScript-like syntax, garbage collection, race-free concurrency, and a comprehensive standard library optimized for building APIs, workers, and CLIs.

Version: v0.1 (Draft) Status: Active Development

What is an RFC?

An RFC (Request for Comments) is a design document that describes a new feature, specification, or process for the Raccoon language. RFCs serve as the primary mechanism for proposing major changes, documenting design decisions, and ensuring community involvement in the language's evolution.

RFCs provide several benefits over other communication channels:

  • Asynchronous collaboration - No implicit demand for immediate responses
  • Thoughtful feedback - Reviewers have time to consider and propose changes
  • Parallel collaboration - Multiple people can collaborate without conflicts
  • Searchability - RFCs are easily searchable and referenceable
  • Permanent record - RFCs are retained indefinitely for historical context

When to Use an RFC

Use an RFC when:

  • You want to frame a problem and propose a solution
  • You need thoughtful feedback from team members
  • You want to surface an idea, improvement, or architectural change
  • You need to define a feature or design specification
  • You're making a decision that impacts multiple components or modules

Don't use an RFC when:

  • Making minor implementation details or bug fixes
  • You're the sole decision maker and the change is within your scope
  • The change is trivial and doesn't require discussion

RFC Process

1. Creating an RFC

  • Use the RFC Template as a starting point
  • Assign the next available RFC number (format: RFC-XXXX)
  • Start with Status: WIP or Draft
  • Include all required sections from the template
  • Author name and date are required

2. RFC Status Labels

Each RFC has a status label that provides context for readers:

  • WIP: Work in Progress - Still being drafted, not ready for review
  • Draft: Initial complete proposal ready for early feedback
  • Reviewing Problem: Focus feedback on the problem statement
  • Reviewing Solution: Problem is understood, reviewing the proposed solution
  • Accepted: Decision made, proposal approved for implementation
  • Implemented: RFC's proposal has been built and merged
  • Closed: Discussion complete, no specific implementation required
  • Rejected: Proposal not accepted after review
  • Abandoned: RFC purposefully set aside with no plans to proceed
  • Superseded: Replaced by a newer RFC

3. Naming Convention

Files should follow the pattern: RFC-XXXX-Title-Using-Kebab-Case.md

4. Review Process

  • Authors update the status label as the RFC progresses
  • Reviewers provide feedback via comments or pull requests
  • Discussion continues until consensus or decision is reached
  • Final status reflects the outcome

RFC Categories

Core Language Design

Concurrency & Memory

Module System & Packaging

Standard Library

Development Standards

Tooling & Build System

Quick Reference

Key Language Features

  • Async by default - All functions are implicitly async
  • No exceptions - Errors are values via Result<T, Error>
  • TypeScript-like syntax - Familiar syntax for JS/TS developers
  • Scoped packages only - No relative imports (./, ../)
  • Garbage collected - Automatic memory management
  • Race-free concurrency - Built-in safety guarantees

Reserved Namespaces

  • @raccoon/* - Core language and standard library
  • @scope/* - User-defined scoped packages

File Extensions

  • .rcc - Raccoon source files
  • main.rcc - Entry point for executables
  • project.toml - Monorepo configuration
  • package.toml - Package configuration

Example Code

import { serve, router } from "@raccoon/std/Http"
import { Result, Ok } from "@raccoon/core/result"

function main(): Result<void, Error> {
  const r = router()
    .get("/healthz", _ => json(200, { status: "healthy" }))
    .post("/api/users", handleCreateUser)

  serve(r, { port: 8080 })
  return Ok()
}

function handleCreateUser(req: Request): Result<Response, Error> {
  // Async by default - no await needed
  const body = req.json()
  // Error handling via Result type
  return body.map(data =>
    json(201, { id: generateId(), ...data })
  )
}

Contributing

Proposing Changes

  1. Review existing RFCs to avoid duplication
  2. Create a new RFC using the template
  3. Submit for review via pull request
  4. Participate in discussion and iterate

RFC Numbering

  • 0001-0099: Core language features
  • 0100-0199: Standard library
  • 0200-0299: Tooling and ecosystem
  • 0300-0399: Implementation details
  • 0400+: Community proposals

Resources

  • RFC Template - Starting point for new RFCs
  • Language Website: (Coming Soon)
  • Community Forum: (Coming Soon)
  • Implementation Repository: (Coming Soon)

License

All RFCs in this repository are licensed under [LICENSE] unless otherwise specified.

Maintainers

Raccoon Core Team

For questions or discussions about RFCs, please open an issue in this repository.

About

RFCs for changes

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors