> For the complete documentation index, see [llms.txt](https://zenofchain.gitbook.io/sway-bian-cheng-yu-yan-geng-xin-zhong-the-sway-programming-languageupdatin/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://zenofchain.gitbook.io/sway-bian-cheng-yu-yan-geng-xin-zhong-the-sway-programming-languageupdatin/10.sway-ying-yong-sway-reference/10.1-bian-yi-qi-nei-bu-han-shu-compiler-intrinsics.md).

# 10.1 编译器内部函数(Compiler Intrinsics)

The Sway compiler supports a list of intrinsics that perform various low level operations that are useful for building libraries. Compiler intrinsics should rarely be used but are preferred over `asm` blocks because they are type-checked and are safer overall. Below is a list of all available compiler intrinsics:

Sway 编译器支持一系列内部函数，这些内部函数执行各种对构建库有用的低级操作。编译器内部函数应该很少使用，但比 `asm` 块更受欢迎，因为它们经过类型检查并且总体上更安全。下面是所有可用的编译器内在函数的列表：

***

`__size_of_val<T>(val: T) -> u64`

**Description:** Return the size of type `T` in bytes.

**Constraints:** None.

**说明：** 返回类型 `T` 的大小（以字节为单位）。

**约束：** 无。

***

`__size_of<T>() -> u64`

**Description:** Return the size of type `T` in bytes.

**Constraints:** None.

**说明：** 返回类型 `T` 的大小（以字节为单位）。

**约束：** 无。

***

`__is_reference_type<T>() -> bool`

**Description:** Returns `true` if `T` is a *reference type* and `false` otherwise.

**Constraints:** None.

**说明：** 如果 T 是 *引用类型* ，则返回 true，否则返回 false。

**约束：** 无。

***

`__eq<T>(lhs: T, rhs: T) -> bool`

**Description:** Returns whether `lhs` and `rhs` are equal.

**Constraints:** `T` is `bool`, `u8`, `u16`, `u32`, `u64`, or `raw_ptr`.

**说明：** 返回 `lhs` 和 `rhs` 是否相等。

**约束：** `T` 是`bool`、`u8`、`u16`、`u32`、`u64` 或 `raw_ptr`。

***

`__gt<T>(lhs: T, rhs: T) -> bool`

**Description:** Returns whether `lhs` is greater than `rhs`.

**Constraints:** `T` is `u8`, `u16`, `u32`, `u64`.

**说明：** 返回 `lhs` 是否大于 `rhs`。

**约束：** `T` 是 `u8`、`u16`、`u32`、`u64`。

***

`__lt<T>(lhs: T, rhs: T) -> bool`

**Description:** Returns whether `lhs` is less than `rhs`.

**Constraints:** `T` is `u8`, `u16`, `u32`, `u64`.

**说明：** 返回 `lhs` 是否小于 `rhs`。

**约束：** `T` 是 `u8`、`u16`、`u32`、`u64`。

***

`__gtf<T>(index: u64, tx_field_id: u64) -> T`

**Description:** Returns transaction field with ID `tx_field_id` at index `index`, if applicable. This is a wrapper around FuelVM's [`gtf` instruction](https://fuellabs.github.io/fuel-specs/master/vm/instruction_set#gtf-get-transaction-fields). The resuting field is cast to `T`.

**Constraints:** None.

**说明：** 返回索引为 `index` 的 ID 为 `tx_field_id` 的交易字段（如果适用）。这是 FuelVM 的 [`gtf` 指令](https://fuellabs.github.io/fuel-specs/master/vm/instruction_set#gtf-get-transaction-fields) 的封装器。结果字段被转换为`T`。

**约束：** 无。

***

`__addr_of<T>(val: T) -> raw_ptr`

**Description:** Returns the address in memory where `val` is stored.

**Constraints:** `T` is a reference type.

**说明：** 返回内存中存储 `val` 的地址。

**约束：** `T` 是引用类型。

***

`__state_load_word(key: b256) -> u64`

**Description:** Reads and returns a single word from storage at key `key`.

**Constraints:** None.

**描述：** 从存储中的键 `key` 读取并返回单个单词。

**约束：** 无。

***

`__state_load_quad(key: b256, ptr: raw_ptr, slots: u64) -> bool`

**Description:** Reads `slots` number of slots (`b256` each) from storage starting at key `key` and stores them in memory starting at address `ptr`. Returns a Boolean describing whether all the storage slots were previously set.

**Constraints:** None.

**描述：** 从键 `key` 开始的存储中读取 `slots` 槽数（每个 `b256`），并将它们存储在从地址 `ptr` 开始的内存中。之后返回一个布尔值，描述是否所有存储槽都已预先设置。

**约束：** 无。

***

`__state_store_word(key: b256, val: u64) -> bool`

**Description:** Stores a single word `val` into storage at key `key`. Returns a Boolean describing whether the store slot was previously set.

**Constraints:** None.

**描述：** 将单个单词 `val` 存储到键 key 处的存储中。返回一个布尔值，描述是否先前设置了存储槽。

**约束：** 无。

***

`__state_store_quad(key: b256, ptr: raw_ptr, slots: u64) -> bool`

**Description:** Stores `slots` number of slots (`b256` each) starting at address `ptr` in memory into storage starting at key `key`. Returns a Boolean describing whether the first storage slot was previously set.

**Constraints:** None.

**描述：** 将内存中从地址 `ptr` 开始的插槽数（每个 `b256`）存储到以键 `key` 开始的存储中。返回一个布尔值，描述第一个存储槽是否已设置。

**约束：** 无。

***

`__log<T>(val: T)`

**Description:** Logs value `val`.

**Constraints:** None.

**说明：** 记录值`val`。

**约束：** 无。

***

`__add<T>(lhs: T, rhs: T) -> T`

**Description:** Adds `lhs` and `rhs` and returns the result.

**Constraints:** `T` is an integer type, i.e. `u8`, `u16`, `u32`, `u64`.

**说明：** 添加 `lhs` 和 `rhs` 并返回结果。

**约束：**`T` 是整数类型，即`u8`、`u16`、`u32`、`u64`。

***

`__sub<T>(lhs: T, rhs: T) -> T`

**Description:** Subtracts `rhs` from `lhs`.

**Constraints:** `T` is an integer type, i.e. `u8`, `u16`, `u32`, `u64`.

**说明：** 从 `lhs` 中减去 `rhs`。

**约束：**`T` 是整数类型，即`u8`、`u16`、`u32`、`u64`。

***

`__mul<T>(lhs: T, rhs: T) -> T`

**Description:** Multiplies `lhs` by `rhs`.

**Constraints:** `T` is an integer type, i.e. `u8`, `u16`, `u32`, `u64`.

**说明：** 将 `lhs` 乘以 `rhs`。

**约束：**`T` 是整数类型，即`u8`、`u16`、`u32`、`u64`。

***

`__div<T>(lhs: T, rhs: T) -> T`

**Description:** Divides `lhs` by `rhs`.

**Constraints:** `T` is an integer type, i.e. `u8`, `u16`, `u32`, `u64`.

**说明：** 将 `lhs` 除以 `rhs`。

**约束：**`T` 是整数类型，即`u8`、`u16`、`u32`、`u64`。

***

`__and<T>(lhs: T, rhs: T) -> T`

**Description:** Bitwise AND `lhs` and `rhs`.

**Constraints:** `T` is an integer type, i.e. `u8`, `u16`, `u32`, `u64`.

**说明：** 按位与 `lhs` 和 `rhs`。

**约束：**`T` 是整数类型，即`u8`、`u16`、`u32`、`u64`。

***

`or<T>(lhs: T, rhs: T) -> T`

**Description:** Bitwise OR `lhs` and `rhs`.

**Constraints:** `T` is an integer type, i.e. `u8`, `u16`, `u32`, `u64`.

**说明：** 按位或 `lhs` 和 `rhs`。

**约束：**`T` 是整数类型，即`u8`、`u16`、`u32`、`u64`。

***

`__xor<T>(lhs: T, rhs: T) -> T`

**Description:** Bitwise XOR `lhs` and `rhs`.

**Constraints:** `T` is an integer type, i.e. `u8`, `u16`, `u32`, `u64`.

**说明：** 按位异或 `lhs` 和 `rhs`。

**约束：**`T` 是整数类型，即`u8`、`u16`、`u32`、`u64`。

***

`__revert(code: u64)`

**Description:** Reverts with error code `code`.

**Constraints:** None.

**说明：** 返回错误代码为 `code`。

**约束：** 无。

***

`__ptr_add(ptr: raw_ptr, offset: u64)`

**Description:** Adds `offset` to the raw value of pointer `ptr`.

**Constraints:** None.

**说明：** 将 `offset` 添加到指针 `ptr` 的原始值。

**约束：** 无。

***

`__ptr_sub(ptr: raw_ptr, offset: u64)`

**Description:** Subtracts `offset` to the raw value of pointer `ptr`.

**Constraints:** None.

**说明：** 将 `offset` 减去指针 `ptr` 的原始值。

**约束：** 无。

***

`__smo<T>(recipient: b256, data: T, output_index: u64, coins: u64)`

**Description:** Sends a message `data` of arbitrary type `T` and `coins` amount of the base asset to address `recipient`. This intrinsic assumes that an OutputMessage is available at index `output_index`.

**Constraints:** None.

**描述：** 发送任意类型的消息`data`和基础资产的`coins`数量到地址`recipient`。此内在假设 OutputMessage 在索引 `output_index` 处可用。

**约束：** 无。
