---
# System prepended metadata

title: RFC for MAD

---

# RFC for MAD

## 約定術語

`$var` 變數名稱
`$value` 一個值
`$diff` 偏微分變數名稱
`$log` 布林判斷式
`$ops` 運算元
`...` 省略
`d_$var` 變數的偏微分
`d_$ops_$var` 運算元運算對變數的偏微分
$OUT$ 函式輸出值
$VAR$ 不可變變數
$MUT$ 可變變數

## cheats list

`d_add_$var`$=1$
`d_mul_$var`$=另一個數$

## 規範

可變值不保證微分正確性($\frac{\partial OUT}{\partial MUT}$)，但可影響微分，like normal


```rust=
let mut num = 1;
num *= 10;
// d_num = 可能會爆
```

## 編譯實踐

### 變數

`struct` 設計

- 名稱 `string`
- 編號 `usize`


例如:
```rust=
let a = 1;
```

生成

```rust=
struct{
    名稱: "a",
    編號: 0,
}
```

### 函式

`struct` 設計

- 名稱 `string`
- 帶入變數 `[usize]`

例如:
```rust=
let a = f(b, c);
```

生成

```rust=
struct{
    名稱: "f",
    帶入變數: [0 ,1],
}
```

