乐于分享
好东西不私藏

常識改変!Bun 重写合并:新的软件工程规律

常識改変!Bun 重写合并:新的软件工程规律

前情提要:

一、6 天、96 万行 Rust、直接合并?Claude Code 被 Bun 的内存泄漏拖垮后,Bun 让 Claude 亲手重写了自己

二、https://lilting.ch/en/articles/bun-zig-rust-ai-port “2026 年 5 月 14 日,PR #30412(标题为 Rewrite Bun in Rust )合并到 oven-sh/bun 主分支。驱动 Bun 的 Zig 实现已从主分支移除,由 Rust 取而代之。该 PR 从 claude/phase-a-port 分支带来了 6755 次提交、2188 个文件变更、新增 1,009,257 行代码、删除 4,024 行代码。

本文记录我看到这条新闻的情绪过山车。

阶段1:堪比:“奥特曼首次体验GPT-5!被吓到眩晕瘫坐,那一刻就像看到原子弹爆炸”

A社天下第一!Claude 天下第一!码工吓破胆!软件工程终于从手工业编程了重工业!人类马上要飞升了!

阶段2:违背常识:如此巨大的PR,“居然合并了”?谁点的合并,不把被CoreDev打出屎来吗?这种激进的合并已经不是一般的“艺高人胆大”能概括得了的了,要出重拳!

“那么 Bu用 Rewrite Bun in Rust 是怎么一回事呢?小编也很震惊

图1. 前情提要-一 InfoQ公众号文章的评论区。

阶段3:让我来看看怎么个事

时间线梳理和里程碑

20260426 还没提交,

图3. Zig 严格禁止AI提代码。

20260513 发布了。

图4, Bun v1.3.14 堂堂发布

https://x.com/bunjavascript/status/2054412812878033309

20260514 有用户问候开发组,看上去是一个运行时错误

图5, hey guys what are we doing

https://x.com/theCTO/status/2054662612537991357/photo/1

阶段4:但是 bun v1.3.14 真的合并了。他们之后有可能回滚(rollback)吗?我想应该不会了吧,开弓没有回头箭?

20260514 之后已经过了几天 ,一翻issue 之后,在发布日之后创建的且仍然open的 issue 仅仅只有2页多点,并没有我想象中的issue爆炸的情形。

https://github.com/oven-sh/bun/issues?q=is%3Aissue%20state%3Aopen&page=2

图6. open issues 并没有我想象得多到数不尽、翻不完。

阶段5:怀疑人生。BLOW MY MIND?! HOW COULD IT EVEN BE POSIBBLE?!

Bun v1.3.14 完全用 AI 进行了 Zig 到 Rust 的重写。这一变更改变了我从前的软件工程常识,让我胆寒。物理学不存在了。

《人月神话》烧给祖师奶奶,大家把键盘砸掉,洗手不干了。

图7,格蕾丝·赫柏(Grace Murray Hopper)

图8,弗雷德里克·布鲁克斯(Frederick Phillips Brooks Jr.)

阶段6: Bun v1.3.14和PR#30412 中我能学到什么 20260517?他们怎么做到的?我能做到吗? 我能复现吗?#法拉第学习法

20260517 我打开这个pr,发现大到连 GitHub 都无法正常显示。

https://github.com/oven-sh/bun/pull/30412

图9. This page is taking too long to load.

Gemini 给了我有关 GLAUDE.md 的线索:

请看 Bun 官方仓库在合并后立马更新的 CLAUDE.md(这是提供给 Anthropic Claude Code 智能体看的架构行动指南)。它里面有一段人类写给 AI(以及人类贡献者)的 Code Review Self-Check 规范:

"Before writing code that makes a non-obvious choice, pre-emptively ask 'why this and not the alternative?' If you can't answer, research until you can — don't write first and justify later."(在写下任何非显而易见的权衡代码前,先预先问自己‘为什么选这个而不是替代方案?’如果你答不上来,先去研究直到搞懂为止——绝对不要先写代码再去强行解释。)

