FUN - Fun Programming Language

FUN is a simple, structured, imperative, dynamic, object-oriented, functional and high-level programming language with JIT compilation, garbage collection and Perl-compatible regular expressions. Wisdom ZHANG built it in 2010 as a scripting language to reuse Pascal resources. FUN grew out of the Nuva language (2006), which in turn evolved from TemplateScript (2005). FUN has run in production for years. Its language lineage underpins commercial software used by customers in more than 130 countries, including Fortune 500 companies such as Microsoft, Intel and IBM, as well as high-end hotels and Michelin- and Black Pearl-rated restaurants.

Which "FUN"? Official sources.

The FUN described here is the production language by 张卫东 (Wisdom ZHANG) since 2010. Its official home is funlang.org, with source code in the GitHub organization github.com/funlang. Other projects that share the name "fun"/"FUN" are unrelated. Articles about this language may also appear on other platforms; the funlang.org version is the reference. See Which FUN? — official sources.

A quick taste

hello.fun
fun say()
  ?. 'Hello, fun!';
end fun;

// prints: Hello, fun!
say();

// lambda / anonymous function
var f = a -> a * 2;

// prints: 42
?. f(21);

Why FUN

Simple, clear syntax

Borrowed from Ada and adapted for easy typing and reading.

Dynamic typing

Automatic type conversions when they are needed.

Class-based OOP

Object-oriented programming built around classes.

First-class functions

Functional style reminiscent of Lisp and JavaScript.

Lightweight GC

A simple, lightweight reference-counting garbage collector.

Perl-compatible regex

Perl-compatible syntax and behavior for real text work.

Powerful list processing

Arrays, associative arrays, hash tables, dictionaries, or mappings, all in one.

JIT compilation

Inline assembly and C interop for high-performance computing.

Tiny footprint

The parser and runtime fit in a single fun.exe of only about 300 KB, with no external dependencies.

For a detailed tour of the language, read the feature highlights.

Quick start

Windows Download, unzip, run fun-install.bat once, then double-click any .fun script.

Download

FUN runtime library 9.0 (contains the IDE)

The runtime itself (fun.exe) is only about 300 KB; the zip adds the IDE and 40+ demos.

Download fun.zip (~1.1 MB)

Linux, macOS Build from source on GitHub.

Features in code

Pipeline & function composition

pipeline.fun
var f = a -> a * 2;
var g = a -> a + 3;

// prints: 12
?. g(f(1+2)+3);

// prints: 12
?. 1+2|f+3|g;

Object-oriented programming & custom operators

number.fun
class Number(me)
  this['#'] = you -> (me + you) * me * you;
end class;

var $ = Number(2);

// custom operator #
?. $ .# 3;

// method access via index
?. $[1](3);

JIT compilation & low-level interaction

jit.fun
use 'lib-jit.fun';

var ii = 0;
fun cb(a, b)
  ii = a * 2^32 + b;
  ?, 'cb'; ?. ii;
  result = ii;
end fun;

var s = `#!asm i:i
    mov ecx, dword ptr [esp+04]
    @sum1ton
    push eax
    push edx
    mov  eax, <test>
    call eax
`;

var jit = NewJit(s, names: [test: cb.@toCallback(nil, 'ii:i', true)]);
?. jit.Run(100000000);
jit.Delete();
?. 'Ok';

Resources