vools-bridges 0.7.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- vools/bridge/README.md +648 -0
- vools/bridge/__init__.py +863 -0
- vools/bridge/_base.py +1618 -0
- vools/bridge/auto_discovery/README.md +43 -0
- vools/bridge/auto_discovery.py +278 -0
- vools/bridge/c/README.md +61 -0
- vools/bridge/c/__init__.py +773 -0
- vools/bridge/cangjie/README.md +67 -0
- vools/bridge/cangjie/__init__.py +108 -0
- vools/bridge/cangjie/compiler.py +678 -0
- vools/bridge/cangjie/loader.py +299 -0
- vools/bridge/cangjie/templates.py +328 -0
- vools/bridge/cangjie/types.py +176 -0
- vools/bridge/check_bridges.py +74 -0
- vools/bridge/core/README.md +84 -0
- vools/bridge/core/__init__.py +70 -0
- vools/bridge/core/compat/__init__.py +5 -0
- vools/bridge/core/compat/asyncio_compat.py +122 -0
- vools/bridge/core/compat/dataclass_compat.py +204 -0
- vools/bridge/core/decorators.py +426 -0
- vools/bridge/core/loader.py +266 -0
- vools/bridge/core/serialization.py +79 -0
- vools/bridge/core/sigcache.py +605 -0
- vools/bridge/core/tracker.py +287 -0
- vools/bridge/core/types.py +333 -0
- vools/bridge/core/wsl.py +98 -0
- vools/bridge/cpp/README.md +66 -0
- vools/bridge/cpp/__init__.py +817 -0
- vools/bridge/csharp/README.md +61 -0
- vools/bridge/csharp/__init__.py +63 -0
- vools/bridge/csharp/compiler.py +451 -0
- vools/bridge/csharp/loader.py +39 -0
- vools/bridge/csharp/templates.py +300 -0
- vools/bridge/csharp/types.py +115 -0
- vools/bridge/dart/README.md +65 -0
- vools/bridge/dart/__init__.py +28 -0
- vools/bridge/dart/compiler.py +784 -0
- vools/bridge/dart/types.py +29 -0
- vools/bridge/elixir/README.md +68 -0
- vools/bridge/elixir/__init__.py +98 -0
- vools/bridge/elixir/compiler.py +679 -0
- vools/bridge/erlang/README.md +68 -0
- vools/bridge/erlang/__init__.py +98 -0
- vools/bridge/erlang/compiler.py +721 -0
- vools/bridge/freebasic/README.md +70 -0
- vools/bridge/freebasic/__init__.py +189 -0
- vools/bridge/freebasic/compiler/expand//321/210/320/277/342/224/244/321/206/320/250/320/236.txt +54 -0
- vools/bridge/freebasic/compiler.py +731 -0
- vools/bridge/freebasic/libs/win64/gui/libScintilla.a +0 -0
- vools/bridge/freebasic/libs/win64/gui/libmCtrl.a +0 -0
- vools/bridge/freebasic/loader.py +376 -0
- vools/bridge/freebasic/modules/__init__.py +114 -0
- vools/bridge/freebasic/modules/cairo_wrapper.bas +275 -0
- vools/bridge/freebasic/modules/hash_wrapper.bas +260 -0
- vools/bridge/freebasic/modules/scintilla_wrapper.bas +240 -0
- vools/bridge/freebasic/modules/sdl3_wrapper.bas +261 -0
- vools/bridge/freebasic/modules/sqlite3_wrapper.bas +234 -0
- vools/bridge/freebasic/sqlite3_shim.py +187 -0
- vools/bridge/freebasic/transport.py +200 -0
- vools/bridge/freebasic/types.py +171 -0
- vools/bridge/go/README.md +67 -0
- vools/bridge/go/__init__.py +119 -0
- vools/bridge/go/compiler.py +940 -0
- vools/bridge/haskell/README.md +68 -0
- vools/bridge/haskell/__init__.py +95 -0
- vools/bridge/haskell/compiler.py +786 -0
- vools/bridge/java/README.md +79 -0
- vools/bridge/java/__init__.py +64 -0
- vools/bridge/java/compiler.py +611 -0
- vools/bridge/java/decorator.py +547 -0
- vools/bridge/java/loader.py +559 -0
- vools/bridge/java/types.py +371 -0
- vools/bridge/julia/README.md +70 -0
- vools/bridge/julia/__init__.py +117 -0
- vools/bridge/julia/_loader.py +205 -0
- vools/bridge/julia/compiler.py +982 -0
- vools/bridge/julia/decorator.py +136 -0
- vools/bridge/julia/templates.py +222 -0
- vools/bridge/julia/types.py +322 -0
- vools/bridge/kotlin/README.md +69 -0
- vools/bridge/kotlin/__init__.py +32 -0
- vools/bridge/kotlin/compiler.py +543 -0
- vools/bridge/kotlin/operators/Operators.kt +144 -0
- vools/bridge/kotlin/operators/build.bat +33 -0
- vools/bridge/kotlin/types.py +28 -0
- vools/bridge/lua/README.md +64 -0
- vools/bridge/lua/__init__.py +59 -0
- vools/bridge/lua/compiler.py +845 -0
- vools/bridge/lua/types.py +48 -0
- vools/bridge/manager.py +1577 -0
- vools/bridge/mojo/README.md +66 -0
- vools/bridge/mojo/__init__.py +106 -0
- vools/bridge/mojo/compiler.py +957 -0
- vools/bridge/mojo/loader.py +42 -0
- vools/bridge/mojo/templates.py +150 -0
- vools/bridge/mojo/transport.py +216 -0
- vools/bridge/mojo/types.py +218 -0
- vools/bridge/moonbit/README.md +65 -0
- vools/bridge/moonbit/__init__.py +17 -0
- vools/bridge/moonbit/compiler.py +594 -0
- vools/bridge/moonbit/types.py +45 -0
- vools/bridge/nim/README.md +61 -0
- vools/bridge/nim/__init__.py +94 -0
- vools/bridge/nim/_loader.py +169 -0
- vools/bridge/nim/base64.nim +50 -0
- vools/bridge/nim/base64_shim.py +93 -0
- vools/bridge/nim/build.bat +16 -0
- vools/bridge/nim/build.sh +16 -0
- vools/bridge/nim/compiler.py +568 -0
- vools/bridge/nim/compress.nim +89 -0
- vools/bridge/nim/compress_shim.py +138 -0
- vools/bridge/nim/crypto.py +94 -0
- vools/bridge/nim/curried.py +292 -0
- vools/bridge/nim/datetime.py +198 -0
- vools/bridge/nim/encoding.py +86 -0
- vools/bridge/nim/hash.nim +66 -0
- vools/bridge/nim/hash_shim.py +55 -0
- vools/bridge/nim/json.nim +71 -0
- vools/bridge/nim/json_shim.py +142 -0
- vools/bridge/nim/operators/build.bat +16 -0
- vools/bridge/nim/operators/operators.nim +115 -0
- vools/bridge/nim/operators/operators_test.nim +91 -0
- vools/bridge/nim/seq.py +295 -0
- vools/bridge/nim/serialize.nim +122 -0
- vools/bridge/nim/serialize_shim.py +151 -0
- vools/bridge/nim/sigcache.nim +76 -0
- vools/bridge/nim/sigcache_shim.py +219 -0
- vools/bridge/perl/README.md +64 -0
- vools/bridge/perl/__init__.py +28 -0
- vools/bridge/perl/compiler.py +788 -0
- vools/bridge/perl/types.py +28 -0
- vools/bridge/php/README.md +64 -0
- vools/bridge/php/__init__.py +28 -0
- vools/bridge/php/compiler.py +737 -0
- vools/bridge/php/types.py +31 -0
- vools/bridge/powershell/README.md +65 -0
- vools/bridge/powershell/__init__.py +28 -0
- vools/bridge/powershell/compiler.py +862 -0
- vools/bridge/powershell/types.py +28 -0
- vools/bridge/probe.py +1371 -0
- vools/bridge/r/README.md +66 -0
- vools/bridge/r/__init__.py +91 -0
- vools/bridge/r/compiler.py +777 -0
- vools/bridge/r/loader.py +75 -0
- vools/bridge/r/templates.py +211 -0
- vools/bridge/r/types.py +229 -0
- vools/bridge/ruby/README.md +63 -0
- vools/bridge/ruby/__init__.py +154 -0
- vools/bridge/ruby/compiler.py +683 -0
- vools/bridge/rust/README.md +65 -0
- vools/bridge/rust/__init__.py +67 -0
- vools/bridge/rust/_loader.py +67 -0
- vools/bridge/rust/compiler.py +663 -0
- vools/bridge/rust/decorator.py +53 -0
- vools/bridge/rust/safe_eval/Cargo.lock +16 -0
- vools/bridge/rust/safe_eval/Cargo.toml +17 -0
- vools/bridge/rust/safe_eval/src/lib.rs +468 -0
- vools/bridge/rust/safe_eval/target/CACHEDIR.TAG +3 -0
- vools/bridge/rust/safe_eval/target/release/build/libc-318d244a865fe377/build-script-build +0 -0
- vools/bridge/rust/safe_eval/target/release/build/libc-318d244a865fe377/build_script_build-318d244a865fe377 +0 -0
- vools/bridge/rust/safe_eval/target/release/build/libc-318d244a865fe377/build_script_build-318d244a865fe377.d +5 -0
- vools/bridge/rust/safe_eval/target/release/build/libc-a2649d408a186fac/invoked.timestamp +1 -0
- vools/bridge/rust/safe_eval/target/release/build/libc-a2649d408a186fac/output +27 -0
- vools/bridge/rust/safe_eval/target/release/build/libc-a2649d408a186fac/root-output +1 -0
- vools/bridge/rust/safe_eval/target/release/build/libc-a2649d408a186fac/stderr +0 -0
- vools/bridge/rust/safe_eval/target/release/deps/libc-c7e6cff5e1d80ebc.d +46 -0
- vools/bridge/rust/safe_eval/target/release/deps/liblibc-c7e6cff5e1d80ebc.rlib +0 -0
- vools/bridge/rust/safe_eval/target/release/deps/liblibc-c7e6cff5e1d80ebc.rmeta +0 -0
- vools/bridge/rust/safe_eval/target/release/deps/libvools_bridge_safe_eval.so +0 -0
- vools/bridge/rust/safe_eval/target/release/deps/vools_bridge_safe_eval.d +5 -0
- vools/bridge/rust/safe_eval/target/release/libvools_bridge_safe_eval.d +1 -0
- vools/bridge/rust/safe_eval/target/release/libvools_bridge_safe_eval.so +0 -0
- vools/bridge/rust/safe_eval_shim.py +369 -0
- vools/bridge/rust/templates.py +242 -0
- vools/bridge/rust/types.py +219 -0
- vools/bridge/scala/README.md +66 -0
- vools/bridge/scala/__init__.py +67 -0
- vools/bridge/scala/compiler.py +720 -0
- vools/bridge/scala/decorator.py +616 -0
- vools/bridge/scala/loader.py +563 -0
- vools/bridge/scala/operators/Operators.scala +355 -0
- vools/bridge/scala/operators/build.bat +51 -0
- vools/bridge/scala/operators/vools-operators.jar +0 -0
- vools/bridge/scala/types.py +445 -0
- vools/bridge/scala/utils.py +354 -0
- vools/bridge/shell/README.md +64 -0
- vools/bridge/shell/__init__.py +32 -0
- vools/bridge/shell/compiler.py +625 -0
- vools/bridge/shell/types.py +26 -0
- vools/bridge/swift/README.md +66 -0
- vools/bridge/swift/__init__.py +28 -0
- vools/bridge/swift/compiler.py +462 -0
- vools/bridge/swift/types.py +30 -0
- vools/bridge/typescript/README.md +67 -0
- vools/bridge/typescript/__init__.py +94 -0
- vools/bridge/typescript/compiler.py +576 -0
- vools/bridge/vbnet/README.md +62 -0
- vools/bridge/vbnet/__init__.py +107 -0
- vools/bridge/vbnet/api/__init__.py +51 -0
- vools/bridge/vbnet/api/_base.py +348 -0
- vools/bridge/vbnet/api/filesystem.py +164 -0
- vools/bridge/vbnet/api/image.py +146 -0
- vools/bridge/vbnet/api/keyboard.py +121 -0
- vools/bridge/vbnet/api/mouse.py +76 -0
- vools/bridge/vbnet/api/network.py +80 -0
- vools/bridge/vbnet/api/process.py +117 -0
- vools/bridge/vbnet/api/window.py +239 -0
- vools/bridge/vbnet/compiler.py +414 -0
- vools/bridge/vbnet/templates.py +163 -0
- vools/bridge/vbnet/types.py +108 -0
- vools/bridge/vbscript/README.md +64 -0
- vools/bridge/vbscript/__init__.py +28 -0
- vools/bridge/vbscript/compiler.py +877 -0
- vools/bridge/vbscript/types.py +28 -0
- vools/bridge/zig/README.md +231 -0
- vools/bridge/zig/__init__.py +28 -0
- vools/bridge/zig/compiler.py +412 -0
- vools/bridge/zig/types.py +34 -0
- vools_bridges-0.7.2.dist-info/METADATA +573 -0
- vools_bridges-0.7.2.dist-info/RECORD +223 -0
- vools_bridges-0.7.2.dist-info/WHEEL +5 -0
- vools_bridges-0.7.2.dist-info/licenses/LICENSE +201 -0
- vools_bridges-0.7.2.dist-info/top_level.txt +1 -0
vools/bridge/README.md
ADDED
|
@@ -0,0 +1,648 @@
|
|
|
1
|
+
# vools.bridge — 跨语言桥接框架
|
|
2
|
+
|
|
3
|
+
`vools.bridge` 是 vools 库的跨语言桥接子包,提供统一的 Python 到其他编程语言的桥接能力。通过装饰器模式,你可以用 Python 函数签名来定义接口,函数体作为目标语言的代码字符串,框架自动完成编译、加载、缓存和调用。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 目录
|
|
8
|
+
|
|
9
|
+
- [功能概述](#功能概述)
|
|
10
|
+
- [支持的语言](#支持的语言)
|
|
11
|
+
- [架构设计](#架构设计)
|
|
12
|
+
- [核心概念](#核心概念)
|
|
13
|
+
- [三种使用模式](#三种使用模式)
|
|
14
|
+
- [快速上手](#快速上手)
|
|
15
|
+
- [API 概览](#api-概览)
|
|
16
|
+
- [子模块结构](#子模块结构)
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## 功能概述
|
|
21
|
+
|
|
22
|
+
- **统一接口**:所有 27 种语言使用相同的装饰器 API,学习成本低
|
|
23
|
+
- **即时代码**:函数体即目标语言代码,无需额外源文件
|
|
24
|
+
- **智能编译**:7 种编译模式(CompileMode),支持缓存、强制重编、变更感知等
|
|
25
|
+
- **编译追踪**:基于 SQLite 的 CompileTracker,持久化编译记录与代码变更检测
|
|
26
|
+
- **语言分类**:LangType 枚举(compiled / interpreted / jvm / dotnet / beam),统一处理编译产物
|
|
27
|
+
- **类型映射**:从 Python 类型注解自动推断目标语言类型
|
|
28
|
+
- **依赖管理**:支持声明函数间依赖(deps),自动拓扑排序
|
|
29
|
+
- **异步支持**:支持 async/await 异步调用模式
|
|
30
|
+
- **回退机制**:编译器不可用时自动回退到 Python 实现
|
|
31
|
+
- **运行时管理**:统一的编译器路径、运行时环境配置管理
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## 支持的语言
|
|
36
|
+
|
|
37
|
+
`vools.bridge` 目前支持 **27 种编程语言**:
|
|
38
|
+
|
|
39
|
+
| 语言 | 装饰器 | 异步支持 | 语言类型 | 测试数 | 状态 |
|
|
40
|
+
|------------|----------------------|----------|-------------|--------|--------|
|
|
41
|
+
| C | `@c` | 是 | compiled | — | ✅ 完整 |
|
|
42
|
+
| C++ | `@cpp` | 是 | compiled | — | ✅ 完整 |
|
|
43
|
+
| FreeBASIC | `@freebasic` | 是 | compiled | — | ✅ 完整 |
|
|
44
|
+
| Nim | `@nim` | 是 | compiled | 0 | ✅ 完整 |
|
|
45
|
+
| Go | `@go` | 是 | compiled | — | ✅ 完整 |
|
|
46
|
+
| 仓颉 | `@cangjie` | 是 | compiled | — | ✅ 完整 |
|
|
47
|
+
| Rust | `@rust`, `@rust_module` | 是 | compiled | 46 | ✅ 完整 |
|
|
48
|
+
| Mojo | `@mojo` | 是 | compiled | 37 | ✅ 完整 |
|
|
49
|
+
| MoonBit | `@moonbit` | 是 | compiled | 0 | ✅ 完整 |
|
|
50
|
+
| Zig | `@zig` | 是 | compiled | — | ✅ 完整 |
|
|
51
|
+
| Swift | `@swift`, `@swiftc` | 是 | compiled | 0 | ✅ 完整 |
|
|
52
|
+
| Dart | `@dart` | 是 | compiled | — | ✅ 完整 |
|
|
53
|
+
| Haskell | `@haskell` | 是 | compiled | — | ✅ 完整 |
|
|
54
|
+
| C# | `@csharp` | 是 | dotnet | — | ✅ 完整 |
|
|
55
|
+
| VB.NET | `@vbnet`, `@vb` | 是 | dotnet | 60 | ✅ 完整 |
|
|
56
|
+
| Java | `@java` | 是 | jvm | — | ✅ 完整 |
|
|
57
|
+
| Scala | `@scala`, `@scala_async` | 是 | jvm | 12 | ✅ 完整 |
|
|
58
|
+
| Kotlin | `@kotlin` | 是 | jvm | — | ✅ 完整 |
|
|
59
|
+
| Julia | `@julia` | 是 | interpreted | — | ✅ 完整 |
|
|
60
|
+
| R | `@r`, `@r_module` | 是 | interpreted | 31 | ✅ 完整 |
|
|
61
|
+
| Lua | `@lua`, `@luae` | 是 | interpreted | 12 | ✅ 完整 |
|
|
62
|
+
| Perl | `@perl`, `@pl` | 是 | interpreted | 12 | ✅ 完整 |
|
|
63
|
+
| PHP | `@php`, `@phpe` | 是 | interpreted | 12 | ✅ 完整 |
|
|
64
|
+
| Python | `@python` | 是 | interpreted | — | ✅ 完整 |
|
|
65
|
+
| Ruby | `@ruby` | 是 | interpreted | 12 | ✅ 完整 |
|
|
66
|
+
| Shell | `@shell`, `@sh`, `@bash` | 是 | interpreted | 10 | ✅ 完整 |
|
|
67
|
+
| VBScript | `@vbscript`, `@vbs` | 是 | interpreted | 12 | ✅ 完整 |
|
|
68
|
+
| PowerShell | `@powershell`, `@ps` | 是 | interpreted | 12 | ✅ 完整 |
|
|
69
|
+
| TypeScript | `@ts`, `@typescript` | 是 | interpreted | 13 | ✅ 完整 |
|
|
70
|
+
| Erlang | `@erlang` | 是 | beam | — | ✅ 完整 |
|
|
71
|
+
| Elixir | `@elixir` | 是 | beam | — | ✅ 完整 |
|
|
72
|
+
|
|
73
|
+
> 所有语言均已接入 `LangBridge` 抽象基类和统一装饰器接口,并通过 `LangType` 枚举标识语言类型。异步支持通过 `async_mode=True` 参数或专用 `@{lang}_async` 装饰器提供。各语言详细文档见 `bridge/{lang}/README.md`。
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## 架构设计
|
|
78
|
+
|
|
79
|
+
### 整体架构图
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
┌──────────────────────────────────┐
|
|
83
|
+
│ Python 应用代码 │
|
|
84
|
+
│ (@装饰器 / 直接调用) │
|
|
85
|
+
└───────────────┬──────────────────┘
|
|
86
|
+
│
|
|
87
|
+
┌───────────────▼──────────────────┐
|
|
88
|
+
│ LangBridge (ABC) │
|
|
89
|
+
│ 所有语言的统一抽象基类 │
|
|
90
|
+
│ - decorator() 装饰器工厂 │
|
|
91
|
+
│ - generate_code() 代码生成 │
|
|
92
|
+
│ - compile_code() 编译 │
|
|
93
|
+
│ - call_func() 函数调用 │
|
|
94
|
+
│ - _should_compile() 编译决策 │
|
|
95
|
+
│ - _compile_or_package() 编译/打包 │
|
|
96
|
+
│ - _call_or_execute() 调用/执行 │
|
|
97
|
+
│ - _record_compile() 编译记录 │
|
|
98
|
+
└───────────────┬──────────────────┘
|
|
99
|
+
│
|
|
100
|
+
┌──────────────┬───────────┴──────────┬──────────────┐
|
|
101
|
+
│ │ │ │
|
|
102
|
+
┌────▼────┐ ┌────▼────┐ ┌────▼────┐ ┌────▼────┐
|
|
103
|
+
│ C │ │ Nim │ ... │ Rust │ │ Mojo │
|
|
104
|
+
│ FreeBASIC│ │ Go │ (27种) │ Java │ │ Julia │
|
|
105
|
+
│ C++ │ │ 仓颉 │ │ Scala │ │ R │
|
|
106
|
+
└────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘
|
|
107
|
+
│ │ │ │
|
|
108
|
+
┌────▼──────────────▼──────────────────────▼──────────────▼────┐
|
|
109
|
+
│ 共享核心基础设施 (core/) │
|
|
110
|
+
│ FunctionParser | DepResolver | 编译缓存 | 类型映射 | 序列化 │
|
|
111
|
+
│ CompileMode | CompileTracker | LangType | SigCache │
|
|
112
|
+
└───────────────────────────────────────────────────────────────┘
|
|
113
|
+
│
|
|
114
|
+
┌───────────────▼──────────────────┐
|
|
115
|
+
│ BridgeManager (manager.py) │
|
|
116
|
+
│ 编译器检测 / 路径配置 / 环境设置 │
|
|
117
|
+
│ 状态查询 / 配置持久化 │
|
|
118
|
+
│ │ │
|
|
119
|
+
└───────────────┬──────────────────┘
|
|
120
|
+
│
|
|
121
|
+
┌───────────────▼──────────────────┐
|
|
122
|
+
│ CompileTracker (SQLite) │
|
|
123
|
+
│ 编译记录持久化 / 代码变更检测 │
|
|
124
|
+
│ ~/AppData/Local/vools/ │
|
|
125
|
+
│ bridge_records.db │
|
|
126
|
+
└──────────────────────────────────┘
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### LangBridge 抽象基类
|
|
130
|
+
|
|
131
|
+
`LangBridge` 是所有语言桥接实现的统一抽象基类(定义在 `_base.py`),定义了标准接口规范:
|
|
132
|
+
|
|
133
|
+
**子类必须实现的抽象方法:**
|
|
134
|
+
|
|
135
|
+
| 方法 | 说明 |
|
|
136
|
+
|------|------|
|
|
137
|
+
| `compiler_available() -> bool` | 检测编译器是否可用 |
|
|
138
|
+
| `generate_code(spec: FunctionSpec) -> str` | 生成目标语言源代码 |
|
|
139
|
+
| `compile_code(code, func_name, cache_dir) -> str` | 编译代码,返回库文件路径 |
|
|
140
|
+
| `compile_project(project_dir, entry, output_dir) -> str` | 编译整个项目 |
|
|
141
|
+
| `call_func(lib_path, func_name, args, ret_type) -> Any` | 调用编译后的函数 |
|
|
142
|
+
|
|
143
|
+
**子类可以重写的方法:**
|
|
144
|
+
|
|
145
|
+
| 方法 | 说明 | 默认值 |
|
|
146
|
+
|------|------|--------|
|
|
147
|
+
| `supports_nested_functions() -> bool` | 是否支持函数嵌套 | `True` |
|
|
148
|
+
| `default_cache_dir() -> str` | 默认编译缓存目录 | 系统临时目录 |
|
|
149
|
+
| `is_compiled -> bool` | 是否为编译型语言 | `True` |
|
|
150
|
+
| `lang_type -> str` | 语言类型(LangType 枚举) | `LangType.COMPILED` |
|
|
151
|
+
| `_package_code(code, func_name, cache_dir) -> str` | 解释型语言打包代码 | zip 打包 |
|
|
152
|
+
| `_execute_code(package_path, func_name, args, ret_type) -> Any` | 解释型语言执行代码 | 抛出 NotImplementedError |
|
|
153
|
+
|
|
154
|
+
**核心内部方法(统一编排流程,子类无需重写):**
|
|
155
|
+
|
|
156
|
+
| 方法 | 说明 |
|
|
157
|
+
|------|------|
|
|
158
|
+
| `_should_compile(mode, code, func) -> bool` | 根据 CompileMode 和代码变更决定是否需要编译 |
|
|
159
|
+
| `_compile_or_package(code, func_name, cache_dir) -> str` | 编译或打包(编译型调用 compile_code,解释型调用 _package_code) |
|
|
160
|
+
| `_call_or_execute(lib_path, func_name, args, ret_type) -> Any` | 调用或执行(编译型调用 call_func,解释型调用 _execute_code) |
|
|
161
|
+
| `_record_compile(func, code, lib_path, mode, duration_ms)` | 记录编译信息到 SQLite 数据库 |
|
|
162
|
+
| `_get_tracker() -> CompileTracker` | 获取编译追踪器单例(懒加载) |
|
|
163
|
+
|
|
164
|
+
**公共方法(所有语言共享):**
|
|
165
|
+
|
|
166
|
+
- `decorator()` — 统一装饰器工厂,支持所有模式
|
|
167
|
+
- `check_cache()` / `save_to_cache()` — 编译缓存管理
|
|
168
|
+
- `get_cache_key()` — 基于 MD5 的内容哈希缓存键
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## 核心概念
|
|
173
|
+
|
|
174
|
+
### 1. CompileMode 编译模式
|
|
175
|
+
|
|
176
|
+
`CompileMode` 枚举定义了 7 种编译模式,统一控制桥接装饰器的编译和执行行为:
|
|
177
|
+
|
|
178
|
+
| 模式 | 常量 | 说明 |
|
|
179
|
+
|------|------|------|
|
|
180
|
+
| 正常模式 | `CompileMode.NORMAL` | 命中缓存跳过编译;未命中则编译并执行 |
|
|
181
|
+
| 调试模式 | `CompileMode.DEBUG` | 强制重新编译并执行 |
|
|
182
|
+
| 强制模式 | `CompileMode.FORCE` | 强制重新编译但**不执行** |
|
|
183
|
+
| 仅运行模式 | `CompileMode.ONLY_RUN` | 只在有缓存时执行;没有缓存则报错 |
|
|
184
|
+
| 仅代码模式 | `CompileMode.ONLY_CODE` | 只生成源码,不编译 |
|
|
185
|
+
| 变更编译 | `CompileMode.WHEN_CHANGE_JUST` | 检测到代码变更时编译,不执行 |
|
|
186
|
+
| 变更编译运行 | `CompileMode.WHEN_CHANGE_AND_RUN` | 检测到代码变更时编译并执行 |
|
|
187
|
+
|
|
188
|
+
> **破坏性变更**:v0.6.0 起,`only_code=True` 参数已废弃,请改用 `mode=CompileMode.ONLY_CODE`。
|
|
189
|
+
|
|
190
|
+
详细类型定义和 API 文档请参考 [core/types.py](core/types.py) 及 [core/README.md](core/README.md)。
|
|
191
|
+
|
|
192
|
+
### 2. LangType 语言类型
|
|
193
|
+
|
|
194
|
+
`LangType` 枚举定义了 5 种语言类型,用于分类语言并决定编译产物的处理方式:
|
|
195
|
+
|
|
196
|
+
| 类型 | 常量 | 说明 | 示例语言 |
|
|
197
|
+
|------|------|------|----------|
|
|
198
|
+
| 编译型 | `LangType.COMPILED` | 编译为原生动态库 | C, C++, Rust, Nim, Go, Zig 等 |
|
|
199
|
+
| 解释型 | `LangType.INTERPRETED` | 打包为 zip 并通过解释器执行 | Python, Ruby, Lua, PHP 等 |
|
|
200
|
+
| JVM | `LangType.JVM` | 编译为 JAR 包 | Java, Scala, Kotlin |
|
|
201
|
+
| .NET | `LangType.DOTNET` | 编译为 .NET 程序集 | C# |
|
|
202
|
+
| BEAM | `LangType.BEAM` | 编译为 BEAM 字节码 | Erlang, Elixir |
|
|
203
|
+
|
|
204
|
+
### 3. CompileTracker 编译追踪器
|
|
205
|
+
|
|
206
|
+
`CompileTracker` 是基于 SQLite 的编译记录追踪器,提供:
|
|
207
|
+
|
|
208
|
+
- **编译记录持久化**:记录每次编译的源码 MD5、编译产物路径、编译耗时等
|
|
209
|
+
- **代码变更检测**:通过 `is_changed(record_key, source_md5)` 检测代码是否变更
|
|
210
|
+
- **WHEN_CHANGE 模式支持**:为 `WHEN_CHANGE_JUST` 和 `WHEN_CHANGE_AND_RUN` 模式提供底层支持
|
|
211
|
+
- **错误日志**:记录编译失败的错误信息
|
|
212
|
+
|
|
213
|
+
数据库位置:
|
|
214
|
+
- Windows: `%LOCALAPPDATA%/vools/bridge_records.db`
|
|
215
|
+
- Linux/macOS: `~/.local/share/vools/bridge_records.db`
|
|
216
|
+
|
|
217
|
+
```python
|
|
218
|
+
from vools.bridge import CompileTracker, get_tracker
|
|
219
|
+
|
|
220
|
+
# 获取全局单例
|
|
221
|
+
tracker = get_tracker()
|
|
222
|
+
|
|
223
|
+
# 查询编译记录
|
|
224
|
+
record = tracker.get_record('mymodule:add_numbers')
|
|
225
|
+
|
|
226
|
+
# 检查代码是否变更
|
|
227
|
+
if tracker.is_changed('mymodule:add_numbers', source_md5):
|
|
228
|
+
print("代码已变更,需要重新编译")
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### 4. deps 依赖
|
|
232
|
+
|
|
233
|
+
当一个桥接函数需要调用其他辅助函数时,通过 `deps` 参数声明依赖:
|
|
234
|
+
|
|
235
|
+
```python
|
|
236
|
+
def helper(x: int) -> int:
|
|
237
|
+
return "return x * 2"
|
|
238
|
+
|
|
239
|
+
@bridge.decorator(deps=[helper])
|
|
240
|
+
def compute(x: int) -> int:
|
|
241
|
+
return "return helper(x) + 1"
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
框架会自动:
|
|
245
|
+
- 提取依赖函数的代码和类型信息
|
|
246
|
+
- 按依赖关系进行拓扑排序
|
|
247
|
+
- 将所有依赖函数一并编译进共享库
|
|
248
|
+
|
|
249
|
+
### 5. module_code 模块级代码
|
|
250
|
+
|
|
251
|
+
通过 `module_code` 参数可以注入模块级别的代码(如类型定义、全局变量、头文件包含等):
|
|
252
|
+
|
|
253
|
+
```python
|
|
254
|
+
@bridge.decorator(module_code="""
|
|
255
|
+
#include <math.h>
|
|
256
|
+
#define PI 3.1415926
|
|
257
|
+
""")
|
|
258
|
+
def circle_area(r: float) -> float:
|
|
259
|
+
return "return PI * r * r"
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
### 6. 编译缓存
|
|
263
|
+
|
|
264
|
+
框架内置基于内容哈希的编译缓存机制:
|
|
265
|
+
|
|
266
|
+
- 缓存键 = `函数名 + MD5(源代码)`
|
|
267
|
+
- 首次调用编译后,后续相同代码直接复用缓存
|
|
268
|
+
- 缓存目录默认为系统临时目录,可通过 `cache_dir` 参数自定义
|
|
269
|
+
- 项目模式下会计算项目所有源文件的内容哈希
|
|
270
|
+
|
|
271
|
+
### 7. 异步模式
|
|
272
|
+
|
|
273
|
+
设置 `async_mode=True` 后,装饰器返回异步函数,编译和调用在线程池中执行:
|
|
274
|
+
|
|
275
|
+
```python
|
|
276
|
+
@bridge.decorator(async_mode=True)
|
|
277
|
+
async def heavy_compute(x: int) -> int:
|
|
278
|
+
return "..." # 耗时计算
|
|
279
|
+
|
|
280
|
+
result = await heavy_compute(100)
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
异步模式使用 `ThreadPoolExecutor`(默认 4 个工作线程),避免阻塞事件循环。
|
|
284
|
+
|
|
285
|
+
### 8. fallback 回退函数
|
|
286
|
+
|
|
287
|
+
当编译器不可用或编译失败时,自动调用 `fallback` 参数指定的 Python 函数:
|
|
288
|
+
|
|
289
|
+
```python
|
|
290
|
+
def py_fib(n):
|
|
291
|
+
if n <= 1:
|
|
292
|
+
return 1
|
|
293
|
+
return py_fib(n-1) + py_fib(n-2)
|
|
294
|
+
|
|
295
|
+
@bridge.decorator(fallback=py_fib)
|
|
296
|
+
def fib(n: int) -> int:
|
|
297
|
+
return "..." # 目标语言实现
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
## 使用模式
|
|
303
|
+
|
|
304
|
+
通过 `mode` 参数(`CompileMode` 枚举)控制编译和执行行为,支持以下使用模式:
|
|
305
|
+
|
|
306
|
+
### 模式一:单函数装饰器模式(默认 NORMAL)
|
|
307
|
+
|
|
308
|
+
最常用的模式,每个 Python 函数对应一个目标语言函数。默认使用 `CompileMode.NORMAL`,首次调用时编译并缓存,后续调用直接复用缓存。
|
|
309
|
+
|
|
310
|
+
**特点:**
|
|
311
|
+
- 即用即编译,首次调用时触发编译
|
|
312
|
+
- 自动类型映射(从 Python 注解推断目标语言类型)
|
|
313
|
+
- 支持 deps 依赖、module_code、编译缓存、fallback
|
|
314
|
+
- 支持同步和异步调用
|
|
315
|
+
|
|
316
|
+
**适用场景:** 单函数性能优化、算法加速、小型工具函数
|
|
317
|
+
|
|
318
|
+
### 模式二:仅代码模式(ONLY_CODE)
|
|
319
|
+
|
|
320
|
+
只生成目标语言代码,不进行编译和调用。用于代码生成场景。
|
|
321
|
+
|
|
322
|
+
```python
|
|
323
|
+
from vools.bridge import freebasic, CompileMode
|
|
324
|
+
|
|
325
|
+
@freebasic.decorator(
|
|
326
|
+
mode=CompileMode.ONLY_CODE, # 仅代码模式
|
|
327
|
+
output_file="output/hello.bas", # 输出文件路径
|
|
328
|
+
write_mode="overwrite", # 写入模式
|
|
329
|
+
prefix="' 自动生成的代码\n", # 代码前缀
|
|
330
|
+
)
|
|
331
|
+
def hello(name: str) -> str:
|
|
332
|
+
return """
|
|
333
|
+
Print "Hello, " & name
|
|
334
|
+
"""
|
|
335
|
+
|
|
336
|
+
# 调用后返回输出文件路径
|
|
337
|
+
path = hello("World")
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
### 模式三:调试模式(DEBUG)
|
|
341
|
+
|
|
342
|
+
强制重新编译并执行,忽略缓存。适合开发调试阶段。
|
|
343
|
+
|
|
344
|
+
```python
|
|
345
|
+
@bridge.decorator(mode=CompileMode.DEBUG)
|
|
346
|
+
def my_func(x: int) -> int:
|
|
347
|
+
return "..."
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
### 模式四:强制编译模式(FORCE)
|
|
351
|
+
|
|
352
|
+
强制重新编译但**不执行**函数,返回编译产物路径。适合 CI/CD 或预编译场景。
|
|
353
|
+
|
|
354
|
+
```python
|
|
355
|
+
@bridge.decorator(mode=CompileMode.FORCE)
|
|
356
|
+
def my_func(x: int) -> int:
|
|
357
|
+
return "..."
|
|
358
|
+
|
|
359
|
+
lib_path = my_func(42) # 返回 .dll/.so 路径,不执行
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
### 模式五:仅运行模式(ONLY_RUN)
|
|
363
|
+
|
|
364
|
+
只在有缓存时执行,没有缓存则抛出 `RuntimeError`。适合生产环境确保使用预编译产物。
|
|
365
|
+
|
|
366
|
+
```python
|
|
367
|
+
@bridge.decorator(mode=CompileMode.ONLY_RUN)
|
|
368
|
+
def my_func(x: int) -> int:
|
|
369
|
+
return "..."
|
|
370
|
+
|
|
371
|
+
result = my_func(42) # 缓存存在则执行,否则报错
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
### 模式六:变更感知模式(WHEN_CHANGE)
|
|
375
|
+
|
|
376
|
+
基于 SQLite 的 `CompileTracker` 检测代码变更,仅在代码修改时触发编译。
|
|
377
|
+
|
|
378
|
+
```python
|
|
379
|
+
from vools.bridge import CompileMode
|
|
380
|
+
|
|
381
|
+
# 仅编译不执行(适合 CI 预编译)
|
|
382
|
+
@c.decorator(mode=CompileMode.WHEN_CHANGE_JUST)
|
|
383
|
+
def heavy_compute(x: int) -> int:
|
|
384
|
+
return "..."
|
|
385
|
+
lib_path = heavy_compute(100) # 代码变更时编译,否则使用缓存
|
|
386
|
+
|
|
387
|
+
# 编译并执行(适合开发迭代)
|
|
388
|
+
@c.decorator(mode=CompileMode.WHEN_CHANGE_AND_RUN)
|
|
389
|
+
def compute(x: int) -> int:
|
|
390
|
+
return "..."
|
|
391
|
+
result = compute(100) # 代码变更时编译并运行,否则直接使用缓存运行
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
### 模式七:project 项目模式
|
|
395
|
+
|
|
396
|
+
编译整个项目目录,支持多文件项目。入口可以是 `main`(生成可执行文件)或指定函数名(生成共享库)。
|
|
397
|
+
|
|
398
|
+
**特点:**
|
|
399
|
+
- 编译整个项目目录下的所有源文件
|
|
400
|
+
- 基于全部源文件内容哈希的缓存
|
|
401
|
+
- `entry='main'` 生成可执行文件
|
|
402
|
+
- `entry='其他函数名'` 生成共享库并调用指定函数
|
|
403
|
+
- 支持同步和异步调用
|
|
404
|
+
|
|
405
|
+
**适用场景:** 大型项目集成、完整应用构建、已有项目复用
|
|
406
|
+
|
|
407
|
+
---
|
|
408
|
+
|
|
409
|
+
## 快速上手
|
|
410
|
+
|
|
411
|
+
### 示例:用 C 语言计算斐波那契数列
|
|
412
|
+
|
|
413
|
+
```python
|
|
414
|
+
from vools.bridge import c
|
|
415
|
+
|
|
416
|
+
# 定义回退函数(Python 实现)
|
|
417
|
+
def py_fib(n: int) -> int:
|
|
418
|
+
if n <= 1:
|
|
419
|
+
return 1
|
|
420
|
+
return py_fib(n - 1) + py_fib(n - 2)
|
|
421
|
+
|
|
422
|
+
# 使用装饰器定义 C 语言实现
|
|
423
|
+
@c.decorator(
|
|
424
|
+
fallback=py_fib, # 编译器不可用时回退到 Python
|
|
425
|
+
module_code="""
|
|
426
|
+
#include <stdint.h>
|
|
427
|
+
""",
|
|
428
|
+
)
|
|
429
|
+
def fib(n: int) -> int:
|
|
430
|
+
return """
|
|
431
|
+
if (n <= 1) {
|
|
432
|
+
return 1;
|
|
433
|
+
}
|
|
434
|
+
return fib(n - 1) + fib(n - 2);
|
|
435
|
+
"""
|
|
436
|
+
|
|
437
|
+
# 调用(首次调用自动编译)
|
|
438
|
+
result = fib(20)
|
|
439
|
+
print(f"fib(20) = {result}")
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
### 示例:FreeBASIC 仅代码模式
|
|
443
|
+
|
|
444
|
+
```python
|
|
445
|
+
from vools.bridge import freebasic, CompileMode
|
|
446
|
+
|
|
447
|
+
@freebasic.decorator(
|
|
448
|
+
mode=CompileMode.ONLY_CODE, # 启用仅代码模式
|
|
449
|
+
output_file="output/hello.bas", # 输出文件路径
|
|
450
|
+
write_mode="overwrite", # 写入模式
|
|
451
|
+
prefix="' 自动生成的代码\n", # 代码前缀
|
|
452
|
+
)
|
|
453
|
+
def hello(name: str) -> str:
|
|
454
|
+
return """
|
|
455
|
+
Print "Hello, " & name
|
|
456
|
+
"""
|
|
457
|
+
|
|
458
|
+
# 调用后返回输出文件路径
|
|
459
|
+
path = hello("World")
|
|
460
|
+
print(f"代码已写入: {path}")
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
### 示例:异步调用 + 项目模式
|
|
464
|
+
|
|
465
|
+
```python
|
|
466
|
+
import asyncio
|
|
467
|
+
from vools.bridge import rust
|
|
468
|
+
|
|
469
|
+
@rust.decorator(
|
|
470
|
+
project_dir="./my_rust_project", # 项目目录
|
|
471
|
+
entry="main", # 入口函数(生成可执行文件)
|
|
472
|
+
async_mode=True, # 异步模式
|
|
473
|
+
)
|
|
474
|
+
def my_app():
|
|
475
|
+
pass # 函数体留空,使用项目目录中的代码
|
|
476
|
+
|
|
477
|
+
async def main():
|
|
478
|
+
# 异步编译并运行
|
|
479
|
+
returncode, stdout, stderr = await my_app()
|
|
480
|
+
print(f"退出码: {returncode}")
|
|
481
|
+
print(f"输出: {stdout}")
|
|
482
|
+
|
|
483
|
+
asyncio.run(main())
|
|
484
|
+
```
|
|
485
|
+
|
|
486
|
+
### 检查语言可用性
|
|
487
|
+
|
|
488
|
+
```python
|
|
489
|
+
from vools.bridge import list_available, is_available, get_version
|
|
490
|
+
|
|
491
|
+
# 列出所有已注册的语言
|
|
492
|
+
all_langs = list_languages()
|
|
493
|
+
print(f"支持的语言: {all_langs}")
|
|
494
|
+
|
|
495
|
+
# 列出当前可用的语言
|
|
496
|
+
available = list_available()
|
|
497
|
+
print(f"可用的语言: {available}")
|
|
498
|
+
|
|
499
|
+
# 检查特定语言
|
|
500
|
+
if is_available("rust"):
|
|
501
|
+
print(f"Rust 版本: {get_version('rust')}")
|
|
502
|
+
```
|
|
503
|
+
|
|
504
|
+
---
|
|
505
|
+
|
|
506
|
+
## API 概览
|
|
507
|
+
|
|
508
|
+
### 顶层导出 (`vools.bridge`)
|
|
509
|
+
|
|
510
|
+
**核心基础设施:**
|
|
511
|
+
|
|
512
|
+
| 名称 | 类型 | 说明 |
|
|
513
|
+
|------|------|------|
|
|
514
|
+
| `bridge_function` | 装饰器 | 通用桥接函数装饰器 |
|
|
515
|
+
| `bridge_module` | 装饰器 | 桥接模块(类)装饰器 |
|
|
516
|
+
| `bridge_func_name` | 装饰器 | 指定底层函数名 |
|
|
517
|
+
| `LibraryLoader` | 类 | 共享库加载器 |
|
|
518
|
+
| `SharedLibrary` | 类 | 共享库封装 |
|
|
519
|
+
| `load_library` | 函数 | 加载指定语言的共享库 |
|
|
520
|
+
| `load_from_path` | 函数 | 从路径加载共享库 |
|
|
521
|
+
| `CTypeMapper` | 类 | Python 与 ctypes 类型映射 |
|
|
522
|
+
| `Serializer` | 类 | 序列化工具 |
|
|
523
|
+
| `CompileMode` | 枚举 | 编译模式(7 种) |
|
|
524
|
+
| `CompileTracker` | 类 | SQLite 编译记录追踪器 |
|
|
525
|
+
| `get_tracker` | 函数 | 获取 CompileTracker 单例 |
|
|
526
|
+
| `LangType` | 枚举 | 语言类型(5 种) |
|
|
527
|
+
|
|
528
|
+
**管理器 API:**
|
|
529
|
+
|
|
530
|
+
| 名称 | 类型 | 说明 |
|
|
531
|
+
|------|------|------|
|
|
532
|
+
| `manager` | 单例 | BridgeManager 全局实例 |
|
|
533
|
+
| `BridgeManager` | 类 | 跨语言桥接统一管理器 |
|
|
534
|
+
| `LanguageConfig` | 数据类 | 语言配置 |
|
|
535
|
+
| `LanguageStatus` | 数据类 | 语言运行时状态 |
|
|
536
|
+
| `register_language()` | 函数 | 注册语言配置 |
|
|
537
|
+
| `is_available()` | 函数 | 检查语言是否可用 |
|
|
538
|
+
| `get_status()` | 函数 | 获取语言详细状态 |
|
|
539
|
+
| `get_compiler_path()` | 函数 | 获取编译器路径 |
|
|
540
|
+
| `get_version()` | 函数 | 获取语言版本 |
|
|
541
|
+
| `setup_runtime()` | 函数 | 设置运行时环境 |
|
|
542
|
+
| `list_languages()` | 函数 | 列出已注册语言 |
|
|
543
|
+
| `list_available()` | 函数 | 列出可用语言 |
|
|
544
|
+
| `set_compiler_path()` | 函数 | 设置编译器路径 |
|
|
545
|
+
| `add_compiler_path()` | 函数 | 添加编译器路径 |
|
|
546
|
+
| `set_runtime_path()` | 函数 | 设置运行时库路径 |
|
|
547
|
+
| `add_runtime_path()` | 函数 | 添加运行时库路径 |
|
|
548
|
+
| `save_config()` | 函数 | 保存配置到文件 |
|
|
549
|
+
| `load_config()` | 函数 | 从文件加载配置 |
|
|
550
|
+
|
|
551
|
+
### 各语言模块统一接口
|
|
552
|
+
|
|
553
|
+
每个语言模块都提供一致的装饰器接口:
|
|
554
|
+
|
|
555
|
+
```python
|
|
556
|
+
# 装饰器(所有语言通用)
|
|
557
|
+
@lang.decorator(
|
|
558
|
+
mode=CompileMode.NORMAL, # 编译模式 (NORMAL/DEBUG/FORCE/ONLY_RUN/ONLY_CODE/WHEN_CHANGE_JUST/WHEN_CHANGE_AND_RUN)
|
|
559
|
+
deps=None, # 依赖函数列表
|
|
560
|
+
module_code=None, # 模块级代码
|
|
561
|
+
async_mode=False, # 异步模式
|
|
562
|
+
fallback=None, # 回退函数
|
|
563
|
+
cache_dir=None, # 缓存目录
|
|
564
|
+
ret_type=None, # 返回类型覆盖
|
|
565
|
+
output_file=None, # 输出文件路径(仅代码模式)
|
|
566
|
+
write_mode='overwrite', # 写入模式(仅代码模式)
|
|
567
|
+
prefix='', # 代码前缀(仅代码模式)
|
|
568
|
+
suffix='', # 代码后缀(仅代码模式)
|
|
569
|
+
project_dir=None, # 项目目录(项目模式)
|
|
570
|
+
entry='main', # 入口函数(项目模式)
|
|
571
|
+
)
|
|
572
|
+
def my_func(x: int) -> int:
|
|
573
|
+
return "..." # 目标语言代码
|
|
574
|
+
```
|
|
575
|
+
|
|
576
|
+
---
|
|
577
|
+
|
|
578
|
+
## 子模块结构
|
|
579
|
+
|
|
580
|
+
```
|
|
581
|
+
vools/bridge/
|
|
582
|
+
├── __init__.py # 包入口,延迟导入各语言模块
|
|
583
|
+
├── README.md # 本文件
|
|
584
|
+
├── _base.py # LangBridge 抽象基类 + 工具类
|
|
585
|
+
│ ├── FunctionSpec # 函数规格数据类
|
|
586
|
+
│ ├── CompileResult # 编译结果数据类
|
|
587
|
+
│ ├── FunctionParser # 函数解析器
|
|
588
|
+
│ ├── DepResolver # 依赖解析器
|
|
589
|
+
│ └── LangBridge # 抽象基类
|
|
590
|
+
├── manager.py # BridgeManager 统一管理器
|
|
591
|
+
│ ├── LanguageConfig # 语言配置
|
|
592
|
+
│ ├── LanguageStatus # 语言状态
|
|
593
|
+
│ └── BridgeManager # 管理器主类
|
|
594
|
+
├── core/ # 核心基础设施
|
|
595
|
+
│ ├── __init__.py
|
|
596
|
+
│ ├── loader.py # 共享库加载器
|
|
597
|
+
│ ├── types.py # 类型映射 + CompileMode + LangType
|
|
598
|
+
│ ├── tracker.py # CompileTracker SQLite 编译记录追踪
|
|
599
|
+
│ ├── sigcache.py # 签名缓存(BridgeSigCache)
|
|
600
|
+
│ ├── decorators.py # 通用装饰器
|
|
601
|
+
│ └── serialization.py # 序列化工具
|
|
602
|
+
├── c/ # C 语言桥接
|
|
603
|
+
├── cpp/ # C++ 语言桥接
|
|
604
|
+
├── freebasic/ # FreeBASIC 语言桥接
|
|
605
|
+
├── nim/ # Nim 语言桥接
|
|
606
|
+
├── go/ # Go 语言桥接
|
|
607
|
+
├── cangjie/ # 仓颉语言桥接
|
|
608
|
+
├── rust/ # Rust 语言桥接
|
|
609
|
+
├── mojo/ # Mojo 语言桥接
|
|
610
|
+
├── csharp/ # C# 语言桥接
|
|
611
|
+
├── java/ # Java 语言桥接
|
|
612
|
+
├── scala/ # Scala 语言桥接
|
|
613
|
+
├── ruby/ # Ruby 语言桥接
|
|
614
|
+
├── julia/ # Julia 语言桥接
|
|
615
|
+
├── r/ # R 语言桥接
|
|
616
|
+
├── moonbit/ # MoonBit 语言桥接
|
|
617
|
+
├── zig/ # Zig 语言桥接
|
|
618
|
+
├── vbnet/ # VB.NET 语言桥接
|
|
619
|
+
├── kotlin/ # Kotlin 语言桥接
|
|
620
|
+
├── swift/ # Swift 语言桥接
|
|
621
|
+
├── dart/ # Dart 语言桥接
|
|
622
|
+
├── lua/ # Lua 语言桥接
|
|
623
|
+
├── perl/ # Perl 语言桥接
|
|
624
|
+
├── php/ # PHP 语言桥接
|
|
625
|
+
├── typescript/ # TypeScript 语言桥接
|
|
626
|
+
├── powershell/ # PowerShell 语言桥接
|
|
627
|
+
├── vbscript/ # VBScript 语言桥接
|
|
628
|
+
├── shell/ # Shell 语言桥接
|
|
629
|
+
├── erlang/ # Erlang 语言桥接
|
|
630
|
+
├── elixir/ # Elixir 语言桥接
|
|
631
|
+
└── haskell/ # Haskell 语言桥接
|
|
632
|
+
```
|
|
633
|
+
|
|
634
|
+
### 各语言模块典型结构
|
|
635
|
+
|
|
636
|
+
每个语言模块通常包含以下文件:
|
|
637
|
+
|
|
638
|
+
| 文件 | 说明 |
|
|
639
|
+
|------|------|
|
|
640
|
+
| `__init__.py` | 模块入口,导出公共 API |
|
|
641
|
+
| `compiler.py` | 编译器封装、编译逻辑 |
|
|
642
|
+
| `loader.py` / `_loader.py` | 共享库加载、函数调用 |
|
|
643
|
+
| `types.py` | 类型映射(Python ↔ 目标语言) |
|
|
644
|
+
| `templates.py` | 代码生成模板 |
|
|
645
|
+
| `decorator.py` | 语言特定装饰器(可选) |
|
|
646
|
+
| `transport.py` | 数据传输层(部分语言) |
|
|
647
|
+
|
|
648
|
+
> **注意**:不同语言模块的内部结构可能略有差异,但对外暴露的装饰器接口是统一的。
|