Skip to content

The Arbor Programming Language

Yoseph Radding edited this page Jan 1, 2019 · 4 revisions

The Arbor programming language is meant to be a web-first language inspire in part by Golang, Python, Elixir, and TypeScript. Arbor's primary motivation is to target WebAssembly and provide machinations for building great web first services. At current, it is really just a play thing to play around with concepts.

Ideas

Paradigm

The style of Arbor is meant to be functional. Every feature of Arbor should not have side effects, and every function should return the same value based on the same input.

Typing

Arbor aims to be a strongly typed, but flexible language. The type system is based largely off of typescript, where you basically define type guards. However, unlike typescript, there is no any type. Typing in Arbor is primarily for communication between developers, and also, I don't want to worry about type checking at runtime because I am lazy 🤷.

Assignment

One weird experiment I would like to try with Arbor is that everything is a value. Instead of defining things like functions and structs with specialized keywords (ie struct Foo {. . . } or function Bar(a, b, c) {...}) you define these special constructs like so: const Foo = struct{. . .} or const Bar = (a, b, c) -> {. . .}. The idea is to keep Arbor's syntax easy to use and to emphasize that Arbor's constructs are not much different from any other value. The idea is that we can pass a struct around like any other value.

JSX

Another thing that I would like to add is JSX directly to the language (all though I suppose it wouldn't be called JSX then, would it). I really would like Arbor to basically be able to write websites, and JSX is phenomenal for writing modern web pages.

Spacing

I don't care. Fight about it amongst yourselves. Just use semicolons.

Status

Arbor is still getting worked on. Currently, the syntax is still getting worked on. Here is the status of Arbor:

  • Lexer - Lex main tokens (numbers, strings, words, etc. . .)
  • Lexer - Lex reserved keywords
  • Parser - Parse main expression like imports and what not
  • Parser - Come up with and implement a way to denote JSX in a simple way
  • Parser - Parse Pattern matching syntax
  • Compiler - Compile Main expressions
  • Compiler - Compile Pattern Matching
  • Compiler - Compile JSX
  • Compiler - Get all functions in a file
  • Compiler - Analyze immported files (potentially compiling them

Clone this wiki locally