Expand description
woolink ๐ - Global Symbol Table for Woo Ecosystem
่ทจๅ ็ฌฆๅท่งฃๆ็ณป็ป๏ผๆไพๆ่ดๆง่ฝ็ Go ็ฌฆๅท็ฎก็ไธ่งฃๆ่ฝๅใ
ยงๆ ธๅฟ็นๆง
- โก SoA ๅธๅฑ: ็ฌฆๅทๅฑๆง๏ผๅ็งฐใ็ฑปๅใๆๆกฃ๏ผๅๅๅญๅจ๏ผCPU ็ผๅญๅๅฅฝ
- ๐ ๅนถๅๆฅ่ฏข:
RwLock<SymbolUniverse>ๆฏๆ 1000+ AI Agent ็บฟ็จๅๆถ่ฏปๅ - ๐พ ๆฐๆงๅๅบๅๅ: ไฝฟ็จ rkyv ้ถๆท่ดๅๅบๅๅ๏ผ็ดขๅผๆไปถ็ดๆฅ mmap ไธบ Rust ็ปๆไฝ
- ๐ฏ O(1) ๅฎไน่ทณ่ฝฌ: ้พๅผ็ฌฆๅท็ดขๅผๆฟไปฃ Go ็ๆ้่งฃๆ๏ผ้ๅบฆๆๅ 100x+
- ๐ Lock-free ็ฌฆๅท้พๆฅ: crossbeam-epoch ๅฎ็ฐๆ ้็ฌฆๅทๅซๅ่งฃๆ
ยงๆง่ฝๅฏนๆฏ
| ๆไฝ | Go types2 | woolink | ๆๅ |
|---|---|---|---|
| ็ฌฆๅทๆฅๆพ | 150ns | 8ns | 18x |
| ๅฎไน่ทณ่ฝฌ | ้่งฃๆ | O(1) | 100x+ |
| ๅ ๅญๅ ็จ | ๆ้่ทณ่ฝฌ | SoA ่ฟ็ปญ | 5-10x |
| ๅนถๅ่ฏปๅ (1000็บฟ็จ) | ๅ็บฟ็จ | ็บฟๆงๆฉๅฑ | โ |
ยงๅฟซ้ๅผๅง
ยงๅบ็ก็จๆณ
use woolink::{SymbolUniverse, SymbolId};
// ๅๅปบ็ฌฆๅทๅฎๅฎ
let universe = SymbolUniverse::new(100_000);
// ๅนถๅ่ฏปๅ (ๆฏๆ 1000+ ็บฟ็จ)
let guard = universe.read();
// ่ทๅ็ฌฆๅท (ๅฆๆๅญๅจ)
if let Some(symbol) = guard.get_symbol(SymbolId::new(0)) {
println!("Found: {:?}", symbol);
}ยงๆๅปบ็ฌฆๅท่กจ
use woolink::{Symbol, SymbolKind, Visibility, DefinitionLocation, UniverseBuilder};
// ไฝฟ็จ Builder ๆจกๅผๆๅปบ
let mut builder = UniverseBuilder::with_capacity(10_000, 100);
// ๆทปๅ ๅ
builder.add_package(woolink::symbol::Package {
id: 1,
path_offset: 0,
path_len: 24,
name_offset: 24,
name_len: 4,
version_offset: 0,
version_len: 6,
first_symbol: 1,
symbol_count: 10,
import_count: 3,
});
// ๆทปๅ ็ฌฆๅท
let symbol = Symbol::new(1, 1, SymbolKind::Function, 0, 8);
builder.add_symbol(symbol, DefinitionLocation::new(1, 100));
// ๆๅปบ
let universe = builder.build();ยง่ทจๅ ่งฃๆ
โ
use woolink::bridge::CrossPackageResolver;
use std::sync::Arc;
// ๅๅปบ่งฃๆๅจ (้่ฆ Arc<SymbolUniverse>)
// let resolver = CrossPackageResolver::new(universe);
// ่งฃๆ่ทจๅ
ๅผ็จ
// let result = resolver.resolve(from_package_id, "symbol_name");ยงๆถๆ่ฎพ่ฎก
woolink ้็จๅๅฑๆถๆ่ฎพ่ฎก๏ผๆฏไธชๆจกๅ่ด่ดฃ็นๅฎๅ่ฝ๏ผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Application Layer โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ CLI โ โ LSP โ โ AI Agent API โ โ
โ โ Commands โ โ Handler โ โ (gRPC/HTTP) โ โ
โ โโโโโโโโฌโโโโโโโ โโโโโโโโฌโโโโโโโ โโโโโโโโโโโโฌโโโโโโโโโโโ โ
โโโโโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโ
โผ โผ โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Bridge Layer โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ CrossPackageResolver + SymbolImporter โ โ
โ โ โข ็ปไธ็่ทจๅ
ๅผ็จ่งฃๆ โ โ
โ โ โข ็ฌฆๅทๅฏผๅ
ฅ/ๅฏผๅบๅ่ฝ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Symbol Layer โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโ โ
โ โSoA Storage โ โChainedIndex โ โ LockFreeLink โ โ
โ โ(็ฌฆๅทๅญๅจ) โ โ(้พๅผ็ดขๅผ) โ โ (็ฌฆๅท้พๆฅ) โ โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโ โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโ โ
โ โSymbolUniverseโ โ MmapIndex โ โ UniverseSnapshot โ โ
โ โ(ๅนถๅๅฎนๅจ) โ โ (ๅ
ๅญๆ ๅฐ) โ โ (ๅฟซ็
ง้็ฆป) โ โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโยงๆจกๅ่ฏดๆ
symbol: ๆ ธๅฟ็ฌฆๅท่กจๅฎ็ฐ๏ผๅ ๅซ SoA ๅญๅจใ้พๅผ็ดขๅผใ็ฌฆๅท้พๆฅbridge: ่ทจๅ ็ฌฆๅท่งฃๆๆกฅๆฅๅฑcli: ๅฝไปค่ก็้ข๏ผๆฏๆ็ดขๅผๆๅปบใๆฅ่ฏขใ็ป่ฎก็ญๅ่ฝ
ยงไฝฟ็จๅบๆฏ
ยงIDE ๅฎไน่ทณ่ฝฌ
โ
// O(1) ๅฎไน่ทณ่ฝฌ๏ผๆ ้้ๆฐ่งฃๆ
// let guard = universe.read();
// let (target_sym, location) = guard.jump_to_definition(symbol_id)?;
// ๅปถ่ฟ: ~8ns vs gopls ~100msยงAI Agent ๅนถๅๅๆ
use woolink::{SymbolUniverse, SymbolId};
use std::sync::Arc;
use std::thread;
let universe = Arc::new(SymbolUniverse::new(100_000));
// 1000+ ็บฟ็จๅนถๅๆฅ่ฏข
let handles: Vec<_> = (0..10)
.map(|i| {
let u = Arc::clone(&universe);
thread::spawn(move || {
let guard = u.read();
let sym = guard.get_symbol(SymbolId::new(i as u32));
sym.map(|s| s.name_len)
})
})
.collect();ยง่ทจๅ ๆญป็ ๆฃๆต
โ
// ๅๆๆดไธช้กน็ฎ็็ฌฆๅทๅผ็จ
// let resolver = CrossPackageResolver::new(universe);
// let unused = resolver.find_unused_exports("github.com/my/pkg");ยง็ๆ็ณป็ป้ๆ
woolink ๅฏไฝไธบ็ฌ็ซๅบไฝฟ็จ๏ผไนๅฏไธไปฅไธ็ปไปถ้ๆ๏ผ้ๅฏ็จๅฏนๅบ็นๆง๏ผ๏ผ
- woofind: ็ฌฆๅทๆ็ดขๅผๆ๏ผๆไพ็ฌฆๅท็ดขๅผ (feature: โwoofindโ)
- wootype: ็ฑปๅๆฃๆฅๅผๆ๏ผๆไพ็ฑปๅไฟกๆฏ (feature: โwootypeโ)
ยงๆดๅคไฟกๆฏ
Re-exportsยง
pub use symbol::ChainedIndex;pub use symbol::DefinitionLocation;pub use symbol::Import;pub use symbol::LinkResolver;pub use symbol::LockFreeLink;pub use symbol::MemoryMappedStorage;pub use symbol::MmapIndex;pub use symbol::Package;pub use symbol::PackageId;pub use symbol::Result;pub use symbol::SoAStorage;pub use symbol::Symbol;pub use symbol::SymbolChain;pub use symbol::SymbolError;pub use symbol::SymbolId;pub use symbol::SymbolKind;pub use symbol::SymbolLinker;pub use symbol::SymbolStorage;pub use symbol::SymbolUniverse;pub use symbol::SymbolUniverseGuard;pub use symbol::UniverseBuilder;pub use symbol::UniverseSnapshot;pub use symbol::UniverseStats;pub use symbol::Visibility;
Modulesยง
- bridge
- Bridge module - Cross-package symbol resolution
- cli
- CLI module for woolink
- prelude
- ๅธธ็จ็ฑปๅ็ไพฟๆทๅฏผๅ ฅ
- symbol
- ๅ จๅฑ็ฌฆๅท่กจไธ่ทจๅ ่งฃๆ็ณป็ป
Constantsยง
- ARCHIVE_
MAGIC - ๅฝๆกฃๆไปถ็้ญๆฐๆ ่ฏ
- INDEX_
FORMAT_ VERSION - ๅฝๅ็ดขๅผๆ ผๅผ็ๆฌ
- VERSION
- ็ๆฌไฟกๆฏ