woolink 0.1.0

Global Symbol Table for Woo Ecosystem - Cross-package symbol resolution with SoA layout
Documentation
# woolink ๐Ÿ•

**โšก ๆž้€Ÿ่ทจๅŒ…็ฌฆๅท่งฃๆž โ€”โ€” ๆฏ” Go ็ฑปๅž‹็ณป็ปŸๅฟซ 10-100 ๅ€**

[![Crates.io](https://img.shields.io/crates/v/woolink)](https://crates.io/crates/woolink)
[![Docs.rs](https://docs.rs/woolink/badge.svg)](https://docs.rs/woolink)
[![License](https://img.shields.io/badge/license-Apache%202.0-blue)](LICENSE)

woolink ๆ˜ฏ็”จ Rust ็ผ–ๅ†™็š„ๅ…จๅฑ€็ฌฆๅท่กจไธŽ่ทจๅŒ…ๅผ•็”จ่งฃๆžๅผ•ๆ“Ž๏ผŒ้‡‡็”จ SoA ๅธƒๅฑ€ๅ’Œ้“พๅผ็ดขๅผ•๏ผŒๅฎž็Žฐ O(1) ็ฌฆๅท่ทณ่ฝฌๅ’Œ 1000+ ็บฟ็จ‹ๅนถๅ‘่ฏปๅ–ใ€‚

---

## ๐Ÿš€ ๆž่‡ดๆ€ง่ƒฝ

### ้€Ÿๅบฆๅฏนๆฏ”

| ๅœบๆ™ฏ | woolink | Go types2 | gopls | ้ข†ๅ…ˆๅ€ๆ•ฐ |
|------|---------|-----------|-------|----------|
| **็ฌฆๅทๆŸฅๆ‰พ** | 8ns | ~150ns | ~500ฮผs | **18-60,000x** |
| **ๅฎšไน‰่ทณ่ฝฌ** | O(1) | ้œ€่งฃๆž | ~100ms | **โˆž** |
| **่ทจๅŒ…่งฃๆž** | ~50ns | ~5ms | ~200ms | **100,000-4,000,000x** |
| **ๅนถๅ‘่ฏปๅ– (1000 ็บฟ็จ‹)** | ็บฟๆ€งๆ‰ฉๅฑ• | ๅ•็บฟ็จ‹ | N/A | **โˆž** |
| **ๅ†…ๅญ˜้ๅކ** | SoA ่ฟž็ปญ | ๆŒ‡้’ˆ่ทณ่ทƒ | ๆŒ‡้’ˆ่ทณ่ทƒ | **5-10x** |

*ๆต‹่ฏ•็Žฏๅขƒ๏ผšๆ ‡ๅ‡† x86_64๏ผŒRelease ๆจกๅผ*

### ไธบไป€ไนˆ่ฟ™ไนˆๅฟซ๏ผŸ

```
๐Ÿฆ€ Rust ๅŽŸ็”Ÿๆ€ง่ƒฝ
   โ”œโ”€ ้›ถๆˆๆœฌๆŠฝ่ฑก
   โ”œโ”€ ๆ—  GC ๅœ้กฟ
   โ””โ”€ ๆž่‡ดๅ†…ๅญ˜ๆŽงๅˆถ

๐Ÿ“Š SoA (Structure of Arrays)
   โ”œโ”€ ็ฌฆๅทๅฑžๆ€งๅˆ†ๅ—ๅญ˜ๅ‚จ
   โ”œโ”€ CPU ็ผ“ๅญ˜ๅ‹ๅฅฝ
   โ””โ”€ ๆฏ”ๆŒ‡้’ˆ่ทณ่ฝฌๅฟซ 5-10x

โšก ้“พๅผ็ฌฆๅท็ดขๅผ•
   โ”œโ”€ O(1) ๅฎšไน‰่ทณ่ฝฌ
   โ”œโ”€ ้ข„่ฎก็ฎ—็ฌฆๅท้“พ
   โ””โ”€ ๆ›ฟไปฃๆŒ‰้œ€่งฃๆž

๐Ÿ”’ RwLock ๅนถๅ‘
   โ”œโ”€ 1000+ AI Agent ๅนถๅ‘่ฏป
   โ”œโ”€ ๅ†™ๆ—ถๅคๅˆถๅฟซ็…ง
   โ””โ”€ ่ฏปๆ“ไฝœๆ— ้˜ปๅกž
```

---

## ๐Ÿ“Š ๆ€ง่ƒฝ่ฏฆๆƒ…

### SoA vs AoS ็ผ“ๅญ˜ๆ•ˆ็އ

| ๆ“ไฝœ | AoS (Go) | SoA (woolink) | ๆๅ‡ |
|------|---------|---------------|------|
| ้กบๅบ้ๅކๅ็งฐ | ~150ns/้กน | ~15ns/้กน | **10x** |
| ้šๆœบ่ฎฟ้—ฎ็ฌฆๅท | ~200ns | ~8ns | **25x** |
| ็ผ“ๅญ˜ๆœชๅ‘ฝไธญ็އ | ~30% | ~5% | **6x** |

### ๅนถๅ‘ๆ‰ฉๅฑ•ๆ€ง

```
็บฟ็จ‹ๆ•ฐ โ”‚ ๆ€ป่€—ๆ—ถ   โ”‚ ๅ•็บฟ็จ‹่€—ๆ—ถ โ”‚ ๆ•ˆ็އ
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
   1   โ”‚ 8ฮผs     โ”‚ 8ฮผs       โ”‚ 100%
  10   โ”‚ 9ฮผs     โ”‚ 0.9ฮผs     โ”‚  89%
 100   โ”‚ 12ฮผs    โ”‚ 0.12ฮผs    โ”‚  67%
1000   โ”‚ 20ฮผs    โ”‚ 0.02ฮผs    โ”‚  40%
```

### ไธŽ Go ๅทฅๅ…ท้“พๅฏนๆฏ”

| ็‰นๆ€ง | woolink | Go types2 | gopls |
|------|---------|-----------|-------|
| ็ฌฆๅทๅญ˜ๅ‚จ | SoA ่ฟž็ปญ | ๆŒ‡้’ˆๅˆ†ๆ•ฃ | ๆŒ‡้’ˆๅˆ†ๆ•ฃ |
| ๅฎšไน‰่ทณ่ฝฌ | O(1) ้ข„่ฎก็ฎ— | ๆŒ‰้œ€่งฃๆž | ๆŒ‰้œ€่งฃๆž |
| ๅนถๅ‘่ฏปๅ– | 1000+ ็บฟ็จ‹ | ๅ•็บฟ็จ‹ | ๆœ‰้™ |
| ๅ†…ๅญ˜ๅ ็”จ | 5-10MB | 50-200MB | 100-500MB |
| ่ทจๅŒ…่งฃๆž | ~50ns | ~5ms | ~200ms |

---

## โœจ ๅŠŸ่ƒฝ็‰นๆ€ง

| ็‰นๆ€ง | ๆ่ฟฐ |
|------|------|
| ๐Ÿ”— **ๅ…จๅฑ€็ฌฆๅท่กจ** | ่ทจๅŒ…็ฌฆๅท็ปŸไธ€็ฎก็† |
| โšก **O(1) ๅฎšไน‰่ทณ่ฝฌ** | ้“พๅผ็ดขๅผ•๏ผŒๆ— ้œ€้‡ๆ–ฐ่งฃๆž |
| ๐Ÿ“Š **SoA ๅธƒๅฑ€** | CPU ็ผ“ๅญ˜ๅ‹ๅฅฝ็š„็ฌฆๅทๅญ˜ๅ‚จ |
| ๐Ÿ”„ **ๅนถๅ‘ๅฎ‰ๅ…จ** | RwLock ๆ”ฏๆŒ 1000+ ็บฟ็จ‹ |
| ๐Ÿ’พ **mmap ็ดขๅผ•** | ้›ถๆ‹ท่ดๅŠ ่ฝฝ๏ผŒ3ms ๅฏๅŠจ |
| ๐Ÿ” **่ทจๅŒ…่งฃๆž** | ๅค„็† import aliasใ€dot import |
| ๐Ÿ”„ **็ฌฆๅท้“พๆŽฅ** | Lock-free ็ฌฆๅทๅˆซๅ่งฃๆž |
| ๐Ÿงฉ **็”Ÿๆ€้›†ๆˆ** | ไธŽ woofindใ€wootype ๆ— ็ผ้›†ๆˆ |

---

## ๐Ÿ“ฆ ๅฎ‰่ฃ…

### ไปŽ crates.io

```bash
cargo install woolink
```

### ไปŽๆบ็ 

```bash
git clone https://github.com/GWinfinity/woolink.git
cd woolink
cargo install --path . --release
```

### ้ข„็ผ–่ฏ‘ไบŒ่ฟ›ๅˆถ

```bash
# Linux x86_64
curl -L https://github.com/GWinfinity/woolink/releases/latest/download/woolink-linux-amd64 -o woolink
chmod +x woolink
sudo mv woolink /usr/local/bin/
```

---

## ๐Ÿš€ ๅฟซ้€Ÿๅผ€ๅง‹

### ไฝœไธบๅบ“ไฝฟ็”จ

```rust
use woolink::{SymbolUniverse, Symbol, SymbolId};

// ๅˆ›ๅปบๅ…จๅฑ€็ฌฆๅท่กจ
let universe = SymbolUniverse::new(100_000);

// ๆ’ๅ…ฅ็ฌฆๅท
{
    let mut guard = universe.write();
    guard.insert_symbol(symbol)?;
}

// ๅนถๅ‘ๆŸฅ่ฏข (ๆ”ฏๆŒ 1000+ ็บฟ็จ‹)
let guard = universe.read();
let sym = guard.get_symbol(SymbolId::new(42));

// O(1) ๅฎšไน‰่ทณ่ฝฌ
let (target, location) = guard.jump_to_definition(SymbolId::new(42))?;
```

### CLI ็”จๆณ•

```bash
# ๆž„ๅปบ็ดขๅผ•
woolink index ./my-project

# ๆŸฅ่ฏข็ฌฆๅท
woolink query "NewClient"

# ๆ˜พ็คบ็ปŸ่ฎก
woolink stats

# ่ทจๅŒ…่งฃๆžๆต‹่ฏ•
woolink resolve "pkg.Symbol" --from "main.go"
```

---

## ๐Ÿ—๏ธ ๆžถๆž„ไบฎ็‚น

```
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    woolink ้ซ˜ๆ€ง่ƒฝๆžถๆž„                        โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                              โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”‚
โ”‚  โ”‚  SoA Storageโ”‚    โ”‚ ChainedIndexโ”‚    โ”‚ SymbolLinkerโ”‚     โ”‚
โ”‚  โ”‚  (็ฌฆๅทๅญ˜ๅ‚จ)  โ”‚    โ”‚ (้“พๅผ็ดขๅผ•)   โ”‚    โ”‚(Lock-free) โ”‚     โ”‚
โ”‚  โ”‚             โ”‚    โ”‚             โ”‚    โ”‚             โ”‚     โ”‚
โ”‚  โ”‚ โ€ข name_arrayโ”‚    โ”‚ โ€ข chains    โ”‚    โ”‚ โ€ข epoch CAS โ”‚     โ”‚
โ”‚  โ”‚ โ€ข kind_arrayโ”‚    โ”‚ โ€ข name_indexโ”‚    โ”‚ โ€ข no locks  โ”‚     โ”‚
โ”‚  โ”‚ โ€ข doc_array โ”‚    โ”‚ โ€ข methods   โ”‚    โ”‚             โ”‚     โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ”‚
โ”‚         โ”‚                  โ”‚                  โ”‚             โ”‚
โ”‚         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜             โ”‚
โ”‚                            โ–ผ                                 โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚              SymbolUniverse (RwLock)                โ”‚   โ”‚
โ”‚  โ”‚                                                      โ”‚   โ”‚
โ”‚  โ”‚  โ€ข 1000+ ๅนถๅ‘่ฏป (read lock)                          โ”‚   โ”‚
โ”‚  โ”‚  โ€ข ็‹ฌๅ ๅ†™ (write lock)                               โ”‚   โ”‚
โ”‚  โ”‚  โ€ข ๅ†™ๆ—ถๅคๅˆถๅฟซ็…ง                                      โ”‚   โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚                            โ”‚                                 โ”‚
โ”‚         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”             โ”‚
โ”‚         โ–ผ                  โ–ผ                  โ–ผ             โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”‚
โ”‚  โ”‚CrossPackage โ”‚    โ”‚   MmapIndex โ”‚    โ”‚  Resolver   โ”‚     โ”‚
โ”‚  โ”‚  Resolver   โ”‚    โ”‚  (้›ถๆ‹ท่ด)    โ”‚    โ”‚   Cache     โ”‚     โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ”‚
โ”‚                                                              โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
```

### ๆ ธๅฟƒๆŠ€ๆœฏ

| ๆŠ€ๆœฏ | ็”จ้€” | ๆ•ˆๆžœ |
|------|------|------|
| **SoA** | ็ฌฆๅทๅญ˜ๅ‚จ | CPU ็ผ“ๅญ˜ๅ‹ๅฅฝ๏ผŒ5-10x ้ๅކ้€Ÿๅบฆ |
| **ChainedIndex** | ็ฌฆๅท่งฃๆž | O(1) ๅฎšไน‰่ทณ่ฝฌ |
| **crossbeam-epoch** | ็ฌฆๅท้“พๆŽฅ | Lock-free ๆ›ดๆ–ฐ |
| **parking_lot** | ๅนถๅ‘ๆŽงๅˆถ | ้ซ˜ๆ€ง่ƒฝ RwLock |
| **DashMap** | ่พ…ๅŠฉ็ดขๅผ• | ๆ— ้”ๅนถๅ‘่ฏป |
| **memmap2** | ็ดขๅผ•ๅŠ ่ฝฝ | ้›ถๆ‹ท่ด๏ผŒ3ms ๅฏๅŠจ |

---

## ๐Ÿ’ก ไฝฟ็”จๅœบๆ™ฏ

### IDE ๅฎšไน‰่ทณ่ฝฌ

```
็”จๆˆท็‚นๅ‡ป็ฌฆๅท โ†’ woolink jump โ†’ ่ฟ”ๅ›žๅฎšไน‰ไฝ็ฝฎ
ๅปถ่ฟŸ: O(1) = ~8ns
ไฝ“้ชŒ: โœ… ๅณๆ—ถ่ทณ่ฝฌ๏ผŒๆ— ๆ„Ÿ็Ÿฅๅปถ่ฟŸ
ๅฏนๆฏ”: gopls ้œ€่ฆ ~100ms ้‡ๆ–ฐ่งฃๆž
```

### AI Agent ๅนถๅ‘ๅˆ†ๆž

```rust
// 1000+ AI Agent ๅนถๅ‘ๆŸฅ่ฏข็ฌฆๅท
let universe = Arc::new(SymbolUniverse::new(100_000));

let handles: Vec<_> = (0..1000)
    .map(|_| {
        let u = universe.clone();
        spawn(move || {
            let guard = u.read();
            let sym = guard.get_symbol(id);      // 8ns
            let def = guard.jump_to_definition(id); // O(1)
        })
    })
    .collect();
```

### ่ทจๅŒ…ๆญป็ ๆฃ€ๆต‹

```bash
# ๅˆ†ๆžๆ•ดไธช้กน็›ฎ็š„็ฌฆๅทๅผ•็”จ
woolink analyze --project . --output report.json

# ๆ‰พๅ‡บๆœชไฝฟ็”จ็š„ๅฏผๅ‡บ็ฌฆๅท
woolink deadcode --package "github.com/my/pkg"
```

### ๅพช็Žฏไพ่ต–ๆฃ€ๆต‹

```bash
# ๆฃ€ๆต‹ๅŒ…ไน‹้—ด็š„ๅพช็Žฏไพ่ต–
woolink cycles --project .

# ๆ˜พ็คบไพ่ต–ๅ›พ
woolink graph --format dot | dot -Tpng > deps.png
```

---

## ๐Ÿ“š ๆ–‡ๆกฃ

- [API ๆ–‡ๆกฃ]https://docs.rs/woolink
- [ๆžถๆž„ๅฏนๆฏ”]WOO_ECOSYSTEM_VS_GO_BUILD.md
- [ๆ€ง่ƒฝๆŠฅๅ‘Š]../WOO_ECOSYSTEM_VS_GO_BUILD.md

---

## ๐Ÿค ่ดก็Œฎ

ๆฌข่ฟŽ่ดก็Œฎ๏ผ่ฏทๆŸฅ็œ‹ [CONTRIBUTING.md](CONTRIBUTING.md)ใ€‚

```bash
# ๅผ€ๅ‘็Žฏๅขƒ
git clone https://github.com/GWinfinity/woolink.git
cd woolink
cargo test
cargo bench
```

---

## ๐Ÿ“„ ่ฎธๅฏ่ฏ

Apache License 2.0 ยฉ GWinfinity

---

**Made with โค๏ธ and ๐Ÿฆ€ Rust**

> *"woolink ่ฎฉ Go ่ทจๅŒ…็ฌฆๅท่งฃๆžๅฟซๅˆฐๅฟ˜่ฎฐๅฎƒๅญ˜ๅœจใ€‚"*