[{"data":1,"prerenderedAt":890},["ShallowReactive",2],{"navigation":3,"-design-render-intrinsics":239,"-design-render-intrinsics-surround":887},[4,159],{"title":5,"path":6,"stem":7,"children":8,"icon":10},"指南","\u002Fguide","00.guide\u002F00.index",[9,11,16,21,53,84,116,142],{"title":5,"path":6,"stem":7,"icon":10},"lucide:book",{"title":12,"path":13,"stem":14,"icon":15},"快速开始","\u002Fguide\u002Fgetting-started","00.guide\u002F01.getting-started","lucide:rocket",{"title":17,"path":18,"stem":19,"icon":20},"基础语法","\u002Fguide\u002Fbasic-syntax","00.guide\u002F02.basic-syntax","lucide:code-2",{"title":22,"path":23,"stem":24,"children":25,"icon":27},"数据类型","\u002Fguide\u002Fdata-types","00.guide\u002F03.data-types\u002F00.index",[26,28,33,38,43,48],{"title":22,"path":23,"stem":24,"icon":27},"lucide:database",{"title":29,"path":30,"stem":31,"icon":32},"基本类型","\u002Fguide\u002Fdata-types\u002Fbasic_types","00.guide\u002F03.data-types\u002F01.basic_types","lucide:type",{"title":34,"path":35,"stem":36,"icon":37},"复合类型","\u002Fguide\u002Fdata-types\u002Fcomposite_types","00.guide\u002F03.data-types\u002F02.composite_types","lucide:layers",{"title":39,"path":40,"stem":41,"icon":42},"类型推导","\u002Fguide\u002Fdata-types\u002Ftype_inference","00.guide\u002F03.data-types\u002F03.type_inference","lucide:brain-circuit",{"title":44,"path":45,"stem":46,"icon":47},"结构体","\u002Fguide\u002Fdata-types\u002Fstruct","00.guide\u002F03.data-types\u002F04.struct","lucide:box-select",{"title":49,"path":50,"stem":51,"icon":52},"内建类型表面","\u002Fguide\u002Fdata-types\u002Fbuilt-in-surface","00.guide\u002F03.data-types\u002F05.built-in-surface","lucide:wrench",{"title":54,"path":55,"stem":56,"children":57,"icon":59},"流程控制","\u002Fguide\u002Fcontrol-flow","00.guide\u002F04.control-flow\u002F00.index",[58,60,64,69,74,79],{"title":54,"path":55,"stem":56,"icon":59},"lucide:git-branch",{"title":61,"path":62,"stem":63,"icon":59},"if 表达式","\u002Fguide\u002Fcontrol-flow\u002Fif-expressions","00.guide\u002F04.control-flow\u002F01.if-expressions",{"title":65,"path":66,"stem":67,"icon":68},"for 循环","\u002Fguide\u002Fcontrol-flow\u002Ffor-loops","00.guide\u002F04.control-flow\u002F02.for-loops","lucide:repeat",{"title":70,"path":71,"stem":72,"icon":73},"break 和 continue","\u002Fguide\u002Fcontrol-flow\u002Fbreak-continue","00.guide\u002F04.control-flow\u002F03.break-continue","lucide:skip-forward",{"title":75,"path":76,"stem":77,"icon":78},"return","\u002Fguide\u002Fcontrol-flow\u002Freturn","00.guide\u002F04.control-flow\u002F04.return","lucide:corner-up-left",{"title":80,"path":81,"stem":82,"icon":83},"注意事项","\u002Fguide\u002Fcontrol-flow\u002Fnotes","00.guide\u002F04.control-flow\u002F05.notes","lucide:alert-triangle",{"title":85,"path":86,"stem":87,"children":88,"icon":90},"函数","\u002Fguide\u002Ffunctions","00.guide\u002F05.functions\u002F00.index",[89,91,96,101,106,111],{"title":85,"path":86,"stem":87,"icon":90},"lucide:braces",{"title":92,"path":93,"stem":94,"icon":95},"基础函数","\u002Fguide\u002Ffunctions\u002Fbasic-functions","00.guide\u002F05.functions\u002F01.basic-functions","lucide:function-square",{"title":97,"path":98,"stem":99,"icon":100},"参数与默认值","\u002Fguide\u002Ffunctions\u002Fadvanced-parameters","00.guide\u002F05.functions\u002F02.advanced-parameters","lucide:settings-2",{"title":102,"path":103,"stem":104,"icon":105},"匿名函数","\u002Fguide\u002Ffunctions\u002Fclosures","00.guide\u002F05.functions\u002F03.closures","lucide:curly-braces",{"title":107,"path":108,"stem":109,"icon":110},"内建函数","\u002Fguide\u002Ffunctions\u002Fbuiltin-functions","00.guide\u002F05.functions\u002F04.builtin-functions","lucide:box",{"title":112,"path":113,"stem":114,"icon":115},"main 函数","\u002Fguide\u002Ffunctions\u002Fmain-function","00.guide\u002F05.functions\u002F05.main-function","lucide:play",{"title":117,"path":118,"stem":119,"children":120,"icon":37},"模块化","\u002Fguide\u002Fmodules","00.guide\u002F06.modules\u002F00.index",[121,122,127,132,137],{"title":117,"path":118,"stem":119,"icon":37},{"title":123,"path":124,"stem":125,"icon":126},"导出","\u002Fguide\u002Fmodules\u002Fexport","00.guide\u002F06.modules\u002F01.export","lucide:upload",{"title":128,"path":129,"stem":130,"icon":131},"导入","\u002Fguide\u002Fmodules\u002Fimport","00.guide\u002F06.modules\u002F02.import","lucide:download",{"title":133,"path":134,"stem":135,"icon":136},"最佳实践","\u002Fguide\u002Fmodules\u002Fbest-practices","00.guide\u002F06.modules\u002F03.best-practices","lucide:check-circle-2",{"title":138,"path":139,"stem":140,"icon":141},"完整示例","\u002Fguide\u002Fmodules\u002Fcomplete-example","00.guide\u002F06.modules\u002F04.complete-example","lucide:file-code-2",{"title":143,"path":144,"stem":145,"children":146,"icon":148},"高级特性概述","\u002Fguide\u002Fadvanced","00.guide\u002F07.advanced\u002F00.index",[147,149,154],{"title":143,"path":144,"stem":145,"icon":148},"lucide:zap",{"title":150,"path":151,"stem":152,"icon":153},"泛型","\u002Fguide\u002Fadvanced\u002Fgenerics","00.guide\u002F07.advanced\u002F05.generics","lucide:git-merge",{"title":155,"path":156,"stem":157,"icon":158},"类型转换","\u002Fguide\u002Fadvanced\u002Ftype-conversion","00.guide\u002F07.advanced\u002F06.type-conversion","lucide:refresh-cw",{"title":160,"path":161,"stem":162,"children":163,"icon":15},"设计","\u002Fdesign","01.design\u002F00.index",[164,165,169,173,177,181,185,189,193,197,201,205,209,213,217,221,225,229,232,235],{"title":160,"path":161,"stem":162,"icon":15},{"title":166,"path":167,"stem":168},"CST 特性","\u002Fdesign\u002Fcst-features","01.design\u002F01.cst-features",{"title":170,"path":171,"stem":172},"注释关联规则","\u002Fdesign\u002Fcomment-association","01.design\u002F02.comment-association",{"title":174,"path":175,"stem":176},"错误处理","\u002Fdesign\u002Ferror-handling","01.design\u002F03.error-handling",{"title":178,"path":179,"stem":180},"代码优化","\u002Fdesign\u002Foptimization","01.design\u002F04.optimization",{"title":182,"path":183,"stem":184},"注释保留","\u002Fdesign\u002Fcomments","01.design\u002F05.comments",{"title":186,"path":187,"stem":188},"结构体设计","\u002Fdesign\u002Fstruct-design","01.design\u002F06.struct-design",{"title":190,"path":191,"stem":192},"comparable 约束设计","\u002Fdesign\u002Fcomparable-constraint","01.design\u002F07.comparable-constraint",{"title":194,"path":195,"stem":196},"文档分层约定","\u002Fdesign\u002Fdocumentation-convention","01.design\u002F08.documentation-convention",{"title":198,"path":199,"stem":200},"类型系统总纲","\u002Fdesign\u002Ftype-system","01.design\u002F09.type-system",{"title":202,"path":203,"stem":204},"泛型系统","\u002Fdesign\u002Fgenerics-system","01.design\u002F10.generics-system",{"title":206,"path":207,"stem":208},"值语义与共享语义","\u002Fdesign\u002Fvalue-and-sharing-semantics","01.design\u002F11.value-and-sharing-semantics",{"title":210,"path":211,"stem":212},"函数与调用","\u002Fdesign\u002Ffunctions-and-calls","01.design\u002F12.functions-and-calls",{"title":214,"path":215,"stem":216},"表达式与语句","\u002Fdesign\u002Fexpressions-and-statements","01.design\u002F13.expressions-and-statements",{"title":218,"path":219,"stem":220},"模块系统","\u002Fdesign\u002Fmodule-system","01.design\u002F14.module-system",{"title":222,"path":223,"stem":224},"渲染内建","\u002Fdesign\u002Frender-intrinsics","01.design\u002F15.render-intrinsics",{"title":226,"path":227,"stem":228},"Any 设计","\u002Fdesign\u002Fany-design","01.design\u002F16.any-design",{"title":49,"path":230,"stem":231},"\u002Fdesign\u002Fbuilt-in-types-surface","01.design\u002F17.built-in-types-surface",{"title":107,"path":233,"stem":234},"\u002Fdesign\u002Fbuilt-in-functions","01.design\u002F18.built-in-functions",{"title":236,"path":237,"stem":238},"内建结构体与运行时类型","\u002Fdesign\u002Fbuilt-in-structs-and-runtime-types","01.design\u002F19.built-in-structs-and-runtime-types",{"id":240,"title":222,"body":241,"description":440,"extension":882,"meta":883,"navigation":884,"path":223,"seo":885,"stem":224,"__hash__":886},"content\u002F01.design\u002F15.render-intrinsics.md",{"type":242,"value":243,"toc":863},"minimark",[244,248,278,281,287,292,295,298,335,338,341,363,369,372,375,397,400,404,409,412,431,434,450,459,468,472,478,481,506,509,517,520,528,531,534,540,549,552,574,578,581,590,593,601,605,607,616,618,626,628,648,652,654,663,665,670,672,689,693,696,730,732,765,772,781,784,787,790,793,796,806,812,819,822,837,840,843,859],[245,246,247],"p",{},"本文档收敛 Dujie 中直接参与最终渲染结果的语言内建：",[249,250,251,258,263,268,273],"ul",{},[252,253,254],"li",{},[255,256,257],"code",{},"main",[252,259,260],{},[255,261,262],{},"element",[252,264,265],{},[255,266,267],{},"text",[252,269,270],{},[255,271,272],{},"fragment",[252,274,275],{},[255,276,277],{},"comment",[245,279,280],{},"它们不按普通函数库看待，而是渲染系统和宿主平台之间的语言级边界。",[282,283,285],"h2",{"id":284},"widget",[255,286,284],{},[245,288,289,291],{},[255,290,284],{}," 是抽象渲染结果类型。",[245,293,294],{},"它不是某一种具体宿主节点类型，而是“可被渲染系统接受的 UI 树值”。",[245,296,297],{},"当前规则：",[249,299,300,305,308,314,325,328],{},[252,301,302,304],{},[255,303,284],{}," 是一等类型",[252,306,307],{},"可以赋值、传参、返回",[252,309,310,311],{},"可以放入 ",[255,312,313],{},"list\u003Cwidget>",[252,315,316,317,320,321,324],{},"可以作为 ",[255,318,319],{},"struct"," 字段或 ",[255,322,323],{},"opt\u003Cwidget>"," 的内部类型",[252,326,327],{},"不支持比较",[252,329,330,331,334],{},"不能作为 ",[255,332,333],{},"map"," 的 key",[282,336,337],{"id":337},"组件函数",[245,339,340],{},"组件函数的判定规则：",[249,342,343,349,360],{},[252,344,345,346,348],{},"只有显式返回类型恰好为裸 ",[255,347,284],{}," 的函数才算组件函数",[252,350,351,353,354,353,356,359],{},[255,352,313],{},"、",[255,355,323],{},[255,357,358],{},"map\u003Cstring, widget>"," 等都不算组件函数返回类型",[252,361,362],{},"判定只看显式签名，不靠函数体推导",[245,364,365,366,368],{},"组件函数本身仍然是普通 Dujie 函数，只是返回 ",[255,367,284],{},"。",[282,370,371],{"id":371},"保留内建名",[245,373,374],{},"第一阶段将以下名字视为保留内建名：",[249,376,377,381,385,389,393],{},[252,378,379],{},[255,380,257],{},[252,382,383],{},[255,384,262],{},[252,386,387],{},[255,388,267],{},[252,390,391],{},[255,392,272],{},[252,394,395],{},[255,396,277],{},[245,398,399],{},"用户不能定义同名顶层函数覆盖它们。",[282,401,402],{"id":257},[255,403,257],{},[245,405,406,408],{},[255,407,257],{}," 是入口 intrinsic，不等同于普通导出函数。",[245,410,411],{},"规则：",[249,413,414,421,426],{},[252,415,416,418,419],{},[255,417,257],{}," 的返回类型必须显式写为裸 ",[255,420,284],{},[252,422,423,425],{},[255,424,257],{}," 的参数写法按普通 Dujie 函数规则处理",[252,427,428,430],{},[255,429,257],{}," 不能是泛型函数",[245,432,433],{},"也就是说，这些都可以是合法的语言层声明：",[435,436,441],"pre",{"className":437,"code":438,"language":439,"meta":440,"style":440},"language-dj shiki shiki-themes github-light github-dark github-dark","func main() -> widget\n","dj","",[255,442,443],{"__ignoreMap":440},[444,445,448],"span",{"class":446,"line":447},"line",1,[444,449,438],{},[435,451,453],{"className":437,"code":452,"language":439,"meta":440,"style":440},"func main(title: string, count: opt\u003Cint>) -> widget\n",[255,454,455],{"__ignoreMap":440},[444,456,457],{"class":446,"line":447},[444,458,452],{},[435,460,462],{"className":437,"code":461,"language":439,"meta":440,"style":440},"func main({ title: string, count: int = 0 }) -> widget\n",[255,463,464],{"__ignoreMap":440},[444,465,466],{"class":446,"line":447},[444,467,461],{},[469,470,471],"h3",{"id":471},"入口适配层",[245,473,474,475,477],{},"语言层允许用户自由书写 ",[255,476,257],{}," 参数形状，但宿主或代码生成层需要提供与之匹配的入口适配。",[245,479,480],{},"当前约定是：",[249,482,483,489,494,503],{},[252,484,485,486,488],{},"如果 ",[255,487,257],{}," 使用位置参数，Rust 侧按顺序暴露对应参数",[252,490,485,491,493],{},[255,492,257],{}," 使用具名参数，Rust 侧可以生成对应的参数结构体来承接输入",[252,495,496,499,500],{},[255,497,498],{},"opt\u003CT>"," 在 Rust 侧映射为对应的 ",[255,501,502],{},"Option\u003CT>",[252,504,505],{},"默认值由生成的适配层补齐，不要求 Rust 调用方手动补默认值",[245,507,508],{},"例如，类似下面的 Dujie 入口：",[435,510,511],{"className":437,"code":452,"language":439,"meta":440,"style":440},[255,512,513],{"__ignoreMap":440},[444,514,515],{"class":446,"line":447},[444,516,452],{},[245,518,519],{},"可以在 Rust 侧暴露为“顺序参数”风格入口；而：",[435,521,522],{"className":437,"code":461,"language":439,"meta":440,"style":440},[255,523,524],{"__ignoreMap":440},[444,525,526],{"class":446,"line":447},[444,527,461],{},[245,529,530],{},"可以在 Rust 侧暴露为“参数结构体”风格入口。",[469,532,533],{"id":533},"动态边界示例",[245,535,536,537,539],{},"如果用户本身就把 ",[255,538,257],{}," 写成动态边界形式：",[435,541,543],{"className":437,"code":542,"language":439,"meta":440,"style":440},"func main(props: map\u003Cstring, any>) -> widget\n",[255,544,545],{"__ignoreMap":440},[444,546,547],{"class":446,"line":447},[444,548,542],{},[245,550,551],{},"则：",[249,553,554,563],{},[252,555,556,559,560],{},[255,557,558],{},"props[\"k\"]"," 缺 key 时 ",[255,561,562],{},"panic",[252,564,565,566,569,570,573],{},"从 ",[255,567,568],{},"any"," 中取具体值时，使用 ",[255,571,572],{},"is"," 做显式收窄",[282,575,576],{"id":267},[255,577,267],{},[245,579,580],{},"签名：",[435,582,584],{"className":437,"code":583,"language":439,"meta":440,"style":440},"text(value: string) -> widget\n",[255,585,586],{"__ignoreMap":440},[444,587,588],{"class":446,"line":447},[444,589,583],{},[245,591,592],{},"职责：",[249,594,595,598],{},[252,596,597],{},"构造文本节点",[252,599,600],{},"不承担格式化职责",[282,602,603],{"id":272},[255,604,272],{},[245,606,580],{},[435,608,610],{"className":437,"code":609,"language":439,"meta":440,"style":440},"fragment(children: list\u003Cwidget>) -> widget\n",[255,611,612],{"__ignoreMap":440},[444,613,614],{"class":446,"line":447},[444,615,609],{},[245,617,592],{},[249,619,620,623],{},[252,621,622],{},"聚合多个子节点",[252,624,625],{},"不承诺生成真实宿主节点",[245,627,411],{},[249,629,630,636,642],{},[252,631,632,635],{},[255,633,634],{},"children"," 可以为空",[252,637,638,639,641],{},"嵌套 ",[255,640,272],{}," 在渲染语义上可展平",[252,643,644,647],{},[255,645,646],{},"fragment([])"," 表示不产生可见子节点",[282,649,650],{"id":277},[255,651,277],{},[245,653,580],{},[435,655,657],{"className":437,"code":656,"language":439,"meta":440,"style":440},"comment(value: string) -> widget\n",[255,658,659],{"__ignoreMap":440},[444,660,661],{"class":446,"line":447},[444,662,656],{},[245,664,592],{},[249,666,667],{},[252,668,669],{},"构造注释或调试节点",[245,671,411],{},[249,673,674,677,680,683,686],{},[252,675,676],{},"不影响布局",[252,678,679],{},"不影响命中测试",[252,681,682],{},"不影响事件",[252,684,685],{},"不影响可访问性结构",[252,687,688],{},"后端可以选择保留或擦除",[282,690,691],{"id":262},[255,692,262],{},[245,694,695],{},"第一阶段按具名参数函数理解：",[435,697,699],{"className":437,"code":698,"language":439,"meta":440,"style":440},"func element({\n    name: string,\n    props: map\u003Cstring, any> = {},\n    children: list\u003Cwidget> = [],\n}) -> widget\n",[255,700,701,706,712,718,724],{"__ignoreMap":440},[444,702,703],{"class":446,"line":447},[444,704,705],{},"func element({\n",[444,707,709],{"class":446,"line":708},2,[444,710,711],{},"    name: string,\n",[444,713,715],{"class":446,"line":714},3,[444,716,717],{},"    props: map\u003Cstring, any> = {},\n",[444,719,721],{"class":446,"line":720},4,[444,722,723],{},"    children: list\u003Cwidget> = [],\n",[444,725,727],{"class":446,"line":726},5,[444,728,729],{},"}) -> widget\n",[245,731,411],{},[249,733,734,740,748,755,760],{},[252,735,736,739],{},[255,737,738],{},"name"," 必填",[252,741,742,745,746],{},[255,743,744],{},"props"," 默认空 ",[255,747,333],{},[252,749,750,745,752],{},[255,751,634],{},[255,753,754],{},"list",[252,756,757,759],{},[255,758,744],{}," 是宿主边界属性字典",[252,761,762,764],{},[255,763,634],{}," 是显式子节点列表",[245,766,767,768,771],{},"第一阶段不引入联合类型，因此 ",[255,769,770],{},"element.props"," 保持：",[435,773,775],{"className":437,"code":774,"language":439,"meta":440,"style":440},"map\u003Cstring, any>\n",[255,776,777],{"__ignoreMap":440},[444,778,779],{"class":446,"line":447},[444,780,774],{},[245,782,783],{},"这代表宿主边界的开放属性集合，不代表普通语言内部推荐的静态数据模型。",[282,785,786],{"id":786},"渲染树语义",[245,788,789],{},"普通组件函数最终会展开成由 intrinsic 构成的渲染树。",[245,791,792],{},"语言层关心的是渲染语义，而不是中间组件调用层级。",[469,794,795],{"id":795},"子节点顺序",[249,797,798,803],{},[252,799,800,802],{},[255,801,634],{}," 顺序有语义",[252,804,805],{},"子节点不能重排",[469,807,809,811],{"id":808},"fragment-展平",[255,810,272],{}," 展平",[245,813,814,815,818],{},"如果某个子节点是 ",[255,816,817],{},"fragment(...)","，渲染时可以将其展平成内部子节点序列。",[245,820,821],{},"也就是说，这两者在渲染层可以视为等价：",[435,823,825],{"className":437,"code":824,"language":439,"meta":440,"style":440},"fragment(children: [a, b])\nfragment(children: [fragment(children: [a]), b])\n",[255,826,827,832],{"__ignoreMap":440},[444,828,829],{"class":446,"line":447},[444,830,831],{},"fragment(children: [a, b])\n",[444,833,834],{"class":446,"line":708},[444,835,836],{},"fragment(children: [fragment(children: [a]), b])\n",[469,838,839],{"id":839},"当前不定义",[245,841,842],{},"第一阶段不定义：",[249,844,845,850,853,856],{},[252,846,847,849],{},[255,848,284],{}," 的比较或相等性",[252,851,852],{},"diff 语义",[252,854,855],{},"渲染后端的具体 Android \u002F iOS \u002F Web 映射细节",[252,857,858],{},"响应式更新机制",[860,861,862],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":440,"searchDepth":708,"depth":708,"links":864},[865,866,867,868,872,873,874,875,876],{"id":284,"depth":708,"text":284},{"id":337,"depth":708,"text":337},{"id":371,"depth":708,"text":371},{"id":257,"depth":708,"text":257,"children":869},[870,871],{"id":471,"depth":714,"text":471},{"id":533,"depth":714,"text":533},{"id":267,"depth":708,"text":267},{"id":272,"depth":708,"text":272},{"id":277,"depth":708,"text":277},{"id":262,"depth":708,"text":262},{"id":786,"depth":708,"text":786,"children":877},[878,879,881],{"id":795,"depth":714,"text":795},{"id":808,"depth":714,"text":880},"fragment 展平",{"id":839,"depth":714,"text":839},"md",{},{},{"title":222,"description":440},"ox_2ByISt0VYXlGtG-nPRA3UXo95rcNho1wapzejkVg",[888,889],{"title":218,"path":219,"stem":220,"description":440,"children":-1},{"title":226,"path":227,"stem":228,"description":440,"children":-1},1776981319057]