Skip to content

dfirebaugh/punch

Repository files navigation

PUNCH 🥊

punch is a hobby programming language.

I'm mainly working on this as a learning experience.

demo playground

I have some aspirations of working on a backend for this. To work out some issues with the AST, I added a js code generation step (to easily produce runnable code). I'm not sure if i'll fully commit to that.

Build

To build you will need golang installed.

To run code locally, you will need node or bun installed in your PATH.

go build ./cmd/punch/

./punch ./examples/simple.pun # output: Hello, World!

Functions

// function declaration
bool is_best(i32 a, i32 b)

// simple function
i8 add(i32 a, i32 b) {
    return a + b
}

// exported function
pub i32 add_two(i32 a, i32 b) {
    return a + b
}

// multiple return types
(i32, bool) add_eq(i32 a, i32 b) {
    return a + b, a == b
}

// no return
fn main() {
    println("hello world")
}

Conditions

if a && b {
    println("abc")
}

Assignment

i32 c    = 42
i64 d    = 42
u32 g    = 42
u64 h    = 42
f32 k    = 42.0
f64 l    = 42.0
bool m   = true
str n    = "hello"

Structs

struct message {
    i8  sender
    i8 	recipient
    str body
}
message msg = {
    sender: 5,
    recipient: 10,
    body: "hello"
}

println(msg.sender, msg.recipient, msg.body)

Loops

// traditional for loop
for i := 0; i < 10 ; i = i + 1 {

}

// loop while true
for true {

}

// loop forever
for {

}

Simple Program

pkg main

import (
    "fmt"
)

fn main() {
    fmt.Println("hello, world!")
}

Status

work in progress

Feature ast wasm js
function declaration
function calls
function multiple returns
if/else
strings
integers
floats
structs
struct access
loops
lists
maps
pointers
enums
modules
type inference
interfaces

Reference

About

a programming language

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published