johnynek/bosatsu
{ "createdAt": "2017-10-19T02:48:28Z", "defaultBranch": "main", "description": "A python-ish pure and total functional programming language", "fullName": "johnynek/bosatsu", "homepage": "", "language": "Scala", "name": "bosatsu", "pushedAt": "2025-11-27T02:50:44Z", "stargazersCount": 229, "topics": [ "functional-programming", "language" ], "updatedAt": "2025-11-26T21:45:11Z", "url": "https://github.com/johnynek/bosatsu"}The Bosatsu Programming Language
Section titled “The Bosatsu Programming Language”Bosatsu (菩薩) is the transliteration in Japanese of the sanskrit bodhisattva. A bodhisattva is someone who can reach enlightenment but decides not to, to help others achieve that goal. — Wikipedia
Bosatsu is a simple, non-turing complete language designed for configuration, queries and scripting. It borrows from Python, Haskell, Dhall and Rust.
Please see the documentation site or try basic expressions using this in-browser Bosatsu compiler.
An example of Bosatsu
Section titled “An example of Bosatsu”Here is a working Bosatsu program to solve the first Project Euler problem:
package Euler/One
# see:# https://projecteuler.net/problem=1# Find the sum of all the multiples of 3 or 5 below 1000.
operator == = eq_Intoperator % = mod_Int
def operator ||(x, y): True if x else y
def keep(i): (i % 3 == 0) || (i % 5 == 0)
def sum(as): as.foldl_List(0, add)
# here is the python version:# >>> sum(i for i in xrange(1000) if keep_fn(i))# 233168## bosatsu version herecomputed = sum([i for i in range(1000) if keep(i)])
test = Assertion(computed == 233168, "expected 233168")Contributing
Section titled “Contributing”Please feel free to file an issue to discuss making a change to Bosatsu or to ask a question about how Bosatsu might be useful for a use-case that is interesting to you.
Development notes:
Section titled “Development notes:”Bosatsu is developed in Scala. We use sbt as the build system. To build
bosatsu, run sbt cli/assembly and then the script ./bosatsuj should print
help (see the documentation link above for more help). sbt test should run
all the tests.
How to run the benchmarks
Section titled “How to run the benchmarks”At the sbt prompt:
bench/jmh:run -i 3 -wi 3 -f1 -t1or for a specific benchmark
bench/jmh:run -i 3 -wi 3 -f1 -t1 .*SomeBench.*