Skip to content
This repository was archived by the owner on Aug 18, 2025. It is now read-only.

Commit c7590e3

Browse files
committed
新增CodeNothing泛型系统实现文档,详细描述了泛型的功能、语法支持、解析器实现及当前限制与未来改进,增强了文档的完整性和可读性。
1 parent cbe1e5e commit c7590e3

File tree

1 file changed

+216
-0
lines changed

1 file changed

+216
-0
lines changed

GENERICS_IMPLEMENTATION.md

Lines changed: 216 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,216 @@
1+
# CodeNothing 泛型
2+
3+
## 概述
4+
5+
本文档描述了 CodeNothing 编程语言中泛型系统的实现。泛型系统允许编写可重用的代码,支持类型参数化的函数、类、枚举和接口。
6+
7+
## CodeNothing 现有的类型系统
8+
9+
CodeNothing 已经具备了强大的类型系统,包括:
10+
11+
### 现有的变量声明语法
12+
- **显式类型声明**`name: type = value`
13+
- **自动类型推断**`name: auto = value`
14+
15+
### 示例
16+
```codenothing
17+
// 显式类型声明
18+
x: int = 42;
19+
y: float = 3.14;
20+
z: string = "Hello";
21+
22+
// 自动类型推断
23+
a: auto = 100; // 推断为 int
24+
b: auto = 2.71; // 推断为 float
25+
c: auto = "World"; // 推断为 string
26+
```
27+
28+
## 已实现的功能
29+
30+
### 1. AST 扩展
31+
32+
#### 泛型参数 (GenericParameter)
33+
```rust
34+
pub struct GenericParameter {
35+
pub name: String, // 类型参数名 (如 T, U, K)
36+
pub constraints: Vec<TypeConstraint>, // 类型约束
37+
pub default_type: Option<Type>, // 默认类型
38+
}
39+
```
40+
41+
#### 类型约束 (TypeConstraint)
42+
```rust
43+
pub enum TypeConstraint {
44+
Trait(String), // trait 约束
45+
Sized, // Sized 约束
46+
Copy, // Copy 约束
47+
Send, // Send 约束
48+
Sync, // Sync 约束
49+
}
50+
```
51+
52+
#### 泛型类型 (Type 扩展)
53+
```rust
54+
pub enum Type {
55+
// ... 现有类型 ...
56+
Generic(String), // 泛型类型参数 T
57+
GenericClass(String, Vec<Type>), // 泛型类 Container<T>
58+
GenericEnum(String, Vec<Type>), // 泛型枚举 Option<T>
59+
}
60+
```
61+
62+
#### 泛型表达式 (Expression 扩展)
63+
```rust
64+
pub enum Expression {
65+
// ... 现有表达式 ...
66+
GenericFunctionCall(String, Vec<Type>, Vec<Expression>), // 泛型函数调用
67+
GenericMethodCall(Box<Expression>, String, Vec<Type>, Vec<Expression>), // 泛型方法调用
68+
GenericObjectCreation(String, Vec<Type>, Vec<Expression>), // 泛型对象创建
69+
TypeCast(Box<Expression>, Type), // 类型转换
70+
TypeOf(Box<Expression>), // 类型查询
71+
}
72+
```
73+
74+
### 2. 语法支持
75+
76+
#### 泛型函数
77+
```codenothing
78+
fn max<T>(a: T, b: T) : T {
79+
if (a > b) {
80+
return a;
81+
} else {
82+
return b;
83+
};
84+
};
85+
```
86+
87+
#### 泛型类
88+
```codenothing
89+
class Container<T> {
90+
private T value;
91+
92+
constructor<T>(T initial_value) {
93+
this.value = initial_value;
94+
};
95+
96+
fn get<T>() : T {
97+
return this.value;
98+
};
99+
100+
fn set<T>(T new_value) : void {
101+
this.value = new_value;
102+
};
103+
};
104+
```
105+
106+
#### 泛型枚举
107+
```codenothing
108+
enum Option<T> {
109+
Some(T value),
110+
None
111+
};
112+
```
113+
114+
#### 泛型接口
115+
```codenothing
116+
interface Comparable<T> {
117+
fn compare(T other) : int;
118+
};
119+
```
120+
121+
#### 带约束的泛型
122+
```codenothing
123+
fn sort<T: Comparable<T>>(array<T> items) : array<T> where T: Copy {
124+
// 排序实现
125+
return items;
126+
};
127+
```
128+
129+
### 3. 解析器实现
130+
131+
#### 泛型解析器 (generic_parser.rs)
132+
- `parse_generic_parameters()` - 解析泛型参数列表 `<T, U, K>`
133+
- `parse_generic_parameter()` - 解析单个泛型参数
134+
- `parse_type_constraints()` - 解析类型约束
135+
- `parse_where_clause()` - 解析 where 子句
136+
- `parse_generic_type_arguments()` - 解析泛型类型实例化
137+
- `parse_generic_function_call()` - 解析泛型函数调用
138+
- `parse_generic_object_creation()` - 解析泛型对象创建
139+
140+
#### 集成到现有解析器
141+
- 函数解析器支持泛型参数和 where 子句
142+
- 类解析器支持泛型类和泛型方法
143+
- 枚举解析器支持泛型枚举
144+
- 接口解析器支持泛型接口
145+
- 表达式解析器支持泛型函数调用和对象创建
146+
147+
### 4. 类型系统扩展
148+
149+
#### 类型推断
150+
- 支持 `name: auto = value` 变量声明的类型推断
151+
- 使用 `Type::Auto` 进行自动类型推断
152+
153+
#### 类型检查
154+
- 泛型类型参数的验证
155+
- 类型约束的检查
156+
- where 子句的验证
157+
158+
### 5. 运行时支持
159+
160+
#### 表达式求值器扩展
161+
- `GenericFunctionCall` - 泛型函数调用求值
162+
- `GenericMethodCall` - 泛型方法调用求值
163+
- `GenericObjectCreation` - 泛型对象创建求值
164+
- `TypeCast` - 类型转换求值
165+
- `TypeOf` - 类型查询求值
166+
167+
## 使用示例
168+
169+
### 基本泛型函数
170+
```codenothing
171+
fn identity<T>(value: T) : T {
172+
return value;
173+
};
174+
175+
fn main() : void {
176+
int_result: auto = identity<int>(42);
177+
string_result: auto = identity<string>("Hello");
178+
};
179+
```
180+
181+
### 泛型类使用
182+
```codenothing
183+
fn main() : void {
184+
int_container: auto = new Container<int>(42);
185+
string_container: auto = new Container<string>("Hello");
186+
187+
value: auto = int_container.get<int>();
188+
int_container.set<int>(100);
189+
};
190+
```
191+
192+
### 类型转换和查询
193+
```codenothing
194+
fn main() : void {
195+
x: auto = 42;
196+
y: auto = x as float;
197+
type_info: auto = typeof(x);
198+
};
199+
```
200+
201+
## 当前限制
202+
203+
1. **类型擦除**: 当前实现在运行时忽略类型参数,主要用于编译时检查
204+
2. **约束检查**: 类型约束的运行时检查尚未完全实现
205+
3. **类型推断**: 复杂的类型推断场景可能不完全支持
206+
4. **性能优化**: 泛型代码的性能优化尚未实现
207+
208+
## 未来改进
209+
210+
1. **完整的类型检查**: 实现完整的泛型类型检查和约束验证
211+
2. **类型推断增强**: 改进类型推断算法
212+
3. **运行时类型信息**: 添加运行时类型信息支持
213+
4. **性能优化**: 实现泛型代码的单态化优化
214+
5. **更多约束类型**: 添加更多内置约束类型
215+
6. **高阶类型**: 支持高阶类型和类型构造器
216+

0 commit comments

Comments
 (0)