/bon

Bon is a programming language designed with simplicity, performance, and safety in mind.

Primary LanguageC++MIT LicenseMIT

Introduction

Bon is a programming language designed around simplicity, performance, and safety. If you just want a quick tour of the language, you can start here.

Simplicity

In all aspects of its design, Bon aims to be succinct, yet readable.

Code written in Bon will look familiar to Python users:

def fib(x):
    if x < 2:
        x
    else:
        fib(x-1) + fib(x-2)

print("Hello, World!")
print(fib(15) == 610)

However, the semantics are very different. It has a static type system with type inference (based on hindley-milner), similar to languages such as Ocaml, Haskell, and Rust.

It allows you to write code that feels similar to object oriented programming languages, while using typeclasses instead of inheritance for polymorphism:

typeclass Shape(T):
    def area(self: T) -> float

class Circle(Shape):
    Circle(radius: float)

    def area(self: Circle) -> float:
        pi = 4.0 * atan(1.0)
        return pi * self.radius ** 2.0

class Rectangle(Shape):
    Rectangle(width: float, height: float)

    def area(self: Rectangle) -> float:
        return self.width * self.height

# this can take instances of any type implementing the "Shape" typeclass
def print_area(shape):
    print(shape.area())

def main():
    circle = Circle(10.0)
    print_area(circle)

    rectangle = Rectangle(12.8, 0.25)
    print_area(rectangle)

main()

Performance

Bon uses LLVM to generate efficient machine code, either JIT compiled, or pre-compiled to a binary.

This, along with zero-cost automatic memory mangement, keeps Bon in same performance ballpark as C++. For specific examples, see the benchmarks.

Safety

Performance doesn't have to come at the expense of safety, and safety doesn't have to come at the expense of simplicity. Bon has a powerful static type system which allows for simplifying code with type inference and pattern matching.

Learn more in Bon's documentation.

Current state

Bon is still very much in the prototype phase, and will likely have substantial changes over time.

Why another programming language?

Bon is being designed as a programming language built around all of the things that make me enjoy programming, and it's dedicated to the memory of my mother. Her name was Bonnie, but everyone called her Bon, so that is where the name comes from. More information is available on my Patreon page at https://www.patreon.com/d_p_gonz.