Fun 编程语言

Fun 语言小巧而强大:从日常胶水代码到内联机器码。

Fun 语言是结构化的动态语言,支持面向对象与函数式编程、GC 与 PCRE。

2010 年由 张卫东(Wisdom ZHANG) 设计并实现,用于复用 Pascal 资源,十几年来一直在实际项目中使用。其前身是 Nuva(2006), 更早还有 TemplateScript(2005)。写就的商业软件行销全球 130 多个国家, 客户包括微软、英特尔、IBM,以及五星级酒店和米其林、黑珍珠餐厅。

是哪个 "Fun"?—— 官方来源。

Fun 由张卫东(Wisdom ZHANG)自 2010 年起设计并实现。官网是 funlang.org, 源码在 github.com/funlang。其他叫 "fun"/"FUN" 的项目与本语言无关;转载文章以本站版本为准。详见 是哪个 Fun?官方来源。

快速尝鲜

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

// 输出:Hello, fun!
say();

// lambda 匿名函数
var f = a -> a * 2;

// 输出:42
?. f(21);

为什么选择 Fun

语法简洁清晰

源于 Ada,微调以更加易读易写易修改。

动态语言

类型动态,代码也能动态生成。

基于类的面向对象

以类为核心的单继承面向对象编程。

一等函数

函数式风格接近 Lisp 与 JavaScript。

轻量垃圾回收

简单轻量的引用计数垃圾回收器。

Perl 兼容正则

正则表达式兼容 Perl 的语法与行为。

统一的数据结构

数组、关联数组、哈希表、字典、映射一体。

JIT 即时编译

内联 C 与汇编,支持双向调用,原生性能。

单文件运行

运行时只有一个可执行文件,无外部依赖。

想详细了解这门语言,请阅读 功能详解。

快速上手

Windows 下载,解压后运行一次 fun-install.bat, 然后双击任意 .fun 脚本。

下载

Fun 运行时库 9.4(含 IDE)

运行时本身(fun.exe)仅约 350 KB;zip 中还包含 IDE 与 40 余个示例。

下载 fun.zip(约 1.1 MB)

Linux & macOS 从源码构建运行时;界面用 HTML、CSS、JavaScript 编写。

开源仓库

Fun 主项目 + fun-ui

主项目含 Linux 与 macOS 原生构建脚本;fun-ui 以 MIT 开源,提供浏览器界面层,Windows、Linux、macOS 均可用。

代码示例

管道操作 & 函数组合

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

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

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

面向对象与自定义运算符

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

var $ = Number(2);

// 调用自定义运算符 #
?. $ .# 3;

// 通过索引访问方法并调用
?. $[1](3);

即时编译(JIT)与底层交互

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';

资源