[{"data":1,"prerenderedAt":1109},["ShallowReactive",2],{"navigation":3,"-design-value-and-sharing-semantics":239,"-design-value-and-sharing-semantics-surround":1106},[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":206,"body":241,"description":575,"extension":1101,"meta":1102,"navigation":1103,"path":207,"seo":1104,"stem":208,"__hash__":1105},"content\u002F01.design\u002F11.value-and-sharing-semantics.md",{"type":242,"value":243,"toc":1056},"minimark",[244,248,251,255,282,285,302,305,308,322,325,330,333,337,340,356,359,363,366,380,383,387,390,404,416,419,422,425,433,436,439,447,450,456,459,467,473,476,479,497,502,505,509,526,529,544,549,553,562,565,569,622,626,663,667,704,710,715,718,725,731,736,739,742,753,759,764,767,770,780,783,790,795,798,801,804,808,870,873,881,884,887,890,893,901,904,912,915,918,921,941,944,947,950,954,964,968,971,986,989,993,996,999,1005,1008,1013,1016,1022,1028,1031,1034,1052],[245,246,247],"p",{},"本文档定义 Dujie 在语言层面对“赋值、传参、返回、修改、共享”的基本语义。",[245,249,250],{},"本文是类型系统总纲的专题文档，服务于 UI DSL 的当前语义设计，并为未来可能出现的响应式能力保留边界。它约束的是用户可见语义，而不是 Rust 后端的具体实现方式。",[252,253,254],"h2",{"id":254},"问题背景",[245,256,257,258,262,263,262,266,262,269,262,272,262,275,262,278,281],{},"当前文档中，曾经使用“值类型 \u002F 引用类型”来解释语言行为，并把 ",[259,260,261],"code",{},"string","、",[259,264,265],{},"list\u003CT>",[259,267,268],{},"map\u003CK, V>",[259,270,271],{},"opt\u003CT>",[259,273,274],{},"iter\u003CT>",[259,276,277],{},"widget",[259,279,280],{},"struct"," 等都归到“引用类型”里。",[245,283,284],{},"这种做法有几个问题：",[286,287,289,293,296,299],"steps",{"level":288},"4",[290,291,292],"h4",{},"它把用户可见语义和 Rust 后端实现强绑定",[290,294,295],{},"它会制造隐藏别名，降低局部可推理性",[290,297,298],{},"它不利于 UI DSL 的状态建模",[290,300,301],{},"它会让未来响应式系统和普通数据模型混在一起",[245,303,304],{},"对于 Dujie 这样的 UI DSL，普通数据和值的行为应尽量稳定、直接、可局部推导。共享、订阅、依赖传播等能力如果未来需要引入，也应由独立机制显式承担，而不是通过“所有容器类型和结构体默认共享可变状态”间接得到。",[252,306,307],{"id":307},"设计目标",[286,309,310,313,316,319],{"level":288},[290,311,312],{},"让赋值、传参、返回值语义对用户可预测",[290,314,315],{},"让普通数据建模不依赖隐藏别名",[290,317,318],{},"为未来可能的响应式能力保留边界，但不通过普通容器类型偷带共享语义",[290,320,321],{},"保留后端使用结构共享、写时复制、引用计数等优化的空间",[252,323,324],{"id":324},"核心结论",[326,327,329],"h3",{"id":328},"_1-dujie-不对用户暴露通用引用类型分类","1. Dujie 不对用户暴露通用“引用类型”分类",[245,331,332],{},"语言层不再把普通类型分为“值类型”和“引用类型”两大公开类别，并据此要求用户理解别名传播。",[326,334,336],{"id":335},"_2-普通-dujie-值默认采用值语义","2. 普通 Dujie 值默认采用值语义",[245,338,339],{},"除非未来某类类型被明确指定为特殊引用型或响应式类型，否则普通 Dujie 值在以下场景都采用值语义：",[341,342,343,347,350,353],"ul",{},[344,345,346],"li",{},"变量赋值",[344,348,349],{},"函数传参",[344,351,352],{},"函数返回",[344,354,355],{},"容器和结构体字段传播",[245,357,358],{},"也就是说，这些操作得到的是“逻辑上独立的值”。后续对其中一个值的修改，不应影响另一个值。",[326,360,362],{"id":361},"_3-存储共享可以作为实现优化但不能成为用户可观察语义","3. 存储共享可以作为实现优化，但不能成为用户可观察语义",[245,364,365],{},"后端可以使用以下技术降低拷贝成本：",[341,367,368,371,374,377],{},[344,369,370],{},"结构共享",[344,372,373],{},"写时复制（copy-on-write）",[344,375,376],{},"引用计数",[344,378,379],{},"持久化数据结构",[245,381,382],{},"但这些都属于实现策略，不应改变用户在语言层观察到的结果。",[326,384,386],{"id":385},"_4-未来若引入响应式共享也不由普通类型承担","4. 未来若引入响应式共享，也不由普通类型承担",[245,388,389],{},"如果未来 Dujie 需要引入响应式系统，那么：",[341,391,392,395,398,401],{},[344,393,394],{},"依赖收集",[344,396,397],{},"更新传播",[344,399,400],{},"显式共享状态",[344,402,403],{},"订阅关系",[245,405,406,407,262,410,262,413,415],{},"都应通过独立的响应式原语表达，而不是让 ",[259,408,409],{},"list",[259,411,412],{},"map",[259,414,280],{}," 默认共享底层可变状态。",[252,417,418],{"id":418},"术语",[326,420,421],{"id":421},"值语义",[245,423,424],{},"值语义指：",[341,426,427,430],{},[344,428,429],{},"赋值、传参、返回时得到逻辑上独立的值",[344,431,432],{},"之后对其中一个值的修改，不影响另一个值",[326,434,435],{"id":435},"共享实现",[245,437,438],{},"共享实现指：",[341,440,441,444],{},[344,442,443],{},"编译器或运行时内部可以复用底层存储",[344,445,446],{},"但用户不能通过普通语言操作观察到“隐藏别名”",[326,448,449],{"id":449},"可变绑定",[245,451,452,455],{},[259,453,454],{},"var"," 表示该绑定可被更新。",[245,457,458],{},"这里的“更新”包括：",[341,460,461,464],{},[344,462,463],{},"重新赋值",[344,465,466],{},"通过该绑定修改其当前值的可变部分，例如 list\u002Fmap\u002Fstruct",[245,468,469,472],{},[259,470,471],{},"let"," 表示该绑定不可更新。",[252,474,475],{"id":475},"容器类型与结构体",[245,477,478],{},"本文中的“容器类型”专指：",[341,480,481,485,489,493],{},[344,482,483],{},[259,484,265],{},[344,486,487],{},[259,488,268],{},[344,490,491],{},[259,492,271],{},[344,494,495],{},[259,496,274],{},[245,498,499,501],{},[259,500,280],{}," 不归入容器类型。它是名义类型，但在值语义讨论中同样属于“可包含其他值的聚合数据”。",[252,503,504],{"id":504},"按类型分类的语义规则",[326,506,508],{"id":507},"_1-基础类型","1. 基础类型",[245,510,511,262,514,262,517,262,520,262,523,525],{},[259,512,513],{},"int",[259,515,516],{},"float",[259,518,519],{},"bool",[259,521,522],{},"rune",[259,524,261],{}," 都按普通值处理。",[245,527,528],{},"其中：",[341,530,531,536,541],{},[344,532,533,535],{},[259,534,261],{}," 是不可变值",[344,537,538,540],{},[259,539,522],{}," 表示单个 Unicode 码点",[344,542,543],{},"基础类型之间不存在“共享修改”的语言语义",[245,545,546,548],{},[259,547,261],{}," 不再被视为用户层面的“引用类型”。",[326,550,552],{"id":551},"_2-容器类型与结构体","2. 容器类型与结构体",[245,554,555,262,557,262,559,561],{},[259,556,265],{},[259,558,268],{},[259,560,280],{}," 在语言层都视为普通数据值。",[245,563,564],{},"它们可以有更新操作，但这些更新只作用于当前值本身，不通过赋值关系隐式传播到其他变量。",[290,566,568],{"id":567},"例子list","例子：list",[570,571,576],"pre",{"className":572,"code":573,"language":574,"meta":575,"style":575},"language-dj shiki shiki-themes github-light github-dark github-dark","var a = [1, 2, 3];\nvar b = a;\n\nb[0] = 10;\n\n\u002F\u002F a == [1, 2, 3]\n\u002F\u002F b == [10, 2, 3]\n","dj","",[259,577,578,586,592,599,605,610,616],{"__ignoreMap":575},[579,580,583],"span",{"class":581,"line":582},"line",1,[579,584,585],{},"var a = [1, 2, 3];\n",[579,587,589],{"class":581,"line":588},2,[579,590,591],{},"var b = a;\n",[579,593,595],{"class":581,"line":594},3,[579,596,598],{"emptyLinePlaceholder":597},true,"\n",[579,600,602],{"class":581,"line":601},4,[579,603,604],{},"b[0] = 10;\n",[579,606,608],{"class":581,"line":607},5,[579,609,598],{"emptyLinePlaceholder":597},[579,611,613],{"class":581,"line":612},6,[579,614,615],{},"\u002F\u002F a == [1, 2, 3]\n",[579,617,619],{"class":581,"line":618},7,[579,620,621],{},"\u002F\u002F b == [10, 2, 3]\n",[290,623,625],{"id":624},"例子map","例子：map",[570,627,629],{"className":572,"code":628,"language":574,"meta":575,"style":575},"var a = {\"x\": 1};\nvar b = a;\n\nb[\"x\"] = 2;\n\n\u002F\u002F a == {\"x\": 1}\n\u002F\u002F b == {\"x\": 2}\n",[259,630,631,636,640,644,649,653,658],{"__ignoreMap":575},[579,632,633],{"class":581,"line":582},[579,634,635],{},"var a = {\"x\": 1};\n",[579,637,638],{"class":581,"line":588},[579,639,591],{},[579,641,642],{"class":581,"line":594},[579,643,598],{"emptyLinePlaceholder":597},[579,645,646],{"class":581,"line":601},[579,647,648],{},"b[\"x\"] = 2;\n",[579,650,651],{"class":581,"line":607},[579,652,598],{"emptyLinePlaceholder":597},[579,654,655],{"class":581,"line":612},[579,656,657],{},"\u002F\u002F a == {\"x\": 1}\n",[579,659,660],{"class":581,"line":618},[579,661,662],{},"\u002F\u002F b == {\"x\": 2}\n",[290,664,666],{"id":665},"例子struct","例子：struct",[570,668,670],{"className":572,"code":669,"language":574,"meta":575,"style":575},"var a = Pair { key: \"x\", value: [1, 2, 3] };\nvar b = a;\n\nb.value[0] = 10;\n\n\u002F\u002F a.value == [1, 2, 3]\n\u002F\u002F b.value == [10, 2, 3]\n",[259,671,672,677,681,685,690,694,699],{"__ignoreMap":575},[579,673,674],{"class":581,"line":582},[579,675,676],{},"var a = Pair { key: \"x\", value: [1, 2, 3] };\n",[579,678,679],{"class":581,"line":588},[579,680,591],{},[579,682,683],{"class":581,"line":594},[579,684,598],{"emptyLinePlaceholder":597},[579,686,687],{"class":581,"line":601},[579,688,689],{},"b.value[0] = 10;\n",[579,691,692],{"class":581,"line":607},[579,693,598],{"emptyLinePlaceholder":597},[579,695,696],{"class":581,"line":612},[579,697,698],{},"\u002F\u002F a.value == [1, 2, 3]\n",[579,700,701],{"class":581,"line":618},[579,702,703],{},"\u002F\u002F b.value == [10, 2, 3]\n",[326,705,707,708],{"id":706},"_3-optt","3. ",[259,709,271],{},[245,711,712,714],{},[259,713,271],{}," 是值包装类型。",[245,716,717],{},"它只表达“有值 \u002F 无值”，不额外引入共享语义。",[245,719,720,721,724],{},"其值语义由 ",[259,722,723],{},"T"," 的普通值语义继承而来。",[326,726,728,729],{"id":727},"_4-widget","4. ",[259,730,277],{},[245,732,733,735],{},[259,734,277],{}," 表示 UI 组件值。",[245,737,738],{},"它在语言层应视为不可变值，而不是可共享可变对象。",[245,740,741],{},"原因：",[341,743,744,747,750],{},[344,745,746],{},"UI 组件树更适合值式描述",[344,748,749],{},"这更利于后续做 diff、重建和响应式更新",[344,751,752],{},"这避免把“组件节点句柄”暴露成可变引用对象",[326,754,756,757],{"id":755},"_5-itert","5. ",[259,758,274],{},[245,760,761,763],{},[259,762,274],{}," 不应再被归入“引用类型”讨论。",[245,765,766],{},"它更接近一种瞬时遍历对象，而不是持久数据容器。",[245,768,769],{},"当前只先约定：",[341,771,772,777],{},[344,773,774,776],{},[259,775,274],{}," 不承载普通共享修改语义",[344,778,779],{},"它不是用来表达共享可变状态的类型",[245,781,782],{},"关于“是否可重复消费、是否单次遍历、赋值后如何观察其状态”等问题，后续另开文档处理。",[326,784,786,787],{"id":785},"_6-any","6. ",[259,788,789],{},"any",[245,791,792,794],{},[259,793,789],{}," 不改变值语义与共享语义的基本判断。",[245,796,797],{},"它只擦除静态类型信息，不自动把普通值变成共享引用对象。",[252,799,800],{"id":800},"函数传参与返回值",[245,802,803],{},"普通函数参数和返回值也采用值语义。",[326,805,807],{"id":806},"例子函数内部修改不应外溢","例子：函数内部修改不应外溢",[570,809,811],{"className":572,"code":810,"language":574,"meta":575,"style":575},"func append_one(xs: list\u003Cint>) -> list\u003Cint> {\n    var out = xs;\n    out.push(1);\n    return out;\n}\n\nvar a = [1, 2];\nvar b = append_one(a);\n\n\u002F\u002F a == [1, 2]\n\u002F\u002F b == [1, 2, 1]\n",[259,812,813,818,823,828,833,838,842,847,853,858,864],{"__ignoreMap":575},[579,814,815],{"class":581,"line":582},[579,816,817],{},"func append_one(xs: list\u003Cint>) -> list\u003Cint> {\n",[579,819,820],{"class":581,"line":588},[579,821,822],{},"    var out = xs;\n",[579,824,825],{"class":581,"line":594},[579,826,827],{},"    out.push(1);\n",[579,829,830],{"class":581,"line":601},[579,831,832],{},"    return out;\n",[579,834,835],{"class":581,"line":607},[579,836,837],{},"}\n",[579,839,840],{"class":581,"line":612},[579,841,598],{"emptyLinePlaceholder":597},[579,843,844],{"class":581,"line":618},[579,845,846],{},"var a = [1, 2];\n",[579,848,850],{"class":581,"line":849},8,[579,851,852],{},"var b = append_one(a);\n",[579,854,856],{"class":581,"line":855},9,[579,857,598],{"emptyLinePlaceholder":597},[579,859,861],{"class":581,"line":860},10,[579,862,863],{},"\u002F\u002F a == [1, 2]\n",[579,865,867],{"class":581,"line":866},11,[579,868,869],{},"\u002F\u002F b == [1, 2, 1]\n",[245,871,872],{},"这意味着：",[341,874,875,878],{},[344,876,877],{},"普通参数不是隐式引用参数",[344,879,880],{},"如果想表达“调用后外部状态被更新”，未来应使用显式机制，而不是依赖别名传播",[252,882,883],{"id":883},"对未来响应式系统的约束",[245,885,886],{},"本设计对未来响应式系统有一个明确要求：",[245,888,889],{},"普通数据值和响应式状态必须区分。",[245,891,892],{},"也就是说，未来响应式系统不应通过下面这种方式构建：",[341,894,895,898],{},[344,896,897],{},"把 list\u002Fmap\u002Fstruct 默认做成共享可变引用",[344,899,900],{},"再依赖别名变化触发更新",[245,902,903],{},"更合理的方向是：",[341,905,906,909],{},[344,907,908],{},"普通值保持值语义",[344,910,911],{},"响应式能力由专门的状态类型或响应式原语承担",[245,913,914],{},"这样可以避免“我只是传了一个值，为什么另一个地方的 UI 也被隐式改掉”这类问题。",[252,916,917],{"id":917},"允许的实现策略",[245,919,920],{},"本设计允许编译器或运行时采用多种内部策略实现值语义，包括：",[341,922,923,926,929,932,935],{},[344,924,925],{},"小对象直接拷贝",[344,927,928],{},"聚合对象的结构共享",[344,930,931],{},"写时复制",[344,933,934],{},"引用计数包装",[344,936,937,938,940],{},"针对 ",[259,939,277],{}," 的持久化树结构",[245,942,943],{},"但这些策略只能影响性能，不能改变语言层可见行为。",[252,945,946],{"id":946},"明确拒绝的设计",[245,948,949],{},"当前明确拒绝以下语言级设计：",[326,951,953],{"id":952},"_1-普通聚合类型默认共享可变状态","1. 普通聚合类型默认共享可变状态",[245,955,956,957,262,959,262,961,963],{},"也就是拒绝把 ",[259,958,409],{},[259,960,412],{},[259,962,280],{}," 的普通赋值定义为“只复制引用”。",[326,965,967],{"id":966},"_2-用-rust-后端表示直接反推语言语义","2. 用 Rust 后端表示直接反推语言语义",[245,969,970],{},"例如：",[341,972,973,980],{},[344,974,975,976,979],{},"因为后端用了 ",[259,977,978],{},"Arc\u003CT>","，所以语言里就认为它是引用类型",[344,981,975,982,985],{},[259,983,984],{},"Vec\u003CT>","，所以语言里就必须暴露某种 Rust 风格移动规则",[245,987,988],{},"这些都不应成立。",[326,990,992],{"id":991},"_3-用普通值模型代替未来响应式模型","3. 用普通值模型代替未来响应式模型",[245,994,995],{},"响应式系统需要显式设计，不应伪装成普通值赋值语义的一部分。",[252,997,998],{"id":998},"对现有文档的影响",[326,1000,1002],{"id":1001},"_00guide03data-types",[259,1003,1004],{},"00.guide\u002F03.data-types",[245,1006,1007],{},"后续应重写其中“值类型 \u002F 引用类型”的用户说明，不再把大量类型直接定义为共享引用。",[326,1009,1011],{"id":1010},"_01design06struct-design",[259,1012,188],{},[245,1014,1015],{},"该文档目前更适合被视为“某种后端实现探索”，而不是结构体的最终语言语义定义。",[326,1017,1019,1021],{"id":1018},"widget-与未来响应式设计",[259,1020,277],{}," 与未来响应式设计",[245,1023,1024,1025,1027],{},"后续讨论 ",[259,1026,277],{}," 和响应式系统时，应默认以“组件值”而不是“组件引用对象”为前提。",[252,1029,1030],{"id":1030},"未决问题",[245,1032,1033],{},"以下问题后续继续讨论：",[286,1035,1036,1041,1046,1049],{"level":288},[290,1037,1038,1040],{},[259,1039,274],{}," 的消费语义",[290,1042,1043,1044],{},"list\u002Fmap\u002Fstruct 的更新操作是否都要求 ",[259,1045,454],{},[290,1047,1048],{},"结构体字段更新的完整规则",[290,1050,1051],{},"未来响应式原语的名称和基本模型",[1053,1054,1055],"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":575,"searchDepth":588,"depth":588,"links":1057},[1058,1059,1060,1066,1071,1072,1084,1087,1088,1089,1094,1100],{"id":254,"depth":588,"text":254},{"id":307,"depth":588,"text":307},{"id":324,"depth":588,"text":324,"children":1061},[1062,1063,1064,1065],{"id":328,"depth":594,"text":329},{"id":335,"depth":594,"text":336},{"id":361,"depth":594,"text":362},{"id":385,"depth":594,"text":386},{"id":418,"depth":588,"text":418,"children":1067},[1068,1069,1070],{"id":421,"depth":594,"text":421},{"id":435,"depth":594,"text":435},{"id":449,"depth":594,"text":449},{"id":475,"depth":588,"text":475},{"id":504,"depth":588,"text":504,"children":1073},[1074,1075,1076,1078,1080,1082],{"id":507,"depth":594,"text":508},{"id":551,"depth":594,"text":552},{"id":706,"depth":594,"text":1077},"3. opt\u003CT>",{"id":727,"depth":594,"text":1079},"4. widget",{"id":755,"depth":594,"text":1081},"5. iter\u003CT>",{"id":785,"depth":594,"text":1083},"6. any",{"id":800,"depth":588,"text":800,"children":1085},[1086],{"id":806,"depth":594,"text":807},{"id":883,"depth":588,"text":883},{"id":917,"depth":588,"text":917},{"id":946,"depth":588,"text":946,"children":1090},[1091,1092,1093],{"id":952,"depth":594,"text":953},{"id":966,"depth":594,"text":967},{"id":991,"depth":594,"text":992},{"id":998,"depth":588,"text":998,"children":1095},[1096,1097,1098],{"id":1001,"depth":594,"text":1004},{"id":1010,"depth":594,"text":188},{"id":1018,"depth":594,"text":1099},"widget 与未来响应式设计",{"id":1030,"depth":588,"text":1030},"md",{},{},{"title":206,"description":575},"aO9d3fmTKWcTnpGSR_DYaSMoV1FWjRquLdIuj4zoEKA",[1107,1108],{"title":202,"path":203,"stem":204,"description":575,"children":-1},{"title":210,"path":211,"stem":212,"description":575,"children":-1},1776981319057]