Freestanding programming language
Go to file
Sasha Koshka 8ce12613e2 Add custom LLVM code generation package 2023-11-22 20:37:16 -05:00
analyzer Slight modifications to analyzer 2023-11-21 15:04:01 -05:00
cmd/fsplc Add CLI stub 2023-11-16 22:40:57 -05:00
design Pass all but one test 2023-11-04 16:34:40 -04:00
entity Slight modifications to analyzer 2023-11-21 15:04:01 -05:00
generator Generator WIP 2023-11-21 15:04:22 -05:00
integer Add package for determining integer sizes 2023-10-27 16:10:05 -04:00
lexer Star is now a separate token 2023-10-18 01:14:17 -04:00
llvm Add custom LLVM code generation package 2023-11-22 20:37:16 -05:00
parser Can now assign array directly to slice 2023-10-31 01:46:18 -04:00
README.md Add readme 2023-10-07 01:55:33 -04:00
go.mod Generator stub 2023-11-14 02:49:55 -05:00
go.sum Generator stub 2023-11-14 02:49:55 -05:00

README.md

FSPL

Freestanding programming language: a high-ish-level language that has absolutely no need for any runtime support, designed to work well in scenarios where dragging along a language runtime is either not possible or simply not wanted.

This language is designed for:

  • Operating system development
  • Embedded software
  • People who think modern languages are bloated and dislike them on principle

This is really another go at the ARF programming language. FSPL is a working title because the ARF acronym did not make any sense but I can't think of a better name. I am now working on this as a senior project so I am obligated to not abandon it and start over again.

Design Principles

  • Abstractions must happen at compile time unless absolutely necessary
  • Compiler must not generate any functions that the user does not write
  • Compiler must avoid generating logic that the user does not write

Roadmap

Late 2023

  • Top-level entities
    • Type definitions
      • Methods
    • Defined and external functions
  • Type system
    • Strict, static, bottom-up type inference
    • Pointers
    • Arrays
    • Slices
    • Structs
    • Interfaces
  • Expressions and control structures
    • Literals adapt to types via bottom-up type inference
    • Assignment
    • Variable declaration
    • Variable access
    • Function calls
    • Method calls
    • Interface behavior calls
    • Operations
    • Casting
    • Blocks
    • If/else
    • Loops

Early 2024

  • Union types (carry type information)
  • Match statements
  • Modules
  • Vararg
  • Lightweight, modularized (and of course, totally optional) standard library
  • Conditional compilation
  • Constants
  • For loops
  • Range loops

Afterwards

  • Generics?
  • Ownership system?
  • And more!