看到了吗?AI 可以凭借恐怖的吞吐量把 Zig 翻译成 Rust,可以疯狂跑 CI 依靠报错信息自愈语法缺陷,但它无法替系统决定“为什么这个地方要用这个方案,而不是另外一个”。

这次的合并不是“AI 打败了人类”,而是人类利用 AI 极其高效地卸下了‘跨语言重构语法’的底层苦力活,完成了长久以来因为成本太高而不敢做的技术栈跨越

https://gemini.google.com/share/16c273d7e0b6

Bun 官方仓库的 CLAUDE.md 

This is the Bun repository - an all-in-one JavaScript runtime & toolkit designed for speed, with a bundler, test runner, and Node.js-compatible package manager. It's written primarily in Rust with C++ for JavaScriptCore integration, powered by WebKit's JavaScriptCore engine.## Building and Running Bun### Build Commands- **Build Bun**`bun bd`  - Creates a debug build at `./build/debug/bun-debug`  - **CRITICAL**: do not set a timeout when running `bun bd`- **Run tests with your debug build**`bun bd test <test-file>`  - **CRITICAL**: Never use `bun test` directly - it won't include your changes- **Run any command with debug build**`bun bd <command>`- **Run with JavaScript exception scope verification**: `BUN_JSC_validateExceptionChecks=1BUN_JSC_dumpSimulatedThrows=1 bun bd <command>`Tip: Bun is already installed and in $PATH. The `bd` subcommand is a package.json script.**All build scripts support build-then-exec.** Any `bun run build*` command (and `bun bd`, and `bun scripts/build.ts` directly) accepts trailing args which are passed to the built executable after building. This is the recommended way to run your build — you never invoke `./build/debug/bun-debug` directly.```shbun bd test foo.test.ts                    # debug build + quiet debug logsbun run build test foo.test.ts             # debug buildbun run build:release -p 'Bun.version'     # release buildbun run build:local run script.ts          # debug build with local WebKit```When exec args are present, build output is suppressed unless the build fails — you see only the binary's output. Build flags (e.g. `--asan=off`) go before the exec args; see `scripts/build.ts` header for the full arg routing rules.**Comparing builds:** normally use the default `build/<profile>/` dir. If you need to preserve a build as a comparison point (rare — e.g. benchmarking before/after a change), `--build-dir` parks it somewhere the next build won't overwrite:```shbun run build:release --build-dir=build/baseline```### Changes that don't require a buildEdits to **TypeScript type declarations** (`packages/bun-types/**/*.d.ts`) do not touch any compiled code, so `bun bd` is unnecessary. The types test just packs the `.d.ts` files and runs `tsc` against fixtures — it never executes your build. Run it directly with the system Bun:```shbun test test/integration/bun-types/bun-types.test.ts```This is an explicit exception to the "never use `bun test` directly" rule. There are no native changes for a debug build to pick up, so don't wait on one.## Testing### Running Tests- **Single test file**`bun bd test test/js/bun/http/serve.test.ts`- **Fuzzy match test file**`bun bd test http/serve.test.ts`- **With filter**`bun bd test test/js/bun/http/serve.test.ts -t "should handle"`### Test Organization**Default: add your test to the existing test file for the code you're changing.** Do not create a new file. A fetch bug goes in `test/js/web/fetch/fetch.test.ts`, a `Bun.serve` bug goes in `test/js/bun/http/serve.test.ts`, and so on. Keeping tests next to related coverage is what makes them discoverable and prevents duplicated setup.- `test/js/bun/` - Bun-specific API tests (http, crypto, ffi, shell, etc.)- `test/js/node/` - Node.js compatibility tests- `test/js/web/` - Web API tests (fetch, WebSocket, streams, etc.)- `test/cli/` - CLI command tests (install, run, test, etc.)- `test/bundler/` - Bundler and transpiler tests. Use `itBundled` helper.- `test/integration/` - End-to-end integration tests- `test/napi/` - N-API compatibility tests- `test/v8/` - V8 C++ API compatibility tests**Exception:** `test/regression/issue/${issueNumber}.test.ts` is reserved for bugs that have a GitHub issue number **and** are true regressions (worked in a previous release, then broke). An issue number alone is not enough — if the behavior was never correct, it's not a regression and the test belongs in the existing file for that module. The issue number must be **REAL**, not a placeholder.### Writing TestsTests use Bun's Jest-compatible test runner with proper test fixtures.- For **single-file tests**, prefer `-e` over `tempDir`.- For **multi-file tests**, prefer `tempDir` and `Bun.spawn`.```typescriptimport { test, expect } from "bun:test";import { bunEnv, bunExe, normalizeBunSnapshot, tempDir } from "harness";test("(single-file test) my feature", async () => {  await using proc = Bun.spawn({    cmd: [bunExe(), "-e", "console.log('Hello, world!')"],    env: bunEnv,  });  const [stdout, stderr, exitCode] = await Promise.all([    proc.stdout.text(),    proc.stderr.text(),    proc.exited,  ]);  expect(normalizeBunSnapshot(stdout)).toMatchInlineSnapshot(`"Hello, world!"`);  expect(exitCode).toBe(0);});test("(multi-file test) my feature", async () => {  // Create temp directory with test files  using dir = tempDir("test-prefix", {    "index.js": `import { foo } from "./foo.ts"; foo();`,    "foo.ts": `export function foo() { console.log("foo"); }`,  });  // Spawn Bun process  await using proc = Bun.spawn({    cmd: [bunExe(), "index.js"],    env: bunEnv,    cwd: String(dir),    stderr: "pipe",  });  const [stdout, stderr, exitCode] = await Promise.all([    proc.stdout.text(),    proc.stderr.text(),    proc.exited,  ]);  // Prefer snapshot tests over expect(stdout).toBe("hello\n");  expect(normalizeBunSnapshot(stdout, dir)).toMatchInlineSnapshot(`"hello"`);  // Assert the exit code last. This gives you a more useful error message on test failure.  expect(exitCode).toBe(0);});```- Always use `port: 0`. Do not hardcode ports. Do not use your own random port number function.- Use `normalizeBunSnapshot` to normalize snapshot output of the test.- NEVER write tests that check for no "panic" or "uncaught exception" or similar in the test output. These tests will never fail in CI.- Use `tempDir` from `"harness"` to create a temporary directory. **Do not** use `tmpdirSync` or `fs.mkdtempSync` to create temporary directories.- When spawning processes, tests should expect(stdout).toBe(...) BEFORE expect(exitCode).toBe(0). This gives you a more useful error message on test failure.- **CRITICAL**: Do not write flaky tests. Do not use `setTimeout` in tests. Instead, `await` the condition to be met. You are not testing the TIME PASSING, you are testing the CONDITION.- **CRITICAL**: Verify your test fails with `USE_SYSTEM_BUN=1 bun test <file>` and passes with `bun bd test <file>`. Your test is NOT VALID if it passes with `USE_SYSTEM_BUN=1`.## Code Architecture### Language Structure- **Rust code** (`src/**/*.rs`): Core runtime, JavaScript bindings, bundler, package manager. This is what compiles and ships.- **C++ code** (`src/jsc/bindings/*.cpp`): JavaScriptCore bindings, Web APIs- **TypeScript** (`src/js/`): Built-in JavaScript modules with special syntax (see JavaScript Modules section)- **Generated code**: Many `.rs` and `.cpp` files are auto-generated from `.classes.ts` and other sources. The build regenerates them automatically when their inputs change.You will see `.zig` files alongside many `.rs` files (e.g. `fetch.zig` next to `fetch.rs`). These are the **original Zig implementation, kept only as a porting reference** — they are **not compiled** and **not shipped**. New code goes in `.rs`. When fixing a bug or porting a behavior, the `.zig` sibling is the source of truth for *intended semantics*: read it, then make the `.rs` match. Never add new behavior to a `.zig` file.### Core Source OrganizationThe Rust side is a Cargo workspace of ~200 crates rooted at `Cargo.toml`. The key ones:#### Foundation crates- `src/bun_core/` - The `bun.*`-namespace foundation: strings/`String` (`string/`), formatting (`fmt.rs`), logging (`output.rs`), feature flags, env vars, allocator helpers- `src/sys/` - Cross-platform syscall wrappers (`file.rs``dir.rs``fd.rs``Error.rs``tmp.rs`) — the `bun.sys` equivalent- `src/collections/``src/threading/``src/paths/``src/semver/``src/sourcemap/` - shared utilities#### Runtime Core (`src/`)- `src/bun_bin/` - Cargo entrypoint; produces `libbun_rust.a`, linked into the final binary- `src/runtime/cli/` - CLI argument parsing and command dispatch- `src/js_parser/``src/js_printer/` - JavaScript/TypeScript parsing and printing (each is its own crate; the lexer is `src/js_parser/lexer.rs`)- `src/transpiler/` - Wrapper around the parser/printer with sourcemap support- `src/resolver/` - Module resolution system- `src/ast/` - AST node types and arena allocation#### JavaScript Runtime (`src/jsc/` + `src/runtime/`)- `src/jsc/bindings/` - C++ JavaScriptCore bindings (generated classes from `.classes.ts` + manual bindings)- `src/jsc/` - Rust-side JSC glue (`VirtualMachine.rs``web_worker.rs``event_loop.rs`, FFI imports)- `src/runtime/api/` - Bun-specific JS-visible APIs (`BunObject.rs``JSBundler.rs``Glob``Archive`, …)- `src/runtime/server/` - `Bun.serve` HTTP/WebSocket server- `src/runtime/node/` - Node.js compatibility layer (fs, path, process, Buffer, …)- `src/runtime/crypto/` - WebCrypto + `node:crypto` (`EVP.rs``HMAC.rs``CryptoHasher.rs`, …)- `src/runtime/webcore/` - Web API implementations (`fetch.rs``streams.rs``Blob.rs``Response.rs``Request.rs`, …)- `src/event_loop/` - Event loop and task management#### Build Tools & Package Manager- `src/bundler/` - JavaScript bundler (tree-shaking, CSS processing, HTML handling)- `src/install/` - Package manager (`lockfile/``npm.rs` registry client, `lifecycle_script_runner.rs`)#### Other Key Components- `src/shell/` - Cross-platform shell implementation- `src/css/` - CSS parser and processor- `src/http/` - HTTP client + `websocket_client/` (WebSocket, deflate)- `src/sql/` - SQL database integrations (Postgres, MySQL, SQLite)- `src/bake/` - Server-side rendering / dev server framework#### Vendored Dependencies (`vendor/`)Third-party C/C++ libraries are vendored locally and can be read from disk (these are not git submodules):- `vendor/boringssl/` - BoringSSL (TLS/crypto)- `vendor/brotli/` - Brotli compression- `vendor/cares/` - c-ares (async DNS)- `vendor/hdrhistogram/` - HdrHistogram (latency tracking)- `vendor/highway/` - Google Highway (SIMD)- `vendor/libarchive/` - libarchive (tar/zip)- `vendor/libdeflate/` - libdeflate (fast deflate)- `vendor/libuv/` - libuv (Windows event loop)- `vendor/lolhtml/` - lol-html (HTML rewriter)- `vendor/lshpack/` - ls-hpack (HTTP/2 HPACK)- `vendor/lsqpack/` - ls-qpack (HTTP/3 QPACK)- `vendor/lsquic/` - lsquic (QUIC / HTTP/3)- `vendor/mimalloc/` - mimalloc (memory allocator)- `vendor/nodejs/` - Node.js headers (compatibility)- `vendor/picohttpparser/` - PicoHTTPParser (HTTP parsing)- `vendor/tinycc/` - TinyCC (FFI JIT compiler, fork: oven-sh/tinycc)- `vendor/WebKit/` - WebKit/JavaScriptCore (JS engine)- `vendor/zig/` - Zig toolchain (legacy; not used by the Rust build)- `vendor/zlib/` - zlib-ng (compression, zlib-compat mode)- `vendor/zstd/` - Zstandard (compression)Build configuration for these is in `scripts/build/deps/*.ts`.### JavaScript Class Implementation (C++)When implementing JavaScript classes in C++:1. Create three classes if there's a public constructor:   - `class Foo : public JSC::JSDestructibleObject` (if has C++ fields)   - `class FooPrototype : public JSC::JSNonFinalObject`   - `class FooConstructor : public JSC::InternalFunction`2. Define properties using HashTableValue arrays3. Add iso subspaces for classes with C++ fields4. Cache structures in `ZigGlobalObject`### Code GenerationCode generation happens automatically as part of the build process. The main scripts are:- `src/codegen/generate-classes.ts` - Generates Rust & C++ bindings from `*.classes.ts` files- `src/codegen/generate-jssink.ts` - Generates stream-related classes- `src/codegen/bundle-modules.ts` - Bundles built-in modules like `node:fs`- `src/codegen/bundle-functions.ts` - Bundles global functions like `ReadableStream`In development, bundled JS modules can be reloaded without rebuilding native code by running `bun run build`.## JavaScript Modules (`src/js/`)Built-in JavaScript modules use special syntax and are organized as:- `node/` - Node.js compatibility modules (`node:fs``node:path`, etc.)- `bun/` - Bun-specific modules (`bun:ffi``bun:sqlite`, etc.)- `thirdparty/` - NPM modules we replace (like `ws`)- `internal/` - Internal modules not exposed to users- `builtins/` - Core JavaScript builtins (streams, console, etc.)## Code Review Self-Check- Before writing code that makes a non-obvious choice, pre-emptively ask "why this and not the alternative?" If you can't answer, research until you can — don't write first and justify later.- Don't take a bug report's suggested fix at face value; verify it's the right layer.- If neighboring code does something differently than you're about to, find out _why_ before deviating — its choices are often load-bearing, not stylistic.## Important Development Notes1. **Never use `bun test` or `bun <file>` directly** - always use `bun bd test` or `bun bd <command>``bun bd` compiles & runs the debug build.2. **All changes must be tested** - if you're not testing your changes, you're not done.3. **Get your tests to pass**. If you didn't run the tests, your code does not work.4. **Follow existing code style** - check neighboring files for patterns5. **Create tests in the right folder** in `test/` and the test must end in `.test.ts` or `.test.tsx`6. **Use absolute paths** - Always use absolute paths in file operations7. **Avoid shell commands** - Don't use `find` or `grep` in tests; use Bun's Glob and built-in tools8. **Memory management** - Prefer RAII (`Drop`) over manual cleanup. Watch the arena edge case: values allocated in an arena (`Arena<T>`/`bumpalo`) do **not** run `Drop` when the arena is reset — if a type owns a heap allocation or a refcount, it must be freed/deref'd explicitly before the arena resets, mirroring the original Zig `deinit()` order.9. **Cross-platform** - Run `bun run rust:check-all` to compile across all targets (linux/macos/windows × x64/aarch64) when making platform-specific changes. `#[cfg(...)]`-gated code is not type-checked unless the matching target is built.10. **Debug builds** - Use `BUN_DEBUG_QUIET_LOGS=1` to disable debug logging, or `BUN_DEBUG_<SCOPE>=1` to enable a specific `bun_core::output` scoped logger11. **Be humble & honest** - NEVER overstate what you got done or what actually works in commits, PRs or in messages to the user.12. **Branch names must start with `claude/`** - This is a requirement for the CI to work.**ONLY** push up changes after running `bun bd test <file>` and ensuring your tests pass.## Debugging CI FailuresRequires the BuildKite CLI (`brew install buildkite/buildkite/bk`) and a read-scoped token in `BUILDKITE_API_TOKEN`. The repo's `.bk.yaml` sets the org/pipeline so `-p bun` is not needed.```bash# Show rendered test-failure output for the current branch's latest build,# tagged [new] vs [also on main]bun run ci:errorsbun run ci:errors '#26173'          # or a PR number / URL / branch / build number# One-screen progress summary (job counts, failed jobs, failing tests so far)bun run ci:status# Save full logs for every failed job to ./tmp/ci-<build>/bun run ci:logs# Just the build number, for composing with raw `bk`bun run ci:findbk job log <job-uuid> -b $(bun run ci:find)# Watch the current branch's build until it finishesbun run ci:watch```For anything else, use `bk` directly — `bk build list``bk api``bk artifacts`, etc.If output from these commands looks wrong — mis-parsed annotation HTML, confusing wording, a field BuildKite changed shape on — fix `scripts/find-build.ts` directly rather than working around it. It's a thin presenter over `bk`; keep it accurate.## Reading PR Feedback`gh pr view --comments` is fine for a quick look at the Conversation tab, but it has a footgun worth knowing about: it only returns issue-stream comments and silently omits review summaries and line-level review comments. If a reviewer leaves an inline comment on a specific file line, it will not show up — no error, no hint that anything is missing.When you want the complete picture — especially when responding to a review or checking whether anyone requested changes — use `bun run pr:comments`. It fetches all three GitHub endpoints (`/issues/N/comments``/pulls/N/reviews``/pulls/N/comments`) and prints them in one chronological listing, each labelled with its actual type (issue comment, review verdict, line comment, reply, suggestion block).```bashbun run pr:comments                    # current branch's PR — XML, resolved threads hiddenbun run pr:comments 28838              # by PR numberbun run pr:comments '#28838'           # also worksbun run pr:comments https://github.com/oven-sh/bun/pull/28838bun run pr:comments --include-resolved # also show threads already marked resolved# Machine-readable output for jq pipelines — one object per entry with# { when, user, tag, state?, suggestion?, location?, body, url?, resolved?, outdated? }.# Resolved threads and bot noise (robobun's CI status comment, CodeRabbit# body-level summaries) are filtered out; --include-resolved restores the former.bun run pr:comments --json | jq '.[] | select(.user == "Jarred-Sumner")'```

