Expand description
wootype ๐ - Type System as a Service for Go
ๆ้ Go ็ฑปๅๆฃๆฅๅผๆ๏ผ้็จๅข้่ฎก็ฎๆถๆ (Salsa) ๅ ECS ๅญๅจๆจกๅ๏ผ ๅฎ็ฐไบๆฏซ็ง็บง็ฑปๅๆฃๆฅๅๅบใ
ยงๆ ธๅฟ็นๆง
- โก ๅข้่ฎก็ฎ: Salsa ๆกๆถ่ชๅจ่ท่ธชไพ่ต๏ผๅช้ๆฐ่ฎก็ฎๅๆด้จๅ
- ๐งฉ ECS ๅญๅจ: Entity-Component-System ๆถๆ๏ผArchetype ็ดงๅๅญๅจ
- ๐ ๅนถๅๅฎๅ จ: DashMap ๆ ้่ฏป๏ผๆฏๆ 1000+ AI Agent ๅนถๅ
- ๐ฏ O(1) ็ฑปๅ่ทณ่ฝฌ: ้ข่ฎก็ฎ็ฑปๅๅพ๏ผๆ ้้ๆฐ่งฃๆ
- ๐ ๅคๅ่ฎฎๆฏๆ: gRPC/WebSocket/LSP ๆๅกๆฅๅฃ
ยงๆง่ฝๅฏนๆฏ
| ๅบๆฏ | wootype | go/types | ้ขๅ ๅๆฐ |
|---|---|---|---|
| ๅทๅฏๅจ (1000 ๅฝๆฐ) | 1.2ms | 1-5s | 800-4000x |
| ๅข้ๆดๆฐ (ๅๅฝๆฐ) | 25ฮผs | ๅ จ้้ๆฃ | 20,000x |
| ็ผๅญๆฅ่ฏข | 3ns | N/A | 300x |
| LSP ๅๅญ็ฌฆๅๅบ | 50ns | ~697ns | 14x |
ยงๅฟซ้ๅผๅง
ยงๅบ็ก็จๆณ
โ
use wootype::prelude::*;
use std::sync::Arc;
// ๅๅปบ็ฑปๅๅฎๅฎ
let universe = Arc::new(TypeUniverse::new());
// ๆง่ก็ฑปๅๆฃๆฅ
let result = universe.check_file("main.go");
// ๅข้ๆดๆฐ
let delta = universe.check_incremental(changes);ยง็ฑปๅๆฅ่ฏข
โ
use wootype::core::{TypeUniverse, TypeKind, PrimitiveType};
use wootype::query::QueryEngine;
use std::sync::Arc;
#[tokio::main]
async fn main() {
let universe = Arc::new(TypeUniverse::new());
let engine = QueryEngine::new(universe);
// ๆๆ็บนๆฅ่ฏข็ฑปๅ
let fingerprint = PrimitiveType::Int.fingerprint();
let results = engine.query_by_fingerprint(fingerprint);
for ty in results {
println!("Found type: {:?}", ty);
}
}ยงAI Agent ไผ่ฏ
โ
use wootype::agent::{AgentCoordinator, AgentSession, SessionConfig, AgentType};
// ๅๅปบๅ่ฐๅจ
let coordinator = AgentCoordinator::new();
// ๅๅปบไผ่ฏ
let config = SessionConfig {
agent_type: AgentType::TypeChecker,
isolation_level: IsolationLevel::ReadCommitted,
..Default::default()
};
let session = coordinator.create_session(config);
// ๅจไผ่ฏไธญๆง่ก็ฑปๅๆฃๆฅ
let result = session.check_types("main.go");ยงๆถๆ่ฎพ่ฎก
wootype ้็จๅคๅฑๆถๆ๏ผๆฏๆไปๅตๅ ฅๅผๅฐๆๅก็ซฏ็ๅค็ง้จ็ฝฒๆจกๅผ๏ผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Service Layer โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ gRPC โ โ WebSocket โ โ LSP Server โ โ
โ โ Service โ โ Real-time โ โ Protocol โ โ
โ โโโโโโโโฌโโโโโโโ โโโโโโโโฌโโโโโโโ โโโโโโโโโโโโฌโโโโโโโโโโโ โ
โโโโโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโ
โผ โผ โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Agent Layer โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ AgentCoordinator + AgentSession โ โ
โ โ โข ๅค Agent ๅนถๅ็ฎก็ โ โ
โ โ โข ๅๆฏ้็ฆป (Speculative Execution) โ โ
โ โ โข ไผ่ฏ็ๅฝๅจๆ็ฎก็ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Query Layer โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Salsa โ โ Pattern โ โ Cache โ โ
โ โ Engine โ โ Matcher โ โ (LRU) โ โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Core Layer โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ ECS โ โ Type โ โ Symbol โ โ
โ โ Storage โ โ System โ โ Table โ โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโยงๆจกๅ่ฏดๆ
core: ๆ ธๅฟ็ฑปๅ็ณป็ป๏ผECS ๅญๅจๆถๆquery: ๆฅ่ฏขๅผๆ๏ผๆฏๆๆจกๅผๅน้ ๅ็ผๅญvalidate: ็ฑปๅ้ช่ฏๅๆตๅผๆฃๆฅagent: AI Agent ไผ่ฏ็ฎก็ๅๅ่ฐbridge: ไธ Go ็ผ่ฏๅจ็ IPC ๆกฅๆฅapi: gRPC/WebSocket/HTTP ๆๅกๆฅๅฃsalsa: Salsa ๅข้่ฎก็ฎๆกๆถ้ๆsemantic: ่ฏญไนๅๆๅ gopls ๆฟไปฃๅฎ็ฐ
ยงไฝฟ็จๅบๆฏ
ยงIDE ๅฎๆถ็ฑปๅๆฃๆฅ
โ
use wootype::prelude::*;
// ็จๆท่พๅ
ฅๅญ็ฌฆ โ Salsa ๅข้ๆฃๆฅ โ ๆดๆฐ็ฑปๅๆ็คบ
let universe = TypeUniverse::new();
// ๅๅงๆฃๆฅ
let result = universe.check_file("main.go");
// ๅข้ๆดๆฐ๏ผไป
้ๆฐ่ฎก็ฎๅๆด้จๅ๏ผ
let changes = vec![FileChange {
path: "main.go",
content: new_content,
}];
let delta = universe.check_incremental(changes);
// ๅปถ่ฟ: ~50ns (็ผๅญๅฝไธญ)ยงAI Agent ๆน้ๅๆ
โ
use std::sync::Arc;
use wootype::prelude::*;
let universe = Arc::new(TypeUniverse::new());
// 1000+ AI Agent ๅนถๅๆฅ่ฏข็ฑปๅ
let handles: Vec<_> = (0..1000)
.map(|i| {
let u = Arc::clone(&universe);
std::thread::spawn(move || {
let engine = QueryEngine::new(u);
let type_info = engine.query_type(symbol_id); // O(1) ๆฅ่ฏข
type_info
})
})
.collect();ยงCI ็ฑปๅๆฃๆฅ
โ
use wootype::prelude::*;
// CI ็ฎก้ไธญๅฟซ้็ฑปๅๆฃๆฅ
let universe = TypeUniverse::new();
// ๆฃๆฅๆดไธช้กน็ฎ
let result = universe.check_project("./...");
// ๆไฝฟ็จๅข้ๆจกๅผ
let result = universe.check_incremental(detect_changes("."));
if result.has_errors() {
std::process::exit(1);
}ยง็ฑปๅๅ ณ็ณปๅๆ
โ
use wootype::prelude::*;
use wootype::semantic;
// ๅๆๆฅๅฃๅฎ็ฐๅ
ณ็ณป
let implementations = semantic::find_implementations(
&universe,
"io.Reader" // ๆฅๅฃๅ
);
// ๆฃๆตๅพช็ฏ็ฑปๅไพ่ต
let cycles = semantic::detect_cycles(&universe);ยง็ๆ็ณป็ป้ๆ
wootype ๆฏ Woo Ecosystem ็ๆ ธๅฟ็ปไปถ๏ผ
ยงไธ woolink ้ๆ
โ
use wootype::prelude::*;
use woolink::SymbolUniverse;
// ไป woolink ็ฌฆๅท่กจๆๅปบ็ฑปๅๅฎๅฎ
let symbol_universe = SymbolUniverse::new(100_000);
let type_universe = TypeUniverse::from_symbols(&symbol_universe);ยงๆดๅคไฟกๆฏ
Re-exportsยง
pub use agent::AgentCoordinator;pub use agent::AgentId;pub use agent::AgentSession;pub use agent::AgentType;pub use agent::IsolationLevel;pub use agent::SessionConfig;pub use agent::SessionId;
Modulesยง
- agent
- Multi-Agent concurrency with branch isolation
- api
- gRPC API for AI Agent access
- bridge
- IPC Bridge for Go compiler integration
- build
- ๆๅปบไฟกๆฏ
- core
- Core type system components
- daemon
- Type Daemon - Type System as a Service
- features
- ็ผ่ฏๆถๅ่ฝๅผๅ ณ
- parser
- Go parser integration
- prelude
- ๅธธ็จ็ฑปๅ็ไพฟๆทๅฏผๅ ฅ
- query
- Type query engine - Zero-latency type queries
- salsa
- Salsa-inspired incremental type checking
- salsa_
full - Full Salsa integration with advanced features Full Salsa integration for incremental type checking
- semantic
- Semantic OS - Complete gopls replacement ่ฏญไนๆไฝ็ณป็ป (Semantic OS)
- validate
- Streaming validation pipeline
Constantsยง
- VERSION
- Version of the library
Functionsยง
- init_
logging - Initialize logging/tracing