Freestanding programming language
Go to file
Sasha Koshka 2fa3cc1762 Add "internal error" prefix for generator errors 2023-12-05 22:08:06 -05:00
analyzer Fixed several cases where the generator would output invalid IR 2023-12-03 22:23:04 -05:00
cmd/fsplc Add "internal error" prefix for generator errors 2023-12-05 22:08:06 -05:00
design Pass all but one test 2023-11-04 16:34:40 -04:00
entity String literals can be assigned to strings now 2023-12-02 22:45:22 -05:00
generator Slice operations now load the data pointer 2023-12-05 15:35:17 -05:00
integer Add package for determining integer sizes 2023-10-27 16:10:05 -04:00
lexer Fix comments 2023-12-05 22:04:12 -05:00
llvm Fixed several cases where the generator would output invalid IR 2023-12-03 22:23:04 -05:00
parser Ditch brackets around break and return statements 2023-12-01 01:53:33 -05: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!