Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions devel/215_1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# [215_1] (srfi srfi-143) 模块实现

## 任务相关的代码文件
+ goldfish/srfi/srfi-143.scm
+ tests/goldfish/liii/fixnums-test.scm

## 如何测试

```shell
xmake f -vyD
xmake b goldfish
bin/goldfish -m r7rs tests/goldfish/liii/fixnums-test.scm
```

## 2026/02/25 (srfi srfi-143) 模块实现

### What

1. 新增 `goldfish/srfi/srfi-143.scm`,实现 SRFI-143 Fixnums 模块并按规范分组导出接口。

2. 实现 fixnum 常量 `fx-width` / `fx-greatest` / `fx-least`,基于 `*s7*` 的 `most-positive-fixnum` / `most-negative-fixnum` 推导位宽与范围。

3. 实现谓词与比较函数:`fixnum?`、`fx=?`、`fx<?`、`fx>?`、`fx<=?`、`fx>=?`、`fxzero?`、`fxpositive?`、`fxnegative?`、`fxodd?`、`fxeven?`、`fxmax`、`fxmin`。

4. 实现基础算术:`fx+`、`fx-`、`fxneg`、`fx*`、`fxquotient`、`fxremainder`、`fxabs`、`fxsquare`、`fxsqrt`,并在结果超出 fixnum 范围时抛出 `out-of-range`。

5. 实现带进位运算:`fx+/carry`、`fx-/carry`、`fx*/carry`,使用符号溢出检测返回 carry(-1/0/1)。

6. 实现位运算与位域:`fxnot`、`fxand`、`fxior`、`fxxor`、`fxarithmetic-shift`、`fxarithmetic-shift-left`、`fxarithmetic-shift-right`、`fxbit-count`、`fxlength`、`fxif`、`fxbit-set?`、`fxcopy-bit`、`fxfirst-set-bit`、`fxbit-field`、`fxbit-field-rotate`、`fxbit-field-reverse`。

7. 增加辅助函数:`fx-assert`、`fx-ensure`、`fx-check-index`、`fx-check-range`、`fx-safe-ash`,统一类型检查、范围校验与大位移分段处理;`fxbit-set?` / `fxcopy-bit` 对最高位做特判。


### Why

提供标准化的 fixnum 运算接口,确保与 SRFI-143 兼容,并对溢出与边界行为进行统一约束。

### How

基于 SRFI-151 的位运算实现,结合 S7 提供的 fixnum 上下界完成范围推导与校验,通过辅助函数集中处理类型与边界问题,并以测试驱动补齐行为与边界场景。
Loading