# Fun ## What is Fun? Fun is a highly strict programming language, but also highly simple. It looks like Python (My favorite language), but there are differences. Influenced by Bash, **[C](https://en.wikipedia.org/wiki/The_C_Programming_Language)**, Go, **[Lua](https://www.lua.org/)**, **[Python](https://www.python.org/)**, and Rust (Most influences came from linked languages). Fun is and will ever be 100% free under the terms of the [Apache-2.0-License](https://opensource.org/license/apache-2-0). ## Idea - Simplicity - Consistency - Joy in coding - Fun! ## Characteristics - Dynamic and optionally statically typed - Type safety - Written in C (C11) and Fun - Internal libs are written with no_camel_case even when written in Fun, except class Names - Only a minimal function set is written in C, and most other core functions and libraries are implemented in Fun ## The Fun Manifesto Fun is a programming language built on a simple idea: Coding should be enjoyable, elegant, and consistent. ### Philosophy - **Fun is Fun**
Programming should spark creativity, not frustration. Code in Fun feels light, playful, and rewarding. - **Fun Uses Nothing**
Minimalism is power. No unnecessary features, no endless syntax variations, no formatting debates. Just clean, uniform code. - **Indentation is Truth**
Two spaces, always. No tabs, no four-space wars. Code should look the same everywhere, from your laptop to /usr/bin/fun. - **One Way to Do It**
No clutter, no 15 ways of writing the same thing. Simplicity means clarity. - **Hackable by Nature**
Fun should be small and embeddable, like Lua. Easy to understand, extend, and tinker with — true to the hacker spirit. - **Beautiful Defaults**
A language that doesn’t need linters, formatters, or style guides. Beauty is built in. ## The Community Fun is not about being the fastest or the most feature-rich. It’s about sharing joy in coding. The community should be: - Respectful - Curious - Creative Like the name says: Fun Unites Nerds. ## The Goal A language that feels like home for developers who: - Love minimal, elegant tools - Believe consistency is freedom - Want to write code that looks good and feels good Fun may not change the world — but it will make programming a little more fun. ## Documentation Actually, there does not exist any documentation. In the [examples/](https://git.xw3.org/fun/fun/src/branch/main/examples) directory should be an example of most Fun features. ## Development This section is a work in progress... Please excuse the lack of more information. There are daily updates here. ### Requirements A C compiler, a libc and [Git](https://git-scm.com/). #### FreeBSD - [CMake](https://cmake.org/) - [Clang](https://clang.llvm.org/) #### Linux - [CMake](https://cmake.org/) - [GCC](https://gcc.gnu.org/) (Clang should work here too, not tested!) #### Windows This requires Cygwin to be installed and configured. I will not cover this here. - [CMake](https://cmake.org/) - [Cygwin](https://cygwin.com/) using [GCC](https://gcc.gnu.org/) ### Rules - Every commit requires a version incremantion in CMakeLists.txt before committing - Every commit message must contain the version at the end in the following format (1.2.3) - Version numbering follows "[Semantic Versioning 2.0.0](https://semver.org/spec/v2.0.0.html)" ### Development systems - [GNU](https://gnu.org/)/[Linux](https://kernel.org/) ([Arch](https://archlinux.org/)/[Artix](https://artixlinux.org/), [Debian](https://www.debian.org/)) using [GCC](https://gcc.gnu.org/) and the [GNU C library](https://www.gnu.org/software/libc/) ([glibc](https://en.wikipedia.org/wiki/Glibc)) - GNU/Linux ([Alpine](https://alpinelinux.org/)) using GCC and the [musl libc](https://musl.libc.org/) - [FreeBSD](https://www.freebsd.org/) using [Clang](https://clang.llvm.org/) and the [BSD libc](https://en.wikipedia.org/wiki/C_standard_library#BSD_libc) - [Windows](https://en.wikipedia.org/wiki/Microsoft_Windows) using [Cygwin](https://www.cygwin.com/) and GCC. ### Other systems - [macOS](https://en.wikipedia.org/wiki/MacOS), [NetBSD](https://netbsd.org/), [OpenBSD](https://www.openbsd.org/), etc. should fully work, but I don't know. I do not use these systems actually. You wanna try and report? ### To Do Everything... ;) No, a lot of stuff works already, but only a tiny set of functionality is available in the Fun programming language. It grows from day to day... ### Build Fun Linux/UNIX only covered here for now. Clone repository: ``` git clone https://git.xw3.org/fun/fun.git ``` Change directory: ``` cd fun ``` Build: ``` make # gmake on FreeBSD ``` That's it! For testing it run: ``` ./build/fun ./demo.fun ``` ## Author Johannes Findeisen - you@hanez.org