前言
在本章内, 俺们将快速的完成所有的 easy 系列的 TypeChallenge.
俺将会分享俺的思路与代码, 以及一些补充的内容.

programming, life, and everything
在本章内, 俺们将快速的完成所有的 easy 系列的 TypeChallenge.
俺将会分享俺的思路与代码, 以及一些补充的内容.
由于中级系列的题目较多,为了方便大家查阅,俺在这提供了一个导航,方便大伙查找。
如果你写过稍微复杂一点的 Minecraft Datapack,就会很快碰到原生 mcfunction 的天花板。它当然强大,但那种强大更像“你可以用积木拼出 CPU”,不是“它本身适合做软件工程”。
原生 mcfunction 最难写的点,不是命令多,而是抽象层级太低。变量要自己映射成 scoreboard,状态要自己选命名约定,条件分支靠 execute if/unless 链,循环通常得手搓计数器,跨文件复用时还要同时记住 namespace、调用路径和上下文实体。代码一旦过百行,维护成本会急剧上升。
RedScript 的核心问题不是“怎么解析一门语言”,而是“怎么把高级语义压进一个几乎没有控制流抽象的目标平台”。Minecraft Datapack 最终只有一堆 .mcfunction 文件,而函数调用、变量、枚举、模式匹配这些概念,都必须在编译阶段被拆成 scoreboard、storage 和 execute 命令链。
因此 RedScript 的编译器没有停在 AST 上直接 codegen,而是走了一条比较典型、但针对 MC 目标做过裁剪的流水线:Parser → HIR → MIR → LIR → .mcfunction。
我在看日语技术文档的时候总会碰到生词。碰到生词的标准流程是:选中 → 右键 → 搜索,或者切到另一个标签页查 Jisho。每次这样做都会打断阅读节奏,查完词还得找回之前读到哪里。
RedScript v3.0 正式发布。这个版本专注于让代码写起来更自然——更少样板,更清晰的意图表达。
告别冗长的 if/else 链。match 让分支逻辑一目了然:
match player_state {
STATE_IDLE => { start_walking(p) }
STATE_WALKING => { check_destination(p) }
STATE_COMBAT => { update_combat(p) }
_ => { }
}
typed-pipeline v2.0 的目标不是把 API 做得更花,而是把三个经常互相冲突的东西放进同一个设计里:链式可读性、异步可组合性,以及 TypeScript 级别的类型安全。
在 v1 里,我已经验证了“管道 + 上一步结果推断”这条路线可行;问题是旧实现依赖太多技巧性结构,运行时和类型层都不够直。v2 的设计决策因此很明确:运行时必须像普通库一样可读,类型系统必须只表达真正存在的语义,而不是为了补洞引入一层又一层工具类型。
Pipeline 类v2 最重要的决定,是放弃纯函数式拼装器,回到 new Pipeline<TInput>() 这种类式 API。
获取两个对象类型 O 和 O1 的差集,返回一个对象,包含仅存在于其中一个对象中的属性(对称差集)。
type Foo = { name: string; age: string }
type Bar = { name: string; age: string; gender: number }
type Result = Diff<Foo, Bar> // { gender: number }
This project is still under development!
Type Challenges is a project that aims to provide a collection of type challenges with the goal of helping people learn TypeScript.
我在看日文资料时总有查词的需求。现有的工具要么太重(需要手动划词+查词典),要么太轻(只有汉字读音,没有语法解析)。所以自己做了一个。