读完 https://github.com/oven-sh/bun/blob/main/CLAUDE.md 全文,打开 git blame 一看,我惊讶的发现 CLAUDE.md 的每一行都是“人”写的。 

不想我总是习惯,改着改着直接让 claude code 执行 /init ,刷一遍CLAUDE.md,也不检查到底有什么影响(/init 之后Agent Coding效果变好了还是变差了我也只能撞大运)。

图10,Git Blame 原来 Bun 的CLAUDE.md 都来自于3个老哥

图11,三男一狗,就有 Bun 的 Founder  Jarred Sumner 

👨[Jarred-Sumner](https://github.com/oven-sh/bun/commits?author=Jarred-Sumner)

👨[dylan-conway](https://github.com/oven-sh/bun/commits?author=dylan-conway)

👨[robobun](https://github.com/oven-sh/bun/commits?author=robobun)

🐶[autofix-ci\[bot\]](https://github.com/oven-sh/bun/commits?author=autofix-ci%5Bbot%5D)

阶段7:这是否说明了,在当前甚至Agentic Long Horizen 的近未来,

1、人永远是总指挥。

2、问题仍然由人来定义。

3、开发者需要精通如果听过.md来精确约束AI的行为,约束到巴不得手把手教(但是又不能真的手工调试,刚好在一个暧昧的层次),而不是模糊的harness。

对于问题1 问题2,我在 ClaudeCode 当中跟模型和skill搏斗的的一个又一个深夜之后,答案是肯定的。

对于问题3,引用 Kimi V2.5 思考的结果 

https://www.kimi.com/share/19e36ddd-5402-8d58-8000-00007606aeef

CLAUDE.md 第 8 条就是一个完美的暧昧层次案例:

Memory management - Prefer RAII (Drop) over manual cleanup. Watch the arena edge case: values allocated in an arena do not run Drop when the arena is reset — if a type owns a heap allocation or a refcount, it must be freed/deref'd explicitly before the arena resets, mirroring the original Zig deinit() order.

它没有说"在 output.rs:2095 插入 if byte == 0x5C { ... }"(太具体),也没有说"处理好内存"(太模糊)。它说的是:

  1. 原则:优先 RAII

  2. 例外:arena 重置时不运行 Drop

  3. 映射规则:镜像原始 Zig 的 deinit() 顺序

  4. 责任边界:如果类型拥有堆分配或引用计数,人类/AI 必须显式释放

这给了 AI 足够的语义约束来避免 #30693 这类 bug,但又没有剥夺 AI 选择具体实现路径的自由。

还在上学时候,我就期盼着软件工程有能从手工业到重工业的一天,今生有幸得见了。

回望技术史,

- 雕版到活字印刷,再到照排与数码排版 

- 纺织工到纺织机,再到现代化纺织厂 

- 铁匠铺到机床,再到数控加工中心

- 图纸成吨到CAD,CATIA全流程数字化

,莫不如是。

但我没料到的是,我上学时想象中的软件工程(SoftwareEngineer)变成重工业后约束是MBSE、Formal Methods、Static Program Analyze

但是时间来到2026,形式化和静态程序分析,似乎已经提前被LLM大力出奇迹给摧毁了,变得更像是数学系延毕学长的行为艺术。

阶段8:我作为一个sde,我能从中学到哪些 agentic coding技巧,为我所用?如何自我验证我已掌握所有必要的知识?给我一个 verification:可以是一组问题,可以是一些交付物(lab assignment)、可以是一些状态or经历描述的checklist.

编译期与运行期的反馈闭环自动化 (Feedback Loop Automation)

测试驱动开发 (TDD) 的终极变现

对抗性代码审查 (Adversarial Auditing)

自我验证交付物 (Verification Lab Assignment)

https://gemini.google.com/share/16c273d7e0b6

同构迁移(Isomorphic Port)

上下文分片与分层注入(Context Sharding)

Unsafe 边界审计(Unsafe Perimeter Audit)

对抗性测试生成(Adversarial Test Generation)

Prompt 即基础设施(Prompt-as-Infrastructure)

https://www.kimi.com/share/19e36e9b-abf2-83a4-8000-0000beb157e2

下一期博客更新的选题呼之欲出:

Bun这一次rust重写,同构迁移(Isomorphic Port)是一个大前提。

没有什么比 AI-Infra 国产算力迁移更同构了——把一个NV算力能跑的算子,重写为天数、沐曦、摩尔、昇腾可用。

问题 scope well define,测试spec也没有任何歧义,unittest 生成也好弄。无非是做实验需要讨腰包租算力的云服务器实例,并顺带烧光几百块的token,让 Claude Code ssh 到不同的服务器上跑。

特别地,缺失业务上下文的 Legacy Enterprise Backend System,反倒距离 Bun 的这个例子更远。Business Logic 太厚了,人都不知道自己要写什么,AI就更不知道了。而且,因为业务问题大部分时候不足够 well define,单元测试有可能是迭代中case by case 累积的,而不是正向设计的。即便单元测试再多,全部通过,也不能证明程序没问题。

但是,这个观点也很容易被挑战,就以Bun v1.3.14的例子,应该也没有core dev敢说自己完全知道 rewrite 的每一处逻辑该怎么做(也许Jarred Sumner知道)。但这又是另一个话题了。

Bun 这个例子能把 Agentic Coding 所有的知识串起来,当成 case study应该还能产出不少文章。之后我更新想必会勤快得多。

Simon-CHOU

20260508 于成都。

注1:法拉第学习法Faraday 在研究电磁学时,并非只依赖读书或听讲,而是亲手搭建实验,逐步复现他人已完成的实验。这种方式后来被总结为“法拉第学习法”。它并不是学术界的固定术语,而是学者根据 Faraday 的实验与学习方式所归纳出的概念。相关研究可参见:Gooding, D., & James, F. (Eds.). (1985). Faraday Rediscovered. London: Springer.

注2:三男一狗这是《Grand Theft Auto V》中的一个梗,指代游戏里的三位男性主人公和一只狗。

注3:autofix-ci[bot]这是 GitHub App autofix.ci 的机器人账号。它的作用是自动修复 Pull Request 中的代码格式和一些琐碎问题,从而免去开发者手动修改的麻烦。

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-06-21 01:40:02 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/639813.html
  2. 运行时间 : 0.103625s [ 吞吐率:9.65req/s ] 内存消耗:4,831.59kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=b3805a8827cd8e4306b3f02690a78713
  1. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_static.php ( 6.05 KB )
  7. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/ralouphie/getallheaders/src/getallheaders.php ( 1.60 KB )
  10. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  11. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  12. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  13. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  14. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  15. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  16. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  17. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  18. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  19. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions_include.php ( 0.16 KB )
  21. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions.php ( 5.54 KB )
  22. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  23. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  24. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  25. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/provider.php ( 0.19 KB )
  26. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  27. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  28. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  29. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/common.php ( 0.03 KB )
  30. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  32. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/alipay.php ( 3.59 KB )
  33. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  34. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/app.php ( 0.95 KB )
  35. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cache.php ( 0.78 KB )
  36. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/console.php ( 0.23 KB )
  37. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cookie.php ( 0.56 KB )
  38. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/database.php ( 2.48 KB )
  39. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/filesystem.php ( 0.61 KB )
  40. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/lang.php ( 0.91 KB )
  41. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/log.php ( 1.35 KB )
  42. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/middleware.php ( 0.19 KB )
  43. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/route.php ( 1.89 KB )
  44. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/session.php ( 0.57 KB )
  45. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/trace.php ( 0.34 KB )
  46. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/view.php ( 0.82 KB )
  47. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/event.php ( 0.25 KB )
  48. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  49. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/service.php ( 0.13 KB )
  50. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/AppService.php ( 0.26 KB )
  51. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  52. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  53. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  54. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  55. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  56. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/services.php ( 0.14 KB )
  57. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  58. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  59. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  60. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  61. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  62. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  63. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  64. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  65. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  66. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  67. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  68. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  69. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  70. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  71. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  72. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  73. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  74. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  75. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  76. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  77. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  78. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  79. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  80. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  81. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  82. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  83. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  84. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  85. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  86. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  87. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/Request.php ( 0.09 KB )
  88. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  89. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/middleware.php ( 0.25 KB )
  90. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  91. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  92. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  93. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  94. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  95. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  96. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  97. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  98. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  99. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  100. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  101. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  102. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  103. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/route/app.php ( 3.94 KB )
  104. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  105. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  106. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Index.php ( 9.87 KB )
  108. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/BaseController.php ( 2.05 KB )
  109. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  110. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  111. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  112. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  113. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  114. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  115. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  116. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  117. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  118. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  119. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  120. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  121. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  122. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  123. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  124. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  125. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  126. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  127. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  128. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  129. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  130. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  131. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  132. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  133. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  134. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  135. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Es.php ( 3.30 KB )
  136. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  137. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  138. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  139. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  140. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  141. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  142. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  143. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  144. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/runtime/temp/c935550e3e8a3a4c27dd94e439343fdf.php ( 31.50 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000633s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001028s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000371s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000303s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000613s ]
  6. SELECT * FROM `set` [ RunTime:0.000242s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000731s ]
  8. SELECT * FROM `article` WHERE `id` = 639813 LIMIT 1 [ RunTime:0.001805s ]
  9. UPDATE `article` SET `lasttime` = 1781977202 WHERE `id` = 639813 [ RunTime:0.001019s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000291s ]
  11. SELECT * FROM `article` WHERE `id` < 639813 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000557s ]
  12. SELECT * FROM `article` WHERE `id` > 639813 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000520s ]
  13. SELECT * FROM `article` WHERE `id` < 639813 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001061s ]
  14. SELECT * FROM `article` WHERE `id` < 639813 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001057s ]
  15. SELECT * FROM `article` WHERE `id` < 639813 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.004499s ]
0.105256s