woolink 0.1.0

Global Symbol Table for Woo Ecosystem - Cross-package symbol resolution with SoA layout
Documentation

woolink ๐Ÿ•

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

Crates.io Docs.rs 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

cargo install woolink

ไปŽๆบ็ 

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

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

# 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/

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

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

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 ็”จๆณ•

# ๆž„ๅปบ็ดขๅผ•
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 ๅนถๅ‘ๅˆ†ๆž

// 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();

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

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

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

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

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

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

๐Ÿ“š ๆ–‡ๆกฃ


๐Ÿค ่ดก็Œฎ

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

# ๅผ€ๅ‘็Žฏๅขƒ
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 ่ทจๅŒ…็ฌฆๅท่งฃๆžๅฟซๅˆฐๅฟ˜่ฎฐๅฎƒๅญ˜ๅœจใ€‚"