# TSL 高级特性

> 本文档是 `$tsl-guide` 的子文档，覆盖模块/对象/扩展语法与新一代特性。
> 详细规则以 `docs/tsl/syntax_book/` 为准。

## 目录

- [Unit/命名空间/函数文件](#unit命名空间函数文件)
- [Class/Object 模型](#classobject-模型)
- [扩展语法：矩阵/集合/过滤](#扩展语法矩阵集合过滤)
- [TS-SQL（select/insert/update/delete）](#ts-sqlselectinsertupdatedelete)
- [运行时与性能语法要点](#运行时与性能语法要点)
- [新一代语法概览](#新一代语法概览)

---

## Unit/命名空间/函数文件

### Unit 基本结构

```tsl
Unit Demo_Unit;

interface

var Ua,Ub;
const CS = 888;

function AddV();

implementation

var Uc;

function AddV();
begin
  Ua += 10;
  Uc += 1;
end;

initialization
  Ua := 100;
  Ub := "Tinysoft Unit";
  Uc := 1;

finalization
  echo "Demo_Unit End.";

end.
```

### uses 与调用优先级

```tsl
uses Demo_Unit;

// 直接调用（按 uses 优先级解析）
AddV();

// 指定单元调用
Unit(Demo_Unit).AddV();
CALL("Demo_Unit.AddV");
```

### 函数文件（TSF）与命名空间

- `.tsf` 文件可存放 function/class/unit（函数库目录 `funcext`）
- 命名空间：

```tsl
NameSpace "ProjectA";

SomeFunction();
```

如需固定命名空间，可在 `tsl.Conf` 配置 `Namespace=...`（详见 `04_modules_and_namespace.md`）。

---

## Class/Object 模型

### 类定义与继承

```tsl
Type Base = Class
  function Speak(); virtual;
end;

Type Child = Class(Base)
  function Speak(); override;
end;
```

### 构造函数与析构函数

```tsl
Type User = Class
  user_id;
  user_name;

  function Create(id,name); overload;
  Begin
    user_id := id;
    user_name := name;
  End;

  function Destroy();
  Begin
    // 清理资源
  End;
end;
```

### 属性（Property）

```tsl
Type Account = Class
  _id;
  function getId();
  function setId(v);
  property Id read _id write setId;
end;
```

### 创建对象

```tsl
Obj := CreateObject("User", 1, "Alice");
Obj2 := New User(2, "Bob");
```

更多：`Self`、`FindClass`、`ClassInfo`、`operator` 重载等见 `05_object_model.md`。

---

## 扩展语法：矩阵/集合/过滤

### 矩阵初始化与访问

```tsl
M1 := zeros(10);           // 一维数组
M2 := zeros(10,10);        // 二维矩阵
M3 := rand(5,3);           // 随机矩阵
M4 := eye(3);              // 单位矩阵
Seq := 1->10;              // 数列数组
```

```tsl
// 子矩阵与索引
Rows := MRows(M2,1);
Cols := MCols(M2,1);
Sub := M2[array(1,3), array(0,2)];
Col0 := M2[:,0];
```

### 矩阵查找

```tsl
A := Rand(10,10);
B := MFind(A, MCell>0.9);
```

### 集合运算

```tsl
A := array((1,2),(3,4));
B := array((1,2),(5,6));
C := A Union2 B;
D := A Intersect B;
E := A Minus B;
```

### 结果集过滤

```tsl
R1 := FilterIn(R, CodeArr, "Code");
Idx := FilterNotIn(R, CodeArr, "Code", false);
Sub := R[Idx, array("Code","V1")];
```

更多细节见 `06_extended_syntax.md`。

---

## TS-SQL（select/insert/update/delete）

```tsl
T := zeros(10, array("A","B"));
T[:,"A"] := 1->10;

V1 := select ["A"] from T end;
V2 := sselect ["A"] from T end;
V3 := vselect sumof(["A"]) from T end;
V4 := mselect * from T end;

update T set ["A"] = 100 where ["B"] = 4 end;
delete from T where ["A"] = 0 end;
insert into T insertfields(["A"],["B"]) values(1,2);
```

TS-SQL 语法细节与高级用法见 `06_extended_syntax.md`。

---

## 运行时与性能语法要点

### 网格计算操作符 `#`

```tsl
R[i] := #CalcStock(B[i]) with array(pn_stock():B[i]) timeout 3000;
```

### 全局缓存

详见 `07_debug_and_profiler.md` 中的全局缓存管理与相关函数。

---

## 新一代语法概览

### 复数

```tsl
Z := 4+3j;
Z2 := complex(4,3);
```

### WeakRef 与算符重载

新一代语言支持 WeakRef 与对象算符重载，详见 `08_new_generation.md` 与 `05_object_model.md`。
