Fun语言特性总结 - ds
..
作者: 一了 <
[email protected]
> 日期: 2026-06-19 AI 做的语言总结, 联名作者: 一了, ds。
根据 Fun 编程语言手册 [0?L2-L8],其核心语言特性总结如下: ### ?? 语言范式:多范式融合 Fun 被明确定义为一门**简单、结构化、命令式、动态、面向对象、函数式及高级**的编程语言。它融合了多种编程范式: * **命令式与结构化**:支持变量赋值、`if`/`case` 条件判断、`loop`/`while`/`for` 循环等。 * **面向对象**:基于类的单继承和多态。 * **函数式**:支持**一等函数**、高阶函数、匿名函数、闭包和柯里化。 * **动态类型**:变量类型在运行时确定,并支持自动类型转换。 ### ?? 语法风格:博采众长 Fun 的语法设计借鉴了多种成熟语言,旨在清晰易用: * **基础语法**:语句以分号(`;`)结束,注释支持 `#`、`//` 和 `#* ... #` 块注释。 * **控制流**:条件判断(`if..then`)和循环(`while..do`、`for..do`)采用 **Ada 风格**,清晰易读。 * **异常处理**:`try...except...finally` 语法与 **Delphi** 类似。 * **函数式语法**:提供类似 **Lisp** 和 **Javascript** 的函数式编程能力。 ### ?? 核心语言特性 #### 1. 变量与类型系统 * **动态类型**:变量无需声明类型,类型由赋给的值决定。 * **基本数据类型**:包括**数字**(支持十进制、十六进制`0x`、二进制`0b`)、**字符串**(可用 `'`、`"` 或 `` ` `` 引号)、**布尔值**(`true`/`false`)、**时间**(`@` 前缀)和 **null**(`null`/`nil`)。 * **复合类型**:包括**集合/列表**(`[...]`)和**对象/类**等。 * **类型转换**:在运算中通常自动进行,例如数字与字符串的拼接。 * **作用域**:变量通过 `var` 定义,遵循**块级作用域**规则,内部块可以访问外部块的变量。 #### 2. 控制流 * **条件判断**: * `if` 语句:支持 `if...then...elsif...else...end if;`。 * `case` 语句:`case exp is when value do ... else ... end case;`,其中 `@` 是内置变量,代表被判断的表达式。 * **循环**: * **无条件循环**:`loop ... exit when ... end loop;`。 * **条件循环**:`while condition loop ... end loop;`。 * **计数循环**:`for v = e1 to e2 [step e3] loop ... end loop;`。 * **迭代循环**:`for v in expression loop ... end loop;`,可遍历数组或映射,并支持同时获取键和索引。 #### 3. 函数 * **定义与调用**:使用 `fun name(parameters) ... end fun;` 定义,通过 `函数名()` 调用。 * **返回值**:使用 `result` 或 `@` 内置变量,或 `return` 语句返回。 * **参数特性**: * **默认参数**:未传递的参数默认为 `null`。 * **命名参数**:调用时可通过 `参数名: 值` 指定。 * **引用传递**:在参数前加 `var` 可实现引用传递(Call by Reference),允许函数修改外部变量。 * **模块化**:通过 `use` 语句导入其他 Fun 文件,实现代码复用。 * **递归**:函数支持递归调用。 #### 4. 面向对象编程 (OOP) * **类与对象**:使用 `class Name(parameters) ... end class;` 定义类,通过 `Name()` 创建对象。 * **继承**:通过 `class Sub = Base(parameters) ... end class;` 实现**单继承**。 * **多态**:子类可以重写(Override)父类的方法。 * **内置指针**:`this` 指代当前对象,`base` 指代基类。 * **运算符重载**:支持为自定义类型重载 `+ - * / \ % ^ ! = < > & ~ ? |` 等运算符。 * **一切皆对象**:数字、字符串、函数等都可以调用方法,如 `'123'.length()`。 #### 5. 函数式编程特性 * **一等函数**:函数可以赋值给变量。 * **高阶函数**:函数可以接受其他函数作为参数或返回函数。 * **匿名函数**:支持 `fun(parameters){...}` 或 `{...}` 形式的 lambda 表达式。 * **闭包**:函数可以捕获其定义环境中的变量。 * **柯里化**:支持将多参数函数转换为单参数函数链。 * **管道操作符**:使用 `|` 将值传递给下一个函数,如 `1+2|f+3|g`。 #### 6. 集合与列表处理 * **数组与映射**:使用 `[...]` 定义,既可作索引数组,也可作键值对映射(关联数组/字典)。 * **灵活索引**:支持正向索引(从0开始)和负向索引(从-1开始)。 * **成员检查**:使用 `in` 运算符检查元素是否存在。 #### 7. 异常处理 * 使用 `try ... except ... finally ... end try;` 结构。 * 通过 `raise` 抛出任意类型的异常。 * 在 `except` 块中,`@` 内置变量代表捕获到的异常对象。 #### 8. 其他特性 * **垃圾回收**:采用**轻量级引用计数**(Reference Counting)机制。 * **正则表达式**:支持**Perl 兼容**的正则表达式(PCRE)。 * **内置变量**:提供 `@`、`result`、`this`、`base` 等内置变量,在不同上下文中具有特殊含义。 总的来说,**Fun** 是一门设计精巧的多范式语言,它融合了命令式、面向对象和函数式编程的特性,语法清晰且灵活,适合作为脚本语言或用于快速原型开发。