<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><author><name>Qun</name></author><generator uri="https://astro.build/">Astro</generator><icon>https://ruoye.site/assets/favicon.svg</icon><id>https://ruoye.site/blog/</id><link href="https://ruoye.site/blog/" rel="alternate"/><link href="https://ruoye.site/blog/atom.xml" rel="self"/><rights>All rights reserved 2026, Qun</rights><subtitle>Notes in motion.</subtitle><title>若野 / Qun</title><updated>2026-08-13T02:14:00.000Z</updated><entry><author><name>Qun</name></author><category term="unit_rc" scheme="https://ruoye.site/blog/tags/unit_rc/"/><category term="c++" scheme="https://ruoye.site/blog/tags/c%2B%2B/"/><category term="architecture" scheme="https://ruoye.site/blog/tags/architecture/"/><category term="ffi" scheme="https://ruoye.site/blog/tags/ffi/"/><id>https://ruoye.site/blog/unit-rc-series-1-architecture/</id><link href="https://ruoye.site/blog/unit-rc-series-1-architecture/"/><published>2026-08-12T15:42:00.000Z</published><summary type="html">从一次完整调用出发，介绍 unit_rc 的整体架构：.ur 接口定义、urgen 代码生成、C++ 运行时和 Java、Objective-C、Dart、ArkTS 平台桥接如何协作。</summary><title>unit_rc 系列（一）：用 C++ 把 N×N 跨语言桥接降为 N×1</title><updated>2026-08-13T02:14:00.000Z</updated></entry><entry><author><name>Qun</name></author><category term="unit_rc" scheme="https://ruoye.site/blog/tags/unit_rc/"/><category term="codegen" scheme="https://ruoye.site/blog/tags/codegen/"/><category term="compiler" scheme="https://ruoye.site/blog/tags/compiler/"/><category term="python" scheme="https://ruoye.site/blog/tags/python/"/><id>https://ruoye.site/blog/unit-rc-series-2-urgen-pipeline/</id><link href="https://ruoye.site/blog/unit-rc-series-2-urgen-pipeline/"/><published>2026-08-12T15:42:00.000Z</published><summary type="html">从源码拆解 urgen 的完整流水线：入口扫描、Lark 语法解析、两阶段语义模型、call/impl 配置、Jinja2 后端、增量缓存和版本锁定。</summary><title>unit_rc 系列（二）：urgen 如何把 .ur 编译成多语言绑定</title><updated>2026-08-13T02:14:00.000Z</updated></entry><entry><author><name>Qun</name></author><category term="unit_rc" scheme="https://ruoye.site/blog/tags/unit_rc/"/><category term="c++" scheme="https://ruoye.site/blog/tags/c%2B%2B/"/><category term="memory" scheme="https://ruoye.site/blog/tags/memory/"/><category term="reference-counting" scheme="https://ruoye.site/blog/tags/reference-counting/"/><id>https://ruoye.site/blog/unit-rc-series-3-object-lifecycle/</id><link href="https://ruoye.site/blog/unit-rc-series-3-object-lifecycle/"/><published>2026-08-12T15:42:00.000Z</published><summary type="html">深入 BaseRC、rcId、原对象与 proxy、addRC/removeRC 和 WeakPtr，解释 GC、ARC 与 shared_ptr 之间如何建立可工作的跨语言引用协议。</summary><title>unit_rc 系列（三）：BaseRC 如何统一对象身份与跨语言生命周期</title><updated>2026-08-13T02:14:00.000Z</updated></entry><entry><author><name>Qun</name></author><category term="unit_rc" scheme="https://ruoye.site/blog/tags/unit_rc/"/><category term="jni" scheme="https://ruoye.site/blog/tags/jni/"/><category term="dart" scheme="https://ruoye.site/blog/tags/dart/"/><category term="arkts" scheme="https://ruoye.site/blog/tags/arkts/"/><id>https://ruoye.site/blog/unit-rc-series-4-platform-bridges/</id><link href="https://ruoye.site/blog/unit-rc-series-4-platform-bridges/"/><published>2026-08-12T15:42:00.000Z</published><summary type="html">对照四个平台的 BaseRC 适配：宿主对象如何变成 C++ proxy，强弱引用如何落到 GlobalRef、ARC、PersistentHandle 和 napi_ref，以及运行时隔离带来的差异。</summary><title>unit_rc 系列（四）：JNI、Objective-C、Dart 与 ArkTS 桥接对照</title><updated>2026-08-13T02:14:00.000Z</updated></entry><entry><author><name>Qun</name></author><category term="unit_rc" scheme="https://ruoye.site/blog/tags/unit_rc/"/><category term="dart" scheme="https://ruoye.site/blog/tags/dart/"/><category term="isolate" scheme="https://ruoye.site/blog/tags/isolate/"/><category term="message-queue" scheme="https://ruoye.site/blog/tags/message-queue/"/><id>https://ruoye.site/blog/unit-rc-series-5-isolate-message-queue/</id><link href="https://ruoye.site/blog/unit-rc-series-5-isolate-message-queue/"/><published>2026-08-12T15:42:00.000Z</published><summary type="html">结合 UnitRCDartRuntime 与 BaseMessageQueue 源码，分析 Isolate 注册、thread_local 缓存、函数表隔离、sendId 确认、积压重试、超时回流和退出清理。</summary><title>unit_rc 系列（五）：多 Isolate 注册表与跨运行时消息队列</title><updated>2026-08-13T02:14:00.000Z</updated></entry><entry><author><name>Qun</name></author><category term="unit_rc" scheme="https://ruoye.site/blog/tags/unit_rc/"/><category term="protobuf" scheme="https://ruoye.site/blog/tags/protobuf/"/><category term="performance" scheme="https://ruoye.site/blog/tags/performance/"/><category term="observability" scheme="https://ruoye.site/blog/tags/observability/"/><id>https://ruoye.site/blog/unit-rc-series-6-data-observability/</id><link href="https://ruoye.site/blog/unit-rc-series-6-data-observability/"/><published>2026-08-12T15:42:00.000Z</published><summary type="html">从 ByteBuffer 四端实现、Protobuf 编解码、实验性共享数据结构、BaseProfile 和 UnitRCError 出发，讨论跨语言数据路径怎样兼顾性能、所有权和线上诊断。</summary><title>unit_rc 系列（六）：ByteBuffer、Protobuf 与运行时可观测性</title><updated>2026-08-13T02:14:00.000Z</updated></entry><entry><author><name>Qun</name></author><category term="android" scheme="https://ruoye.site/blog/tags/android/"/><category term="binder" scheme="https://ruoye.site/blog/tags/binder/"/><category term="intent" scheme="https://ruoye.site/blog/tags/intent/"/><category term="crash" scheme="https://ruoye.site/blog/tags/crash/"/><id>https://ruoye.site/blog/android-binder-payload-boundaries/</id><link href="https://ruoye.site/blog/android-binder-payload-boundaries/"/><published>2024-12-03T12:55:00.000Z</published><summary type="html">Intent 和 Bundle 看起来只是进程内对象，启动 Activity 时却要经过 Binder 事务。本文从一个无明确业务堆栈的崩溃出发，解释 TransactionTooLarge、Parcel 尺寸、复现方法和架构修复。</summary><title>Android Binder 数据边界：一次 Intent 过大崩溃的排查方法</title><updated>2026-08-12T11:07:00.000Z</updated></entry><entry><author><name>Qun</name></author><category term="protobuf" scheme="https://ruoye.site/blog/tags/protobuf/"/><category term="ffi" scheme="https://ruoye.site/blog/tags/ffi/"/><category term="jni" scheme="https://ruoye.site/blog/tags/jni/"/><category term="performance" scheme="https://ruoye.site/blog/tags/performance/"/><id>https://ruoye.site/blog/cross-language-protobuf-data-path/</id><link href="https://ruoye.site/blog/cross-language-protobuf-data-path/"/><published>2023-12-26T09:45:00.000Z</published><summary type="html">零拷贝不一定更快。本文拆解 Dart、Java、Objective-C 与 ArkTS 传递 Protobuf 的真实数据路径，并给出 buffer 所有权、阈值选择和基准测试的方法。</summary><title>跨语言传递 Protobuf：从拷贝路径到所有权模型</title><updated>2026-08-12T11:07:00.000Z</updated></entry><entry><author><name>Qun</name></author><category term="c++" scheme="https://ruoye.site/blog/tags/c%2B%2B/"/><category term="concurrency" scheme="https://ruoye.site/blog/tags/concurrency/"/><category term="shared_ptr" scheme="https://ruoye.site/blog/tags/shared_ptr/"/><category term="deadlock" scheme="https://ruoye.site/blog/tags/deadlock/"/><id>https://ruoye.site/blog/cpp-async-lifecycle-and-deadlocks/</id><link href="https://ruoye.site/blog/cpp-async-lifecycle-and-deadlocks/"/><published>2023-12-26T06:51:00.000Z</published><summary type="html">shared_ptr 能防止对象过早释放，却不能保证对象在哪条线程析构。本文从 worker 内释放最后一个强引用出发，分析 self-join、析构竞态和多线程锁环，并给出可落地的退出协议。</summary><title>C++ 异步系统的生命周期陷阱：最后一个 shared_ptr、self-join 与锁环</title><updated>2026-08-12T11:07:00.000Z</updated></entry><entry><author><name>Qun</name></author><category term="c++" scheme="https://ruoye.site/blog/tags/c%2B%2B/"/><category term="ffi" scheme="https://ruoye.site/blog/tags/ffi/"/><category term="jni" scheme="https://ruoye.site/blog/tags/jni/"/><category term="architecture" scheme="https://ruoye.site/blog/tags/architecture/"/><id>https://ruoye.site/blog/cross-language-binding-framework-design/</id><link href="https://ruoye.site/blog/cross-language-binding-framework-design/"/><published>2023-02-26T15:46:00.000Z</published><summary type="html">跨语言调用不只是生成几层胶水代码。本文从接口描述、类型系统、运行时派发、继承与多态、强弱引用到线程约束，完整拆解一套绑定框架的设计。</summary><title>设计一套跨语言绑定框架：从 IDL、代码生成到对象生命周期</title><updated>2026-08-12T11:07:00.000Z</updated></entry><entry><author><name>Qun</name></author><category term="flutter" scheme="https://ruoye.site/blog/tags/flutter/"/><category term="ios" scheme="https://ruoye.site/blog/tags/ios/"/><category term="performance" scheme="https://ruoye.site/blog/tags/performance/"/><category term="startup" scheme="https://ruoye.site/blog/tags/startup/"/><id>https://ruoye.site/blog/flutter-engine-startup-and-warmup/</id><link href="https://ruoye.site/blog/flutter-engine-startup-and-warmup/"/><published>2022-11-14T16:00:00.000Z</published><summary type="html">预热 Engine 不等于启动更快。本文从点击、Engine 创建、页面动画到 Flutter 首帧建立统一时间线，比较三种预渲染策略，并给出可验证的启动优化方法。</summary><title>Flutter 页面启动优化：Engine 预热、首帧与黑屏的完整度量</title><updated>2026-08-12T11:07:00.000Z</updated></entry><entry><author><name>Qun</name></author><category term="dart" scheme="https://ruoye.site/blog/tags/dart/"/><category term="flutter" scheme="https://ruoye.site/blog/tags/flutter/"/><category term="ffi" scheme="https://ruoye.site/blog/tags/ffi/"/><category term="c++" scheme="https://ruoye.site/blog/tags/c%2B%2B/"/><id>https://ruoye.site/blog/dart-native-bridge-runtime-design/</id><link href="https://ruoye.site/blog/dart-native-bridge-runtime-design/"/><published>2022-10-27T16:00:00.000Z</published><summary type="html">当 Flutter 从单引擎走向多引擎、多 Isolate 和线程合并，基于全局函数指针或 thread_local 的桥接方案会逐渐失效。本文给出注册表、对象生命周期、消息队列与销毁时序的完整设计。</summary><title>Dart Native Bridge 运行时设计：多 Isolate、多引擎与消息可靠性</title><updated>2026-08-12T11:07:00.000Z</updated></entry><entry><author><name>Qun</name></author><category term="Think" scheme="https://ruoye.site/blog/tags/Think/"/><id>https://ruoye.site/blog/think-of-automatic/</id><link href="https://ruoye.site/blog/think-of-automatic/"/><published>2021-12-05T14:00:00.000Z</published><summary type="html">引 最近玩了一个游戏，叫做另一个伊甸：超越时空的猫，一个 RPG 游戏，之所以想说一下这个游戏，并不是说它的剧情多好、画面多精美之类的，想说的是这个游戏机制中非常恶心的一点： 很多任务的完成条件，都需要依赖于大量的“刷怪”，比如任务完成需要获取 “XX晶体” 30 万个，而 “XX晶体” 的来源只能是在特定地图打怪，而打怪一次一般只能拿到 100 “XX晶体…</summary><title>关于自动化的一些思考</title><updated>2021-12-05T14:00:00.000Z</updated></entry><entry><author><name>Qun</name></author><category term="iOS" scheme="https://ruoye.site/blog/tags/iOS/"/><id>https://ruoye.site/blog/iOS-nested-scroll/</id><link href="https://ruoye.site/blog/iOS-nested-scroll/"/><published>2021-10-17T09:00:00.000Z</published><summary type="html">由于工作上的需求，需要在 iOS 中做一个类似于嵌套滑动的案例，大致上就是，顶部有一个 Header，下面是一个 List，然后 Header 会随着 List 的滑动进行展开或收起。这种功能在 Android 中倒是挺常见，直接使用 Material 相关的一些组件就能完成，之前也多次使用过，但是要在 iOS 上做这么一个功能，之前倒没想过该怎么做。 开发…</summary><title>iOS 嵌套滑动方案</title><updated>2021-10-17T09:00:00.000Z</updated></entry><entry><author><name>Qun</name></author><category term="iOS" scheme="https://ruoye.site/blog/tags/iOS/"/><category term="OjbC" scheme="https://ruoye.site/blog/tags/OjbC/"/><id>https://ruoye.site/blog/OC%20block%20%E5%8F%98%E9%87%8F%E6%8D%95%E8%8E%B7/</id><link href="https://ruoye.site/blog/OC%20block%20%E5%8F%98%E9%87%8F%E6%8D%95%E8%8E%B7/"/><published>2021-09-12T05:00:00.000Z</published><summary type="html">在做 iOS 开发的时候经常会需要使用到 block，简单来说 block 就是一个匿名函数，但是相比于常规意义上的函数，它除了能执行相应的代码逻辑、传递参数之外，还有一个比较重要的特性，就是 block 会捕获变量，根据变量类型（作用域、生命周期）的不同，block 会对其有不同的捕获方式，先列总结： 捕获方式 是否安全 是否可写 : : : : : : …</summary><title>OC block 变量捕获</title><updated>2021-09-12T05:00:00.000Z</updated></entry><entry><author><name>Qun</name></author><category term="iOS" scheme="https://ruoye.site/blog/tags/iOS/"/><id>https://ruoye.site/blog/objc_reference_count/</id><link href="https://ruoye.site/blog/objc_reference_count/"/><published>2021-08-03T14:00:00.000Z</published><summary type="html">所有代码基于 objc 818.2 说到 OC 这个语言，一般都会说，OC 是 C 的超集实现，在 C 的基础上增加了 runtime 机制，使得 OC 成为一个动态语言，同时也增加了一些语言特性，比如增加了类的概念，同时也增加了一些内存管理方面的功能。 而对于内存管理，一般就是指 OC 的对象引用计数，这中间又分为两种，MRC（手动引用计数）、ARC（自动…</summary><title>Objective-C 引用计数</title><updated>2021-08-03T14:00:00.000Z</updated></entry><entry><author><name>Qun</name></author><category term="flutter" scheme="https://ruoye.site/blog/tags/flutter/"/><id>https://ruoye.site/blog/flutter-microtask/</id><link href="https://ruoye.site/blog/flutter-microtask/"/><published>2021-04-10T13:00:00.000Z</published><summary type="html">本文与 Flutter 异步机制：Future 比较相关，如有需要，可以先看下关于 future 的介绍（主要是发送任务、接受任务部分）。 之前说到 Flutter 中与异步相关的 Future，了解到，dart 是一个单线程模型的语言，当我们使用 Future 去实现一个异步操作时，多半是利用单线程的事件循环机制来模拟，类似于 Android 中的 Loo…</summary><title>Flutter 异步机制：microtask</title><updated>2021-04-10T13:00:00.000Z</updated></entry><entry><author><name>Qun</name></author><category term="shell" scheme="https://ruoye.site/blog/tags/shell/"/><id>https://ruoye.site/blog/shell-bash-rvm-cd/</id><link href="https://ruoye.site/blog/shell-bash-rvm-cd/"/><published>2021-03-30T16:00:00.000Z</published><summary type="html">背景就是，最近有遇到，在 bash 下，加载了 rvm 后，设置了 set e（这个命令就是，shell 遇到命令执行错误的时候会自动退出） ，然后执行 cd 到一个目录下，竟发生了神奇的一幕，shell 退出了。不甘心的我，继续设置了 set x（shell 调试用，会打印每一个执行的命令），再执行 cd，竟发现 cd 被 hook 了，变成了一大串不知名…</summary><title>bash 下一次执行 cd 报错问题排查</title><updated>2021-03-30T16:00:00.000Z</updated></entry><entry><author><name>Qun</name></author><category term="algorithm" scheme="https://ruoye.site/blog/tags/algorithm/"/><id>https://ruoye.site/blog/algorithm-valid_triangle_number/</id><link href="https://ruoye.site/blog/algorithm-valid_triangle_number/"/><published>2021-03-27T11:00:00.000Z</published><summary type="html">最近参与了一些面试工作，于是想着从 LeetCode 上找一些备选的算法题目，用于测试面试者的算法能力，本着希望一个算法既能够让面试者可以通过通俗的方式解决，不至于太过打击其信心，又不至于太过简单或太过常见，无法判断出面试者对于算法问题的思考这种心态，发现了一个不错的题目，即使标题上已经说了的，Valid Triangle Number，这个题目可以认为是 …</summary><title>算法分析：Valid Triangle Number</title><updated>2021-03-27T11:00:00.000Z</updated></entry><entry><author><name>Qun</name></author><category term="flutter" scheme="https://ruoye.site/blog/tags/flutter/"/><id>https://ruoye.site/blog/flutter-scroll/</id><link href="https://ruoye.site/blog/flutter-scroll/"/><published>2020-10-31T16:00:00.000Z</published><summary type="html">ScrollView 可滑动视图的父类，ListView，CustomScrollView 和 GridView 都是它的子类，它们通过实现 buildSlivers 函数为 ScrollView 提供子视图，同时将 ScrollController，ScrollPhysics，ViewportBuilder 和 children 等传递给 Scrollab…</summary><title>Flutter 滑动体系</title><updated>2020-10-31T16:00:00.000Z</updated></entry></feed>